2017-09-10 1 views
1

파이 게임에서 몇 가지 기본적인 충돌 감지를 시도하고 있습니다. 지금까지 설정 했으므로 하나의 스프라이트가 다른 스프라이트와 접촉하면 둘 다 멈 춥니 다. 내 선수가 스프라이트에 부딪히는 경우 어떻게 알고 싶습니까? 스프라이트에서 멀리 떨어져있는 다른 방법으로 갈 수있게하려면 어떻게해야합니까?어떻게 움직이는 지 완전히 멈추지 않고 플레이어의 움직임을 제한합니까?

나는 어떻게 설정 했는가? 나는 지금 막 충돌했다는 것을 검출하는 기능이있어 움직임을 불가능하게하는 전역 변수를 변경시킨다.

+0

귀하의 질문에 약간의 불확실성이 있습니다. 원하는 행동을 정확하게 묘사하십시오. 그리고 코드를 보여주십시오 (최소한의 완전하고 검증 가능한 예제 (https://stackoverflow.com/help/mcve)). – skrx

답변

0

스프라이트에는 xVelyVel 개의 변수가 있어야합니다. 이 변수는 매 프레임마다 xy 개의 변수를 변경합니다. 스프라이트는 각각 xy 변수에서 화면에 그려집니다.

class Sprite(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 

     self.xVel = 0 
     self.yVel = 0 

     self.x = 100 
     self.y = 100 

     # Continue method 

    def update(self): 
     self.x += xVel 
     self.y += yVel 

     # Continue method 

다음은 스프라이트 충돌 처리 코드의 모습입니다.

if sprite1.yVel == 0 and sprite2.yVel == 0: 
    # This is when the sprites are not travelling up or down the y axis 
    sprite1.xVel = -sprite1.xVel 
    sprite2.xVel = -sprite2.xVel 

if sprite1.xVel == 0 and sprite2.xVel == 0: 
    # This is when the sprites are not travelling left or right on the x   
    # axis 
    sprite1.yVel = -sprite1.yVel 
    sprite2.yVel = -sprite2.yVel 

이 코드는 4 방향 이동을위한 코드입니다. xVel 변수를 -xVel과 같게 설정하면 반대 방향으로 이동합니다. 변수는 yVel에도 동일하게 적용됩니다. 객체를 사용하는 한 전역 변수를 변경할 필요가 없습니다.

또한 플레이어가 왼쪽 또는 오른쪽으로 이동하는 경우 yVel == 0입니다. 플레이어가 위 또는 아래로 여행하는 경우 xVel == 0.

스프라이트의 이동 속도는 프레임 속도에 따라 다릅니다. 이 문제를 해결하는 방법은 다른 질문의 개념 인 deltatime을 사용하는 것입니다.

희망이 도움이되었습니다!

관련 문제