大概是跟着书上打的,也不知道是什么问题,子弹是一条射出去的 但是我也建立了Group存子弹还有for循环
<main,py>
import sys
import pygame
from settings import Settings
from ship import Ship
from bullet import Bullet
class AlienInvasion:
def init(self):
pygame.init()
self.settings=Settings()
self.screen =pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height))
pygame.display.set_caption("Alien Invasion")
self.ship=Ship(self)
self.bullets =pygame.sprite.Group()
def run_game(self):
while True:
self._check_events()
self.ship.update()
self.bullets.update()
self._update_screen()
def _check_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type ==pygame.KEYDOWN:
self._check_keydown_events(event)
elif event.type == pygame.KEYUP:
self._check_keyup_events(event)
def _check_keydown_events(self,event):
if event.key ==pygame.K_RIGHT:
self.ship.moving_right = True
elif event.key == pygame.K_LEFT:
self.ship.moving_left = True
elif event.key == pygame.K_q:
sys.exit()
elif event.key == pygame.K_SPACE:
self._fire_bullet()
def _check_keyup_events(self, event):
if event.key ==pygame.K_RIGHT:
self.ship.moving_right = False
elif event.key ==pygame.K_LEFT:
self.ship.moving_left = False
def _fire_bullet(self):
new_bullet =Bullet(self)
self.bullets.add(new_bullet)
def _update_screen(self):
self.screen.fill(self.settings.bg_color)
self.ship.blitme()
for bullet in self.bullets.sprites():
bullet.draw_bullet()
pygame.display.flip()
if name=='main':
ai= AlienInvasion()
ai.run_game()
<bullet.py>
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
def init(self,ai_game):
super().init()
self.screen =ai_game.screen
self.settings =ai_game.settings
self.color =self.settings.bullet_color
self.rect =pygame.Rect(0,0,self.settings.bullet_width,self.settings.screen_height)
self.rect.midtop =ai_game.ship.rect.midtop
self.y =float(self.rect.y)
def update(self):
self.y -= self.settings.bullet_speed
self.rect.y =self.y
def draw_bullet(self):
pygame.draw.rect(self.screen,self.color,self.rect)
<setting.py>
class Settings:
def init(self):
self.screen_width =1200
self.screen_height=800
self.bg_color=(135,206,235)
self.ship_speed =1.5
self.bullet_speed =1.0
self.bullet_width =3
self.bullet_height =0.2
self.bullet_color =(60,60,60)
子弹长这样
怎么变成一颗颗的呢
Bullet.py文件里,你把子弹的高度设定为屏幕的高度了,所以每颗子弹都是屏幕那么高:
self.rect =pygame.Rect(0,0,self.settings.bullet_width,self.settings.screen_height)
应该改成:
self.rect =pygame.Rect(0,0,self.settings.bullet_width,self.settings.bullet_height)
你把子弹速度调慢点看看
draw_bullet方法有问题吧
在画子弹之前,不需要先画背景吗
背景不刷新,直接画子弹,那不是要画出好多子弹来,整个轨迹都在上面