私はpygameを使ってタワー防衛ゲームを作成しています。そして敵の仕事をうまく動かして動かす機能。しかし、次の敵は、最初の敵が動いたときにのみ動きます。私はこれがfor
またはwhile
ループと関係があると仮定します。オブジェクトが同時に動くように誰が自分のコードを修正できるのでしょうか。Pygame:オブジェクトが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
必要とされている最初の関数はこの1つである移動敵の関数である:最後に
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)
、これらの関数
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
を使用しているため
のようなものかもしれないが、簡単に見てから、私はこの問題は、あなたがすべてのために、forループ内でdisplay.update()を呼び出すこともできると思います敵の動き。 –
@kluttの外に移動してみてください。敵が1つずつ移動するので、実際には動作しないと思います。どのように一緒に動かすことができるのですか? –
@JonasGiuro試してみます –