如何在pygame中移动时射击

河马

我一直在注意所有游戏中发生的一件奇怪的事情:如果我移动,则玩家停止射击,这是因为当我移动时玩家已经在射击,还是当我尝试射击时玩家已经在移动,如果我移动了,则射击停止。这是我在最近制作的一款游戏中用来移动玩家的代码:

def move(self):
    keys = pygame.key.get_pressed()

    if keys[pygame.K_d]:
        self.x += self.speed
    if keys[pygame.K_a]:
        self.x -= self.speed

为了拍摄,我这样做:

     def handle_events():
          if event.type ==  pygame.MOUSEBUTTONDOWN:
          game.bullets.append(Bullet())

任何帮助,将不胜感激。还有一个旁注:如果有人知道一般代码中可能导致这种情况的事情(因为它在我的所有游戏中都发生过),请用plaeses注释,以便我可以使用相关事件代码来更新问题,因为现在我不知道可能会导致什么这个。

编辑:我最近注意到的一点是,当玩家被重力(技术上仍在移动)下拉时,它仍然可以射击。所以我想我在按下按键时会发生某些事情(任何按键,而不仅仅是我代码中包含的音调),这会使玩家无法射击。

我的handle_evnets()功能实际上只是处理关闭游戏和鼠标按键的操作。反正这是代码:

   def handle_events():
        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

            if event.type ==  pygame.MOUSEBUTTONDOWN:
                game.bullets.append(Bullet())

继承人的子弹类,game.bullets如果MOUSEBUTTONDOWN

class Bullet:
        def __init__(self):
            self.pos = [(player.x - 10 - scroll[0]), (player.y + 15 - scroll[1])]
            self.height = 3
            self.width = 20
            self.bullet = pygame.Surface((self.width, self.height)).convert_alpha()
            self.bullet.fill((255, 255, 255))
            self.dir = [(mouse.x - (player.x - 10 - scroll[0])),  (mouse.y - (player.y + 15 - scroll[1]))]
            self.distance = math.hypot(self.dir[0], self.dir[1])
            self.dir = [(self.dir[0]/ self.distance), (self.dir[1]/ self.distance)]
            angle = math.degrees(math.atan2((-self.dir[1]), self.dir[0]))
            self.bullet = pygame.transform.rotate(self.bullet, (angle))
            self.speed = 10

这是游戏类,子弹添加到该类即shoot_bullet()函数中后会发生什么

 class Game:
    def __init__(self):
    self.bullets = []


    def shoot_bullet(self):
        for bullet in self.bullets:
            bullet.pos[0] += bullet.dir[0] * bullet.speed
            bullet.pos[1] += bullet.dir[1] * bullet.speed
            D.blit(bullet.bullet, (bullet.pos[0], bullet.pos[1]))
拉比德76

我认为,如果按下任意键,它的真正作用是“ pygame.MOUSEBUTTONDOWN”。

否。问题与变量有关events

def handle_events():
   for event in events:
       #[...]

       if event.type ==  pygame.MOUSEBUTTONDOWN:
           game.bullets.append(Bullet())

上面的函数访问events全局名称空间中的变量,但是该列表似乎根本不包含事件。
您可以在代码中的某个位置执行操作events = pygame.event.get()但这可能在函数或方法的范围内。这将导致events在本地名称空间中生成新变量,并且events不会更新全局变量

您有2种解决方案。添加一个参数handle_events并传递eventshandle_events

def handle_events(events):
    for event in events:
        #[...]

        if event.type ==  pygame.MOUSEBUTTONDOWN:
            game.bullets.append(Bullet())

events通过使用global语句确保在获取事件时设置了全局名称空间中的变量
在aver上,请在前面events = pygame.event.get()添加global events

global events
events = pygame.event.get() 

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何在Pygame中移动矩形

来自分类Dev

如何在MFC中移动窗口?

来自分类Dev

如何在Android IDE中移动文件

来自分类Dev

如何在Eigen中移动矩阵?

来自分类Dev

如何在拖放事件中移动时绘制控件

来自分类Dev

如何在输入字段中移动文本?

来自分类Dev

如何在QtDesigner中移动项目?

来自分类Dev

如何在Realm中移动对象

来自分类Dev

如何在多维数组中移动元素?

来自分类Dev

如何在类型列表中移动类型?

来自分类Dev

如何在flexbox中移动项目?

来自分类Dev

如何在按键时连续在pygame中移动表面?

来自分类Dev

在Pygame中移动矩形

来自分类Dev

如何在pywinauto中移动UIAWrapper窗口?

来自分类Dev

如何在Pygame中移动网格的位置

来自分类Dev

在Pygame中移动时,如何使我的物体不留痕迹?

来自分类Dev

如何在QAbstractItemView中移动QWidget?

来自分类Dev

如何在Pygame中移动矩形

来自分类Dev

在pygame中移动蛇

来自分类Dev

在Pygame中移动子弹

来自分类Dev

如何在Pygame中移动表面

来自分类Dev

如何在我的第一个pygame Python项目中移动Rocket

来自分类Dev

在pygame中移动精灵时不会闪烁

来自分类Dev

如何在GNU屏幕中移动窗口

来自分类Dev

如何在bash中移动数组值

来自分类Dev

如何在Android中移动多个视图?

来自分类Dev

如何在pygame中移动一类对象?

来自分类Dev

在Pygame中移动Gif?

来自分类Dev

在PyGame中移动精灵