Q&A
前提・実現したいこと
pygameでシューティングゲームを作っています。
発生している問題・エラーメッセージ
スペースキーを押すと自機から弾が発射されるようにしたいのですが、スペースを押しても反応がありません。
スペースを押すと、任意の自機の位置から白い四角が表示され、x方向に-5ずつ動くようにするにはどうすればいいでしょうか?
該当のソースコード
python3
1# -*- coding: utf-8 -*- 2import pygame 3from pygame.locals import * 4import sys 5 6SCREEN = Rect(0, 0, 700, 500) 7 8pygame.init() 9screen = pygame.display.set_mode((700, 500)) 10pygame.display.set_caption("Shooting") 11 12 13#自機と敵機 14class Flyer(pygame.sprite.Sprite): 15 def __init__(self, filename, x, y, vx, vy): 16 pygame.sprite.Sprite.__init__(self) 17 self.x = x 18 self.y = y 19 self.image = pygame.image.load(filename).convert_alpha() 20 w = self.image.get_width() 21 h = self.image.get_height() 22 self.rect = Rect(x, y, w, h) 23 self.vx = vx 24 self.vy = vy 25 def draw(self, screen): 26 screen.blit(self.image, self.rect) 27 28class Player(Flyer): 29 def __init__(self, filename, x, y, vx, vy): 30 super().__init__(filename, x, y, vx, vy) 31 def move(self): 32 pressed_key = pygame.key.get_pressed() 33 if pressed_key[K_LEFT]: 34 self.rect.move_ip(-self.vx, 0) 35 if pressed_key[K_RIGHT]: 36 self.rect.move_ip(self.vx, 0) 37 if pressed_key[K_UP]: 38 self.rect.move_ip(0, -self.vy) 39 if pressed_key[K_DOWN]: 40 self.rect.move_ip(0, self.vy) 41 if self.y < -30 or self.y > 500 or self.x < -30 or self.x > 700: 42 pygame.sprite.Sprite.remove(self) 43 def shoot(self, screen): #弾発射 44 bullet = pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, 20, 20), 0) 45 bullet.move_ip(-5, 0) 46 47class Enemy(Flyer): 48 def __init__(self, filename, x, y, vx, vy): 49 super().__init__(filename, x, y, vx, vy) 50 def move(self): 51 self.rect.move_ip(self.vx, self.vy) 52 self.rect = self.rect.clamp(SCREEN) 53 54#メイン 55def main(): 56 player = Player("player.jpg", 350, 400, 5, 5) 57 enemy1 = Enemy("enemy.jpg", 100, 100, 5, 0) 58 clock = pygame.time.Clock() 59 60 while 1: 61 clock.tick(30) 62 screen.fill((0, 0, 0)) 63 64 player.move() 65 enemy1.move() 66 player.draw(screen) 67 enemy1.draw(screen) 68 69 pygame.display.update() 70 71 for event in pygame.event.get(): 72 if event.type == QUIT: 73 pygame.quit() 74 sys.exit() 75 if event.type == KEYDOWN: 76 if event.key == K_SPACE: 77 player.shoot(screen) 78 if event.key == K_ESCAPE: 79 pygame.quit() 80 sys.exit() 81 82if __name__ == "__main__": 83 main()
試したこと
whileの中にplayer.shoot(screen)を入れてみましたが最初から、playerと同じ位置に動かない白い四角が表示されるだけでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
退会済みユーザー
2018/03/05 02:11
退会済みユーザー
2018/03/05 05:48
退会済みユーザー
2018/03/05 10:04
2018/03/05 10:08