2012-06-10 5 views
3

나는 하향식 슈팅 게임을 만들고 내 좀비가 내 캐릭터를 따라 가기를 바라고, 내 프로그램은 메인 루프를 사용한다. 내 캐릭터의 위치는 x와 y이며 화살표 키로 제어됩니다. 나는 좀비를 맞았는데, 지금은 스크린 샷의 왼쪽 가장자리에서 무작위로 생성됩니다. 좀비가 어디에서 태어난 지 내 위치를 따를 수 있도록하려면 어떻게해야합니까? 내 메인 루프에서 좀비 = makezombie()파이 게임에서 적을 어떻게 따라 가게 만드시겠습니까?

을 설정

def makezombie(): 
    global zom 
    zom = Rect (0,randint(0, height-40), 49, 38) 
    return zom 

나는 다음과 같은 한 :

는 좀비 기능입니다

for shot in shots: 
    if zombie.collidepoint(shot[X],shot[Y]): 
     zombie=makezombie() 
     points+=1000 
     impact.play() 
     blood.play() 

답변

6

잘 모르겠어요 I 질문을 완전히 이해하지만 근본적으로 할 수있는 것은 플레이어 (x, y)와 조디 (x, y)를 조정하는 것입니다. 가정 (XP, YP) ​​선수는 좌표와 (XZ, YZ) 좀비가, 당신이 플레이어에게 좀비의 방향을 찾으려면 다음 알고리즘을 사용할 수 있습니다 : 메인 루프에서 다음

import math 
(dx, dy) = ((xp - xz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2), 
      (yp - yz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2)) 

당신 newCoord = (xp + dx * spped, yp + dy * speed)를 수행하여 좀비 x 및 y 위치 좌표를 업데이트하려고합니다. 여기서 speed는 좀비가 루프 당 이동하려는 픽셀 수입니다. 그런 다음이 새로운 위치에서 좀비를 다시 그리십시오.

희망 하시겠습니까? 그렇지 않은 경우 질문을 명확히하십시오.

+1

왜 사용하지에 운동의 X, Y 값을 추가? – sloth

+0

둘 중 하나가 작동하지만 필자가 필요하지 않으면 너무 많은 모듈을 가져 오지 않는 것을 선호합니다. 비록 math.sqrt가 아마 코드를 읽는 누군가에게 더 이해할 수 있음을 인정할지라도 하나가 다른 것보다 낫다면 나는 정말로 확신 할 수 없다. – user1413793

+0

내 노트북 ​​(우분투의 Python 2.7)에서''math.sqrt''를 사용하는 것이''timeit.timeit()''함수를 ​​사용하여 측정 할 때 두 배 빠릅니다. ''math.sqrt''는 계산 당 631ns (평균 1 백만)가 소요되며''x ** 0.5''는 약 1260ns가 걸립니다. 개별적으로 큰 차이는 없지만 게임에서 많은 수의 캐릭터의 위치를 ​​업데이트 할 때 루프에서 많은 계산을 수행하는 경우 상당히 차이가 날 수 있습니다 ... – Blair

1

벡터 수학에 대해 알고 있다면 (예 : euclid) 벡터 빼기를 사용할 수 있습니다.

zombie_speed = 50 # pixels/an update 
player = Vector2(player.rect.x, player.rect.y) 
zombie = Vector2(zombie.rect.x, zombie.rect.y) 
movement = player - zombie 
movement.normalize() 
movement *= zombie_speed 

그런 다음 ** 0.5의 math.sqrt 대신 좀비의 사각형()

+0

참고 : 내 마지막 두 줄은 내적 사용과 동일합니까? – ninMonkey

관련 문제