본문으로 바로가기

DX11_2020_0729_수_Animation

category DX11 2D Game Programming 2020. 7. 29. 17:31

200729_Animation.zip
1.66MB

 

0. SpriteShader.hlsl

  - uv 값에 curFrame 값 적용

더보기
cbuffer Frame : register(b0)
{ // 상수버퍼는 전달할 때 16byte로 맞춰야 한다!
    float2 maxFrame;
    float2 curFrame;
}
//
Texture2D map : register(t0);
SamplerState samp : register(s0);

struct PixelInput
{
    float4 pos : SV_Position;
    float2 uv : UV;
};

float4 PS(PixelInput input) : SV_TARGET
{
    float2 uv;
	//
    uv.x = (input.uv.x / maxFrame.x) + (curFrame.x / maxFrame.x);
    uv.y = (input.uv.y / maxFrame.y) + (curFrame.y / maxFrame.y);
    //
    return map.Sample(samp, uv);
}

 

1. Animation class

  - 기존 Animaiton class에서 maxFrame을 가져오는 위치만 수정 ( Texture -> sprite->frameBuffer )

더보기
// 1. 생성자 수정 ( Texture* -> Sprite* )
Animation::Animation(Sprite* sprite, double frameUpdateSec)
	: time(0), frameUpdateSec(frameUpdateSec), play(false),
	loop(false), pingpong(false), EndEvent(nullptr),
	EndEventInt(nullptr), nextAction(0), curPlayNum(0)
{
	// 2. maxFrame에 접근하는 코드 수정 ( Texture -> frameBuffer )
	maxFrame.x = sprite->GetFrameBuffer()->data.maxFrame.x;
	maxFrame.y = sprite->GetFrameBuffer()->data.maxFrame.y;
    // 이하 생략

}

 

2. Render()

  - animation에 저장되어있는 curFrame 값을 frameBuffer에 입력

  - curFrame이 SpriteShader를 통해 전달되어 texture의 특정 위치 출력  

더보기
void Player::Render()
{
	// curFrame에서 현재 프레임값을 가져와서 frameBuffer에 입력
	Float2 curAnimFrame = Float2(curAction->GetFrame().x, curAction->GetFrame().y);
	sprite->GetFrameBuffer()->data.curFrame = curAnimFrame;
	//
	sprite->Render();
	collider->Render();
}

 

'DX11 2D Game Programming' 카테고리의 다른 글

DX11_2020_0806_목_FX  (0) 2020.08.05
DX11_2020_0730_목_Animation(XML)  (0) 2020.07.30
DX11_2020_0728_화_Collider Offset  (0) 2020.07.28
DX11_2020_0727_월_Collision(OBB_Circle)  (0) 2020.07.27
DX11_2020_0724_금_ImGui & Collision  (0) 2020.07.24