我的pygame子弹每次通过循环只会触发一次。想开除多次

萨拉·辛格(Sarab Singh)

我对编码非常陌生,我正尝试让一艘船发射多发子弹,但是每次我按空格键时,子弹都会重新触发,并且不会到达屏幕的尽头。似乎每次只能调用我的Bullet类的一个实例,但是我不知道如何解决它。这是到目前为止的代码:

import sys

import pygame

from pygame.sprite import Sprite 

class Sideship():

    def __init__(self):

        pygame.init()

        self.screen = pygame.display.set_mode((1200,800))
        self.screen_rect = self.screen.get_rect()
        pygame.display.set_caption("Side Ship")
        self.bg_color = (50, 50, 255)

        self.bullets = pygame.sprite.Group()

        self.jet = Jet()

    def run_game(self):


        self.jet.rect.x = -20
        self.jet.rect.y = 290

        self.bullet = Bullet()

        while True:

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_DOWN:

                        self.jet.moving_down = True

                    if event.key == pygame.K_UP:

                        self.jet.moving_up = True


                    if event.key == pygame.K_SPACE:

                        self.new_bullet = Bullet()

                        self.bullets.add(self.new_bullet)
                        self.new_bullet.rect.x = self.jet.rect.x+200
                        self.new_bullet.rect.y = self.jet.rect.y+30

                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_DOWN:

                        self.jet.moving_down = False

                    if event.key == pygame.K_UP:

                        self.jet.moving_up = False

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        sys.exit() 

            self.jet.update()

            self.bullets.update()

            self.screen.fill(self.bg_color)

            self.bullets.update()

            for bullet in self.bullets.sprites():
                pygame.draw.rect(self.screen, self.new_bullet.bullet_color, self.new_bullet.rect)

            self.screen.blit(self.jet.image, self.jet.rect)

            pygame.display.flip()

class Jet():

    def __init__(self):

        self.image = pygame.image.load('jet.bmp')
        self.rect = self.image.get_rect()

        self.moving_down = False
        self.moving_up = False

        self.rect.y = float(self.rect.y)
        self.rect.x = float(self.rect.x)

    def update(self):
        if self.moving_down and self.rect.bottom < 801:    
            self.rect.y += 1.9 
        if self.moving_up and self.rect.top > -14:
            self.rect.y -= 1.4

class Bullet(Sprite):

    def __init__(self,):
         super().__init__()
         self.bullet_width = 30
         self.bullet_height = 5
         self.bullet_color = (250,250,250)
         self.rect = pygame.Rect(0,0, self.bullet_width, self.bullet_height)

    def update(self):
        self.rect.x += 4

side_ship = Sideship()
side_ship.run_game()

拉比德76

问题出在循环中,这引出了子弹头。遍历项目符号时,当前元素由引用bullet因此,您必须绘制bullet,而不是self.new_bullet

pygame.draw.rect(self.screen, self.new_bullet.bullet_color, self.new_bullet.rect)

for bullet in self.bullets.sprites():
   pygame.draw.rect(self.screen, bullet.bullet_color, bullet.rect)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

滚动事件多次触发,但我需要每次滚动触发一次

来自分类Dev

转换器只会触发一次,而不是每次标签内容更改时都会触发

来自分类Dev

ComponentDidUpdate触发多次而不是每次更新一次

来自分类Dev

多次设置实时数据值只会向观察者触发最后一次

来自分类Dev

通过循环一次避免多次编码

来自分类Dev

我的循环打印多次。如何获得一次打印?

来自分类Dev

我的循环打印多次。如何获得一次打印?

来自分类Dev

虽然循环只会发生一次

来自分类Dev

单击一次事件多次触发

来自分类Dev

性能:一次完成所有操作,还是每次操作循环多次?

来自分类Dev

循环不会重复一次,而只会重复一次

来自分类Dev

循环仅触发一次

来自分类Dev

循环仅触发一次

来自分类Dev

重试仅触发一次而不是多次触发

来自分类Dev

为什么每次循环执行一次时我都会得到“none”?

来自分类Dev

尽管多次出现,但只会打印一次值的命令

来自分类Dev

限制“鼠标滚轮”增量每次滚动触发一次

来自分类Dev

呈现视图后,只会触发一次“主干视图”事件

来自分类Dev

JQuery keydown 事件只会触发一次,除非发生任何其他事情

来自分类Dev

如何每次会话一次仅在页面中触发一次jQuery函数?

来自分类Dev

我通过python中的串口发送命令,但它们被多次发送而不是一次

来自分类Dev

如何限制事件一次触发多次

来自分类Dev

敲除计算出的一次触发多次

来自分类Dev

滚动功能触发多次而不是一次

来自分类Dev

pygame,我如何在循环内将游戏中的分数只添加一次?

来自分类Dev

def 函数在每个 (while) 循环中重复两次,即使我每次只调用它们一次

来自分类Dev

如何使我的while循环每分钟触发一次?

来自分类Dev

for循环字符串比较器只会迭代一次

来自分类Dev

我的for循环只经历了一次

Related 相关文章

  1. 1

    滚动事件多次触发,但我需要每次滚动触发一次

  2. 2

    转换器只会触发一次,而不是每次标签内容更改时都会触发

  3. 3

    ComponentDidUpdate触发多次而不是每次更新一次

  4. 4

    多次设置实时数据值只会向观察者触发最后一次

  5. 5

    通过循环一次避免多次编码

  6. 6

    我的循环打印多次。如何获得一次打印?

  7. 7

    我的循环打印多次。如何获得一次打印?

  8. 8

    虽然循环只会发生一次

  9. 9

    单击一次事件多次触发

  10. 10

    性能:一次完成所有操作,还是每次操作循环多次?

  11. 11

    循环不会重复一次,而只会重复一次

  12. 12

    循环仅触发一次

  13. 13

    循环仅触发一次

  14. 14

    重试仅触发一次而不是多次触发

  15. 15

    为什么每次循环执行一次时我都会得到“none”?

  16. 16

    尽管多次出现,但只会打印一次值的命令

  17. 17

    限制“鼠标滚轮”增量每次滚动触发一次

  18. 18

    呈现视图后,只会触发一次“主干视图”事件

  19. 19

    JQuery keydown 事件只会触发一次,除非发生任何其他事情

  20. 20

    如何每次会话一次仅在页面中触发一次jQuery函数?

  21. 21

    我通过python中的串口发送命令,但它们被多次发送而不是一次

  22. 22

    如何限制事件一次触发多次

  23. 23

    敲除计算出的一次触发多次

  24. 24

    滚动功能触发多次而不是一次

  25. 25

    pygame,我如何在循环内将游戏中的分数只添加一次?

  26. 26

    def 函数在每个 (while) 循环中重复两次,即使我每次只调用它们一次

  27. 27

    如何使我的while循环每分钟触发一次?

  28. 28

    for循环字符串比较器只会迭代一次

  29. 29

    我的for循环只经历了一次

热门标签

归档