用太空栏射击子弹
这个问题涉及在按下太空栏时实现射击子弹的能力,同时在屏幕上保持玩家角色。 &&&&
问答代码最初存在一个问题,在拍摄时,播放器角色消失了。这是因为将射击和玩家运动分为不同的循环。为了解决这个问题,我们需要将它们合并为单个主循环,在该循环中同时更新两种行为。
另一个问题是当子弹到达屏幕顶部时,无法打破射击环。原始代码使用了一段段循环,该循环持续了无限。为了解决此问题,我们需要使用一个wire循环,该循环的条件可以检查子弹是否已达到顶部。
代码dimendanation
这是代码的修订版本:
导入pygame,OS
#简洁的样板设置
班级球员:
def __init __(self,x,y,高度,宽度):
...
def draw(self):
...
def move_left(self):
...
def move_right(self):
...
班级子弹:
def __init __(self,x,y):
...
def Update(self):
...
def draw(self):
...
#子弹清单
子弹= []
#初始化播放器
p =球员(600、500、50、30)
#主游戏循环
运行= true
运行时:
clock.tick(100)
#处理事件
对于pygame.event.get()中的活动:
如果event.type == pygame.quit:
run = false
如果event.type == pygame.keydown:
如果event.key == pygame.k_space:
Bullets.Append(子弹(P.X P.Width // 2,P.Y))
#更新对象
键= pygame.key.get_presse()
如果键[pygame.k_left]:
p.move_left()
如果键[pygame.k_right]:
p.move_right()
对于子弹中的B:
b.update()
#更新位置并在屏幕外删除子弹
如果B.Y< 0:
子弹。
#更新框架
D.Fill((98,98,98))
对于子弹中的B:
B.Draw()
p.draw()
win.update()
键更改:
现在,拍摄和播放器运动逻辑被合并到一个主游戏循环中。