2012-06-26 2 views
0

그래, 이제 막 자바 (Objective-C로 프로그래밍)를 배우기 시작했습니다. 나의 첫번째 게임은 Pokémon과 비슷한 게임이다. 그러나 훨씬 더 간단 해 보인다 ...스프라이트가 다른 스프라이트를 통해 고스트가되는 것을 막으십시오.

나는 곤경에 빠져서 2 명의 스프라이트가 서로 '고스트 어웨이'하는 것을 막을 수 없다. . 화면에는 테두리 설정 (경계), 플레이어 스프라이트 및 적 스프라이트가 있습니다.

public void playerUpdate(GameContainer gc, int delta) throws SlickException 
{ 
    Input input = gc.getInput(); 

    // Right Key Pressed 
    if (input.isKeyDown(Input.KEY_RIGHT) && (leftKeyPressed == false) 
      && (upKeyPressed == false) && (downKeyPressed == false)) 
    { 
     player = walkRight; 
     playerX += speed * delta; 
     rightKeyPressed = true; 
     if (playerX >= Main.getWindowWidth() - pImageWidth) 
     { 
      playerX -= speed * delta; 
     } 
    } else if (rightKeyPressed == true) 
    { 
     player = standRight; 
     rightKeyPressed = false; 
    } 

^^ 여기에서 충돌 감지를 구현해야합니다. 충돌 감지를 위해 각 이미지에 직사각형을 추가했습니다. 그러나 사라지게 만드는 방법이 아닙니다. 한 스프라이트가 다른 스프라이트를 통과하는 것을 막을 방법이 필요합니다.

아이디어가 있으십니까?

나는이 선수가 걸리면 구현하고 해제 할 수없는 경우에, 그러나

if (this.playerBoundingBox.intersects(Enemy.getEnemyBoundingBox()) 
{ 
    playerX += speed * delta; 
} 

사용하여 시도했다.

고마워

답변

1

충돌 감지는 광범위하고 깊은 주제이며,이를 구현하는 방법에는 여러 가지가 있습니다.

The Guide To Implementing 2D Platformers을 읽기를 강력히 권합니다. 그러면 큰 도움이됩니다. Sonic Retro Physics Guide을 사용하여 2D 플랫폼 엔진을 구현했습니다. 이는 실제로 유용했습니다.

내 게임에서 클로버 : A Curious Tale 나는 불필요한 픽셀 단위의 충돌을 경계 상자와 더 복잡한 하이브리드로 구현했습니다. 접근 방식은 원하는 이동 경로를 결정한 다음 픽셀 단위로 확인하여 아무 것도 진행되지 않았는지 확인합니다. 그럴 경우 해당 픽셀 - 1만큼 이동합니다.

모든 상황에서 완벽한 2D 엔진을 만드는 것은 매우 어려운 명령이며 시도해야하는 것이 아닙니다. 배우의 크기와 같은 것에 몇 가지 제한이 있고, 한 번 똑딱 거리는 모든 것의 최대 속도는 당신의 삶을 편하게 만듭니다. 플레이어를 밀 수있는 것들을 생략하는 것은 훨씬 쉽습니다. 한 번 '한 방향'(즉, 플레이어가 움직일 때, 다른 모든 액터가 움직일 때)에 충돌 감지를 한 번만하면됩니다.

+0

예, 저에게 첫 번째 자바 게임을위한 강렬한 2D 게임을 만들려고하지 않았습니다. 그렇게하시기 바랍니다 :) – Savlon

+0

을 나는를 가정, 다른 사람이 기여 좋아하면 D 을 : 난 그냥 그 디제이에 대한 서로 ... 확인도 환호을 통해 이동이 개 스프라이트를 막을 방법이있을 것이라고 생각 더 직접적인 대답은 Slick2D에서 직접 그렇게 할 수있는 방법이 없다는 것이며, 직접 구현해야 할 것입니다. 행운을 빈다. –

관련 문제