파이 게임을 사용하여 타워 방어 게임을 만들고 있습니다. 적의 일을 산란시키고 움직이는 기능. 그러나 첫 번째 적의 이동이 끝나면 다음 적만 움직입니다. 나는 이것이 for
또는 while
루프와 관련이 있다고 가정합니다. 객체가 동시에 움직 이도록 코드를 수정할 수있는 사람.파이 게임 : 하나씩 움직이는 물체
이 기능은 게임의 메인 루프에서 호출됩니다, 이러한 기능을 마지막으로
def move(self):
speed = config.DEFAULT_SPEED
# Update enemy's location
if self.get_position()[0] < self.trackNextWaypoint()[1]:
if self.trackNextWaypoint()[1] - self.get_position()[0] >= speed:
self.set_position((self.get_position()[0] + speed, self.get_position()[1]))
else:
self.set_position((self.get_position()[0] + (self.trackNextWaypoint()[1] - self.get_position()[0]),
self.get_position()[1]))
if self.get_position()[0] > self.trackNextWaypoint()[1]:
if self.get_position()[0] - self.trackNextWaypoint()[1] >= speed:
self.set_position((self.get_position()[0] - speed, self.get_position()[1]))
else:
self.set_position((self.get_position()[0] - (self.get_position()[0] - self.trackNextWaypoint()[1]),
self.get_position()[1]))
if self.get_position()[1] < self.trackNextWaypoint()[2]:
if self.trackNextWaypoint()[2] - self.get_position()[1] >= speed:
self.set_position((self.get_position()[0], self.get_position()[1] + speed))
else:
self.set_position((self.get_position()[0],
self.get_position()[1] + (self.trackNextWaypoint()[2] - self.get_position()[1])))
if self.get_position()[1] > self.trackNextWaypoint()[2]:
if self.get_position()[1] - self.trackNextWaypoint()[2] >= speed:
self.set_position((self.get_position()[0], self.get_position()[1] - speed))
else:
self.set_position((self.get_position()[0], self.get_position()[1] - (self.get_position()[1] - self.trackNextWaypoint()[2])))
# If enemy position is on waypoint
if self.get_position()[0] == self.trackNextWaypoint()[1] and self.get_position()[1] == self.trackNextWaypoint()[2]:
self.setWaypointsReached(1)
:
# creates and places all of the enemys
def begin_wave(self):
# mark next waves as started
self.wave += 1
print("Wave number: ", self.wave)
### Draw Enemy ###
for enemy in self.enemies:
while enemy.waypoints_reached < len(config.WAYPOINTS):
# Move enemy
enemy.move()
# Paint game + new enemy location
self.paint(self.screen)
# Update Screen
pygame.display.update()
# if done -> set state to BA_CLEAR
print("Wave Completed!")
self.waves_comp += 1
self.state = config.BA_CLEAR
필요한 첫 번째 함수는 하나입니다 이동 적 기능입니다
def trackNextWaypoint(self):
for waypoint in config.WAYPOINTS:
if waypoint[0] == self.waypoints_reached+1:
return waypoint
break
def setWaypointsReached(self, number):
self.waypoints_reached += number
def get_position(self):
return self.position
def set_position(self, position):
self.position = position
업데이트
는 그리고 또한 for
내부 while
을 사용하기 때문에
같은 것을 할 수 있지만, 얼핏에서 나는 문제는 당신이 모든을 위해, 루프의 내부 display.update()를 호출하는 것이 될 수 있다고 생각 적의 움직임. –
@klutt의 외부로 이동 해보십시오. 원수가 하나씩 이동하기 때문에 제대로 작동하지 않는다고 생각합니다. 단계별로 단계별로 이동할 수 있습니다. –
@JonasGiuro 시도해 보겠습니다. –