2D 물리를 소행성 타입의 게임으로 구현하려고합니다. 창 테두리에 충돌 경계가 설정되었습니다.2D Sprite 물리학 관련 동작
그러나 우주선 스프라이트를 경계선에 충돌 시키면 (x 축 또는 y 축의 적절한 속도가 반대로 됨) 이동하기 위해 때때로 글리치가 발생합니다. 배는 일시적으로 점프 할 것이지만, 이동 키를 길게 잡으면 대개 스스로 해결할 것입니다.
문제는이 결함이 눈에 띄기 때문입니다.
관련 코드 섹션 :
#update velocity
def velocity(self, speed):
self.vx += math.sin(math.radians(self.angle)) * speed
self.vy += math.cos(math.radians(self.angle)) * speed
magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
if magnitude > self.maxvel:
self.vx *= 4/magnitude
self.vy *= 4/magnitude
if self.speed >= self.maxvel:
self.speed = self.maxvel
if self.speed <= -self.maxvel:
self.speed = -self.maxvel
내 이동 코드 :
if (key[K_UP]):
newShip.speed += 1
newShip.moving = 1
if (key[K_DOWN]):
newShip.speed -= 1
newShip.moving = 1
if (key[K_LEFT]):
newShip.angle += 4
if (key[K_RIGHT]):
newShip.angle -= 4
내 전체 코드가 여기에 있습니다 : http://pastebin.com/19rHq97R, 당신은 정말 생각 아무것도 사용할 수 있습니다 필요한 경우에만 2 이미지가 실행합니다.
나는이 문제가 충돌 탐지시 x 또는 y 속도의 역전과 관련이 있다고 생각하지만 정확한 문제를 해결할 수는 없다. 모든 통찰력이 인정됩니다.
편집 : 더 조사했습니다. 갑작스런 점프가 프로그램 된 가속 기능을 가지고 있지 않기 때문에 궁금합니다. http://pastebin.com/vFy9tjyN 내 터미널 로그에서 발췌되었습니다. 프로그램에서 관련 변수를 인쇄합니다.
고정 시간대를 사용 중입니까? 그렇지 않으면 타임 스텝 건너 뛰기가 불안정을 야기 할 수 있습니다. 의미는 그것이 경계에 침투하면 800 유닛을 움직일 수 있고, 다음 프레임은 600으로 이동하는 것입니다. 이미 안으로 들어가면 충돌하게 만듭니다. 따라서 스와핑으로 인해 스틱이 붙어서 튀어 오릅니다. – ninMonkey
@monkey 아직 타임 스텝을 고려하지 않았습니다. 나는 우주선이 충돌 할 수 있고, 얼마 동안 여행 할 수 있고, '추력'이 적용될 때, 충돌 자체와 관련이 있다는 것을 완전히 확신하지 못한다. 문제는 여전히 그 자체로 나타난다. – KNova
상관 관계가 없지만 cos은 x에 대한 것이고 sine은 y에 대한 것입니다. – ninMonkey