建设网站公司地址,广告网站建设报价,互动平台有哪些,营销型企业网站一般具有哪些功能按照书上写的武装飞船#xff0c;写到能够左右移动了#xff0c;但到了射击(装子弹)时候#xff0c;按照书上的代码照搬了#xff0c;运行时没显示代码有问题#xff0c;但就是按了空格键#xff0c;不见有子弹#xff0c;其他都正常。代码#xff1a;alien_invasion.p…按照书上写的武装飞船写到能够左右移动了但到了射击(装子弹)时候按照书上的代码照搬了运行时没显示代码有问题但就是按了空格键不见有子弹其他都正常。代码alien_invasion.pyimport sysimport pygamefrom pygame.sprite import Groupfrom settings import Settingsfrom ship import Shipimport game_functions as gfdef run_game():#初始化pygame、设置和屏幕对象pygame.init()ai_settings Settings()screen pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption(Alien Invasion)#创建一艘飞船ship Ship(ai_settings,screen)#创建一个用于存储子弹的编组bullets Group()#开始游戏主循环while True:gf.check_events(ai_settings,screen,ship,bullets)ship.update()bullets.update()gf.update_screen(ai_settings,screen,ship,bullets)run_game()**game_functions.py**import sysimport pygamefrom bullet import Bulletdef check_keydown_events(event,ai_settings,screen,ship,bullets):响应按键if event.key pygame.K_RIGHT:ship.moving_right Trueelif event.key pygame.K_LEFT:ship.moving_left Trueelif event.key pygame.K_SPACE:#创建一颗子弹并将其加入到编组bullets中new_bullet Bullet(ai_settings,screen,ship)bullets.add(new_bullet)def check_keyup_events(event,ship):响应松开if event.key pygame.K_RIGHT:ship.moving_right Falseelif event.key pygame.K_LEFT:ship.moving_left Falsedef check_events(ai_settings,screen,ship,bullets):响应按键和鼠标事件for event in pygame.event.get():if event.type pygame.QUIT:sys.exit()elif event.type pygame.KEYDOWN:check_keydown_events(event,ai_settings,screen,ship,bullets)elif event.type pygame.KEYUP:check_keyup_events(event,ship)def update_screen(ai_settings,screen,ship,bullets):更新屏幕上的图像并切换到新屏幕#每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)ship.blitme()#让最近绘制的屏幕可见pygame.display.flip()#在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()**bullet.py**import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):一个对飞船发射的子弹进行管理的类def __init__(self,ai_settings,screen,ship):在飞船所处的位置创建一个子弹对象super(Bullet,self). __init__()self.screen screen#在(0,0)处创建一个表示子弹的举行再设置正确的位置self.rect pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)self.rect.centerx ship.rect.centerxself.rect.top ship.rect.top#存储用小数表示的子弹位置self.y float(self.rect.y)self.color ai_settings.bullet_colorself.speed_factor ai_settings.bullet_speed_factordef update(self):向上移动子弹#更新表示子弹位置的小数值self.y - self.speed_factor#更新表示子弹的rect的位置self.rect.y self.ydef draw_bullet(self):在屏幕上绘制子弹pygame.draw.rect(self.screen,self.color,self.rect)settings.pyclass Settings():存储《外星人入侵》的所有设置的类def __init__(self):初始化游戏的设置#屏幕设置self.screen_width 1200self.screen_height 800self.bg_color (230,230,230)#飞船的设置self.ship_speed_factor 1.5#子弹设置self.bullet_speed_factor 1self.bullet_width 3self.bullet_height 15self.bullet_color 60,60,60ship.pyimport pygameclass Ship():def __init__(self,ai_settings,screen):初始化飞船并设置其初始位置self.screen screenself.ai_settings ai_settings#加载飞船图像并获取其外接矩形self.image pygame.image.load(images/ship.bmp)self.rect self.image.get_rect()self.screen_rect screen.get_rect()#将每艘新飞船放在屏幕底部中央self.rect.centerx self.screen_rect.centerxself.rect.bottom self.screen_rect.bottom#在飞船的属性center中存储小数值self.center float(self.rect.centerx)#移动标志self.moving_right Falseself.moving_left Falsedef update(self):根据移动标志调整飞船的位置#更新飞船的center值而不是rectif self.moving_right and self.rect.right self.screen_rect.right:self.center self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left 0:self.center - self.ai_settings.ship_speed_factor#根据self.center更新rect对象self.rect.centerx self.centerdef blitme(self):在指定位置绘制飞船self.screen.blit(self.image,self.rect)回答game_function.py 中的子弹绘制要在显示在屏幕之前如下#在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()#让最近绘制的屏幕可见pygame.display.flip()这样改一下game_function.py—-snip—-def update_screen(ai_settings,screen,ship,bullets):更新屏幕上的图像并切换到新屏幕#每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)ship.blitme()#在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()ship.blitime()#让最近绘制的屏幕可见pygame.display.flip()我的也是 代码完全正确甚至打开了编辑者写的代码还是没有子弹不请自来你的game_function.py呢功能模块也要添加进相关的设置主程序才能调用出来主程序的bullets.update()这里应该是会报错的还有函数里面的形参要和书本上的一致耐心点抄下去不要着急已找到问题原因你应该是虚拟机中运行的虚拟机中要按住ctrlspace就可以有子弹了请问题主解决问题了吗我也遇到了同样的问题我也是这个问题子弹会出来但是子弹不会动谢谢大佬我也是这个问题照着书敲的看了好久看到了你的帖子问题才解决的 。谢谢