화면 가운데에서 x 축을 따라 점을 움직일 수있는 게임을 만들고 있는데, 위에서부터 떨어지는 요소가있을 것입니다. 충돌 감지, 내가 구현하고 올바르게 작동하는 것 같습니다.내 캐릭터와 물체가 충돌 한 것을 감지하면 더 이상 움직일 수 없습니까?
내 문제는 캐릭터 (점)가 오브젝트쪽으로 이동하고 충돌이 발생하면 더 이상 캐릭터를 움직일 수 없으며 단순히 고정 된 위치에 머물러 있다는 것입니다. 이것은 캐릭터가 윈도우의 가장자리와 충돌 할 때 발생하지는 않습니다. 그러나 아래에서 볼 수 있듯이 윈도우 콜리 전과 오브젝트 콜리 전은 동일한 코드로 실행됩니다.
메인 게임 루프 :
while(running) {
// Queue of the events happening
while(SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT) {
running = false;
}
else if(event.type == SDL_KEYDOWN && event.key.repeat == 0) {
switch(event.key.keysym.sym) {
case SDLK_UP:
//sprite->yVel -= VELOCITY;
break;
case SDLK_DOWN:
//sprite->yVel += VELOCITY;
break;
case SDLK_LEFT:
sprite->xVel -= VELOCITY;
break;
case SDLK_RIGHT:
sprite->xVel += VELOCITY;
break;
}
}
else if(event.type == SDL_KEYUP && event.key.repeat == 0) {
switch(event.key.keysym.sym) {
case SDLK_UP:
//sprite->yVel += VELOCITY;
break;
case SDLK_DOWN:
//sprite->yVel -= VELOCITY;
break;
case SDLK_LEFT:
sprite->xVel += VELOCITY;
break;
case SDLK_RIGHT:
sprite->xVel -= VELOCITY;
break;
}
}
} // Poll event loop
float timeStep = getTicks(ticks)/(float) 1000;
move(sprite, timeStep, WINDOW_WIDTH, WINDOW_HEIGHT, head);
startTimer(ticks);
// Clear window then draw image
SDL_RenderClear(rend);
SDL_RenderCopy(rend, background->element, NULL, NULL);
SDL_RenderCopy(rend, sofa->element, NULL, &sofa->dest);
setPosition(sprite, sprite->xPos, sprite->yPos);
SDL_RenderCopy(rend, sprite->element, NULL, &sprite->dest);
SDL_RenderPresent(rend);
capFrameRate(timeStep);
} // Main game loop
이동 및 충돌 기능 : 화면 상단에서 떨어지는 몇 가지 요소가있을 것으로
void move(Character *c, float timeStep, const int WIDTH, const int HEIGHT, Scene *scene) {
c->xPos += c->xVel * timeStep;
// Collision check for the walls
if(((c->xPos < 0) || (c->xPos + c->dest.w > WIDTH)) || (collision(c, scene))) {
c->xPos -= c->xVel * timeStep;
}
}
bool collision(Character *character, Scene *scene) {
if(SDL_HasIntersection(&character->dest, &scene->element->dest)) {
return true;
}
else {
if(scene->nextElement == NULL) {
return false;
}
else {
collision(character, scene->nextElement);
}
}
return false;
}
나는 사람들을 위해 링크 된 목록을 구현했습니다 따라서 충돌 함수에 대한 재귀가 왜 필요합니다. 충돌 후 캐릭터가 왜 움직이지 않는지에 대한 생각이 있다면 나는 매우 감사 할 것입니다.
을 그래서 당신은 내가 이벤트 큐 전에 이동 기능을 시작해야 의미합니까? – JLW
@JLW 그게 무슨 뜻인지 모르겠습니다. 내 제안은 _check하고 다음 위치가 허용 된 위치인지 확인하는 것입니다. 현재 위치가 허용되는지 여부는 확인하지 않습니다. 충돌 시체가 움직이는 경우 추가 수정을해야합니다. – pingul
아 좋아, 네가 지금 무슨 뜻인지 알 겠어. 하루나 이틀 만에 도움을 주겠다. 도움이된다면 해결할 수있을 것이다. 감사! – JLW