===== DX 2D비행슈팅강좌 ======
===== 15. Character의 위치 =====
위치설정, 이동등을 하려면, Character의 위치가 필요합니다.
Character의 위치를 넣어서 setPosition과 movePosition기능을
넣어보겠습니다.
Character의 위치와 그림의 위치는 별개로 동작하기 위해서입니다.
1. Character의 위치인스턴스
2. 이동
3. 위치설정
4. 분리된 함수들
5. 플레이어의 이미지
6. 플레이어이미지의 위치
7. 총알발사시 Character의 위치를 이용
8. 기능이 약화된 moveLeft
1. Character의 위치인스턴스
_vPosition
그림은 각각개별위치를 가지므로, 위치설정시
Character의 위치가 필요합니다.
Character가 얼만큼이동했으니, 그림들도 그만큼이동하라고 합니다.
그림들은 Character의 위치기준으로 배치가 되는셈입니다.
2. 이동
VOID Character::movePosition(const D3DXVECTOR3* vPos)
{
_vPosition += *vPos;
INT iAniSize = 0;
iAniSize = _vImages.size();
INT iImage_size = 0;
for (INT i=0; i<iAniSize; ++i)
{
iImage_size = _vImages[i].size();
for (INT k=0; k<iImage_size; ++k)
{
_vImages[i][k]->Position.x += vPos->x;
_vImages[i][k]->Position.y += vPos->y;
}
}
}
이전의 moveLeft와 비슷합니다.
다른점은 벡터값만큼 Character._vPosition를 이동시키고,
모든 그림에도 그만큼 이동을 시킵니다.
3. 위치설정
VOID Character::setPosition(const D3DXVECTOR3* vPos)
{
D3DXVECTOR3 vMove;
vMove = *vPos - _vPosition;
movePosition(&vMove);
}
바꿀위치를 받아서, 이동할 량을 계산합니다.
그리고, movePosition을 호출하여 이동을 시킵니다.
기존의 setPosition은 사용하지 않아서 삭제합니다.
4. 분리된 함수들
VOID InitBullet(VOID);
VOID InitEnemy(VOID);
VOID InitPlayer(VOID);
InitCharacter의 함수가 너무커서 3개로 분리했습니다.
5. 플레이어의 이미지
D3DXCreateTextureFromFileExW( _pd3dDevice, L"nemo80_160.png",
플레이어의 중심점을 바로 알수있게 하기위해
십자가 그려진이미지를 사용하였습니다.
Character의 0.0f, 0.0f로 위치시키면, 이미지의 정중앙이
윈도의 0,0에 위치합니다.
6. 플레이어이미지의 위치
PlayerImage.Position.x = -40.0f;
PlayerImage.Position.y = -80.0f;
플레이어위치에 이미지의 정중앙으로 이미지를 맞추기위해
이동시킵니다.
총알또한 같은 방법으로 이동합니다.
6. 위치얻기
const D3DXVECTOR3* getPosition(VOID);
총알이 나갈위치를 얻을때 이미지에서 얻는것이 아니라
Character에서 얻습니다.
이렇게 하면, 총알이 나갈위치라던지, 어떤 이벤트가 발생할때,
좌상단이 아니라 센터이므로 좌표설정하기가 쉽습니다.
7. 총알발사시 Character의 위치를 이용
imgBullet.Position = *_Player.getPosition();
_Bullet[i].setPosition( &imgBullet.Position );
이미지에서 위치를 받는것이 아니라, Character에서 받습니다.
기준점에서 그리게 되므로, 특별히 값을넣지 않아도 정중앙에서 발사됩니다.
8. 기능이 약화된 moveLeft
VOID Character::moveLeft(VOID)
{
movePosition( &D3DXVECTOR3( -_Property.Speed * t, .0f, .0f) );
}
속도만 적용하여, movePosition을 호출하는것으로 끝납니다.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.