안녕하세요 포트리스같은거 대충 만들려고 하는데.
이거 총알 쏘면 포신에 총알에 한개 박히고.
총쏘면 땅이 사라지는데
버그인가요? 아니면 제가 엄청난 잘못을 저지르고 있는건가요 ㅠㅠ
정말 제발 알려주세요 ㅠㅠ 답답합니다 구조상 문제가 있을까요..
#include "stdafx.h"
#include "gameStudy.h"
gameStudy::gameStudy()
{
}
gameStudy::~gameStudy()
{
}
void gameStudy::render(HDC hdc)
{
//탱크 땅
Rectangle(hdc, _Land[1].LandRect.left, _Land[1].LandRect.top, _Land[1].LandRect.right, _Land[1].LandRect.bottom);
Rectangle(hdc, _Tank[1].TankRect.left, _Tank[1].TankRect.top, _Tank[1].TankRect.right, _Tank[1].TankRect.bottom);
//포신
MoveToEx(hdc, _Tank[1].TankRect.left, _Tank[1].TankRect.top, NULL);
LineTo(hdc, _Tank[1].BarrelPosit.x, _Tank[1].BarrelPosit.y);
//총알
for (int i = 0;i < BULLETMAX;i++)
{
if (!_Bullet[i].IsShot) continue;
Rectangle(hdc, _Bullet[i].BulletRect.left, _Bullet[i].BulletRect.top, _Bullet[i].BulletRect.right, _Bullet[i].BulletRect.bottom);
}
}
HRESULT gameStudy::init()
{
//타이머세팅
SetTimer(_hWnd, 0, 5, NULL);
//초기화
ZeroMemory(_Tank,sizeof(Tank));
ZeroMemory(_Land,sizeof(Land));
//총알초기화
ZeroMemory(_Bullet, sizeof(Bullet));
//탱크,지형지물 초기세팅
_Land[1].LandPosit.x = WINSIZEX / 2;
_Land[1].LandPosit.y = WINSIZEY;
_Tank[1].TankPosit.x = 200;
_Tank[1].TankPosit.y = 300;
_Land[1].LandRect = RectMakeCenter(_Land[1].LandPosit.x, _Land[1].LandPosit.y, WINSIZEX - 100, 150);
_Tank[1].TankRect = RectMakeCenter(_Tank[1].TankPosit.x, _Tank[1].TankPosit.y, 80, 50);
//_Tank[1].BarrelPosit.x =_Tank[1].TankRect.right;
//_Tank[1].BarrelPosit.y =_Tank[1].TankRect.top;
//
return S_OK;
}
void gameStudy::KeySetting()
{
if (KEYMANAGER->isStayKeyDown(VK_RIGHT))
{
_Tank[1].TankPosit.x += 3;
}
if (KEYMANAGER->isStayKeyDown(VK_LEFT))
{
_Tank[1].TankPosit.x -= 3;
}
if (KEYMANAGER->isStayKeyDown(VK_UP))
{
_Tank[1].BarrelAngle += 1;
}
if (KEYMANAGER->isStayKeyDown(VK_DOWN))
{
_Tank[1].BarrelAngle -= 1;
}
if (KEYMANAGER->isOnceKeyDown(VK_SPACE))
{
for (int i = 0;i < BULLETMAX;i++)
{
if (_Bullet[i].IsShot) { continue; }
_Bullet[i].IsShot = true;
//포신 끝좌표값을 총알 시작좌표로.
_Bullet[i].BulletPosit.x = _Tank[1].BarrelPosit.x;
_Bullet[i].BulletPosit.y = _Tank[1].BarrelPosit.y;
//해당 좌표에 총알 렉트 생성
break;
}
}
Move();
}
void gameStudy::Move()
{
//if (!IntersectRect(&RectMake(0, 0, 0, 0), &_Land[1].LandRect, &_Tank[1].TankRect)) //탱크 추락
//{
// _Tank[1].TankPosit.y += 3;
//
//}
//if (_Tank[1].TankRect.bottom>_Land[1].LandRect.top) //탱크 추락
//{
// _Tank[1].TankPosit.y += 3;
//
//}
//탱크 이동
_Tank[1].TankRect = RectMakeCenter(_Tank[1].TankPosit.x, _Tank[1].TankPosit.y, 80, 50);
//포신 이동
_Tank[1].BarrelPosit.x = cosf(_Tank[1].BarrelAngle*rad)*Barrellength + _Tank[1].TankRect.left;
_Tank[1].BarrelPosit.y = -sinf(_Tank[1].BarrelAngle*rad)*Barrellength + _Tank[1].TankRect.top;
//총알 이동
for (int i = 0;i < BULLETMAX;i++)
{
if (!_Bullet[i].IsShot) { continue; }
_Bullet[i].BulletRect = RectMakeCenter(_Bullet[i].BulletPosit.x, _Bullet[i].BulletPosit.y, 10, 10);
//_Bullet[i].BulletRect.left += BULLETSPEED;
//_Bullet[i].BulletRect.right+=BULLETSPEED;
_Bullet[i].BulletPosit.x += BULLETSPEED;
}
}
void gameStudy::MakeObject()
{
//이건위에꺼랑 거의차의없는데 왜안됨?
/*_Tank[1].BarrelPosit.x = cosf(_Tank[1].BarrelAngle*rad)*Barrellength + _Tank[1].TankPosit.x;
_Tank[1].BarrelPosit.y = -sinf(_Tank[1].BarrelAngle*rad)*Barrellength + _Tank[1].TankRect.y;*/
}
void gameStudy::update()
{
////계속그려주기
//MakeObject();
//키처리
KeySetting();
//이동처리
gameNode::update();
}
void gameStudy::release()
{
gameNode::release();
}