반응형
각도 개념에 대한 이해가 부족한 것 같아서 자괴감이 드는 오전이었다. 굳이 다른 사람들이랑 비교할 필요는 없는데 자꾸 조바심을 내게 된다. 😐 때문에 복습도 할 겸, 아무런 레퍼런스 없이 혼자서 코딩을 진행해 보았다.
Angle 계산
보기 편안하게끔 대칭이동(?)한 X축에 접근하고, sin의 부호를 바꿔 준다.
void playGround::update()
{
gameNode::update();
if (KEYMANAGER->isStayKeyDown(VK_RIGHT)) _angle -= 0.04f;
if (KEYMANAGER->isStayKeyDown(VK_LEFT)) _angle += 0.04f;
// ...
_destX = cosf(_angle) * _length + _x;
_destY = -sinf(_angle) * _length + _y;
// ...
}
차지 샷 구현
void playGround::update()
{
// ...
if (KEYMANAGER->isStayKeyDown(VK_SPACE)) _count += 1;
if (KEYMANAGER->isOnceKeyDown(VK_SPACE))
{
_count = 0;
fireBullet();
}
if (KEYMANAGER->isOnceKeyUp(VK_SPACE))
{
if (_count > 200)
{
firePowerBullet();
_count = 0;
}
}
}
구조체 안에 boundCount를 선언해서 벽과 닿을 때 1씩 증가시켰다. 3 미만일 경우 벽에 닿았을 때 반사(튕겨져 나옴)되고, 3 이상일 경우 빠져 나가고 다시 총알을 재활용할 수 있게끔 구현했다.
트리플 샷 구현
_bullet[i].angle = _angle + 0.12f * (count - 1);
총알이 발사될 위치 보여 주기
void playGround::moveBulletLine()
{
_bulletLine[0].x = _destX;
_bulletLine[0].y = _destY;
_bulletLine[0].angle = _angle;
for (int i = 1; i < BULLETLINEMAX; i++)
{
_bulletLine[i].angle = _angle;
_bulletLine[i].x = _bulletLine[i - 1].x + cosf(_bulletLine[i].angle) * _bulletLine[i].speed;
_bulletLine[i].y = _bulletLine[i - 1].y + -sinf(_bulletLine[i].angle) * _bulletLine[i].speed;
}
}
반응형