0

私は StarDodger というゲームを作っていて、船から発射するレーザーを作っています。

船の座標はマウスの座標と同じで、lser inamge を船の座標から開始し、レーザーを x 座標にとどめて垂直に移動させたい

問題は、ゲームがループで更新されているため、こぼれた秒ごとに変更される座標を取得しようとするときです

そのため、マウス ボタンを押してレーザー = True を押したときに座標を取得し、それらの座標を、もう一度押すまで変化しない変数に保存する方法が必要です。

レーザーを発射する方法は次のとおりです。

def laser_shoot(self):
    self.laser_img = pygame.image.load('rec/game/laser.png')
    self.laser_img_r = self.laser_img.get_bounding_rect()
    self.mouse_pos = pygame.mouse.get_pos()
    self.mouse_x, self.mouse_y = self.mouse_pos
    self.laser_img_r.y+=15
    (self.laser_x, self.laser_y) = (self.mouse_x,self.laser_img_r.y)
    screen.blit(self.laser_img,(self.laser_x, self.laser_y))

レーザーは発射するだけif self.laser == True and pygame.mouse.get_pressed()[0]:

現在行われているのは、マウスの x 座標と y 座標を取得し、マウスの x 座標でレーザーを照射し、ループする代わりに 15 で y 座標を作成し、ゲームがループするたびにレーザーの y 位置を 15 ずつ変更することです。

4

1 に答える 1

0
  • 火災が発生した後に船の x 座標が移動しても、レーザーの x 座標は一定のままですか?
  • 開始時にスプライトをロードするのが最善です。重複したレーザーをロードしている可能性があるようです。
  • mousedown イベントでマウス座標を取得する

画像がないと動きがよくわかりません。

for event in pygame.event.get():
    if event.type == MOUSEBUTTONDOWN:
        # now use event.pos

弾丸/レーザーを発射すると、オブジェクトが「スポーン」するのが一般的です。LMB で (そして火は問題ありません)、 spawn しますLaser(pos=event.pos)。開始位置を記憶し、Laser.update()死ぬまで , ごとに成長します。それがスプライトの場合は、self.kill().

于 2013-06-10T05:02:58.097 に答える