profile image

L o a d i n g . . .

article thumbnail image
Published 2020. 6. 10. 21:32
반응형

각도 개념에 대한 이해가 부족한 것 같아서 자괴감이 드는 오전이었다. 굳이 다른 사람들이랑 비교할 필요는 없는데 자꾸 조바심을 내게 된다. 😐 때문에 복습도 할 겸, 아무런 레퍼런스 없이 혼자서 코딩을 진행해 보았다.

youtu.be/-aCNCvexdfQ

 

YouTube

 

www.youtube.com

 

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;
	}
}

 

 

반응형
복사했습니다!