SDL을 사용하여 C++에서 shmup 게임을위한 프로토 타입을 작성 중입니다 ... 지금은 클래스를 사용하지 않고 기본 작업을 수행하려고합니다. 이제 여러개의 총알을 쏘지 만 카운터가 리셋되는 방식 때문에 믿을 수없는 이상한 행동을합니다 ... 총알이 나타나고 사라지고 일부는 총알이 발사 된 지점에서 계속 깜박입니다 , 제한이 스크린 상에 있지 않더라도 어떤 것이 다시 쏠 수 있기 전에 때때로 지연이있을 것입니다 ... 그리고 때로는 플레이어 캐릭터가 갑자기 오른쪽으로 점프하고 오직 위아래로 움직일 수 있습니다. 어떻게하면 부드럽게 쏘을 수 있을까요? 나는 모든 관련 코드를 포함 시켰습니다 ...for 루프를 사용하여 여러 글 머리 기호를 올바르게 촬영하는 방법은 무엇입니까?
[편집] 내가 정리해 내면 모든 것을 정리하고 클래스로 옮기기를 원한다는 것을 명심하십시오. 이것은 단순한 프로토 타입이므로
[edit2] ePos는 적의 위치이고, pPos는 플레이어의 위치입니다.
//global
SDL_Surface *bullet[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
bool shot[10];
int shotCount = 0;
SDL_Rect bPos[10];
//event handler
case SDLK_z: printf("SHOT!"); shot[shotCount] = true; ++shotCount; break;
//main function
for(int i = 0; i <= 9; i++)
{
shot[i] = false;
bullet[i] = IMG_Load("bullet.png");
}
//game loop
for(int i = 0; i <= shotCount; i++)
{
if(shot[i] == false)
{
bPos[i].x = pPos.x;
bPos[i].y = pPos.y;
}
if(shot[i] == true)
{
bPos[i].y -= 8;
SDL_BlitSurface(bullet[i], NULL, screen, &bPos[i]);
if((bPos[i].y + 16 == ePos.y + 16) || (bPos[i].x + 16 == ePos.x + 16))
{
shot[i] = false;
}
else if(bPos[i].y == 0)
{
shot[i] = false;
}
}
}
if(shotCount >= 9) { shotCount = 0; }
코드가 충분하지 않습니다. ePos 란 무엇입니까? 나는 단순함을 추구하면서 물건을 더 복잡하게 만들었다 고 생각합니다. IMO를 사용하면 간단한 글 머리 기호 클래스를 만든 다음 게임 루프에서 Bullet :: update()를 작성해야합니다. –
좋아요. 지금 모든 것을 클래스로 이동하는 중입니다. for 루프와 배열을 계속 사용해야합니까? 아니면 새 연산자와 삭제 연산자를 사용해야합니까? – user1122136