【问题标题】:Pygame Shooting BulletsPygame 射击子弹
【发布时间】:2014-03-24 18:55:36
【问题描述】:

最近我一直在尝试使用 Pygame 创建一个小游戏,我设法显示一个可以左右移动的图像,我遇到的问题是它可以使用空格键发射子弹。

到目前为止,这是我的代码: http://pastebin.com/24xDYwY7

我现在可以显示子弹,但它不是从“turret.png”中出来的,而是位于屏幕的左上角。

有人能帮我解决这个问题吗?我对 python 非常陌生,希望能得到帮助

【问题讨论】:

  • 您有什么特别的问题?他们没有出现,他们没有移动,你看到错误了吗……?
  • @Stick 子弹只显示并且静止在屏幕的左上角

标签: python-3.x pygame


【解决方案1】:

看起来您正在使用我喜欢在 PyGame 中使用的技术 - 使用不同的 sprite Group 来分隔好人、坏人、子弹、块等……使用一个统一的“所有事物”组。

我没有看到all_sprites.update() 调用可以使整个工作正常,但我确实看到了player.update()。 PyGame 组旨在让您调用 group.update() 代替 for x in y 调用,例如:

for sprite in my_sprites:
    sprite.update()

编辑:没有在正确的位置看到您的图像?如果它们被设置在左上角,这通常是因为没有设置绘制图像的表面以显示在您想要的位置。

我发现 PyGame 的 get_rect() 调用很方便,它允许您传递参数来设置您返回的 rect 的属性。例如,我的 sprite.draw(self) 方法看起来像这样:

def draw(self):
    """Sets the image's Rect to the middle of the sprite, 
    then blits to the screen.
    """
    draw_rect = self.drawn_image.get_rect(center=self.rect.center)
    SCREEN.blit(self.drawn_image, draw_rect)

这假设精灵对象的 self.x 和 self.y 也被正确更新了,但这本质上是正确的;获取您正在绘制的对象的rect,将其设置为正确的坐标,就像您绘制实际精灵一样,然后将图像和rect 传递给SCREEN.blit()

【讨论】:

  • 您好,感谢您的回复!我添加了 all_sprites 调用和其他一些东西。现在,一旦按下空格键,项目符号就会显示出来,它只是位于屏幕的左上角。更新代码:pastebin.com/AgCizAd4
  • 这通常是因为图像的rect 没有正确设置。我会更新我的帖子
  • 我尝试将它添加到 Bullet Sprite,但结果相同。我将在哪里实施您列出的代码?抱歉,这似乎是一个愚蠢的问题
  • 无论您在哪里绘制精灵 - 无论您在哪里使用 SCREEN.blit()。看起来您正在为此使用self.render();只需在绘制图像之前设置图像的矩形以匹配精灵的矩形
  • 这不是一个愚蠢的问题 - 根据人们喜欢使用 PyGame 的方式,人们可以看到很多不同的答案,说明如何正确地做事。有些人将所有的绘图调用放在一个单独的模块或类中;其他人则使用 PyGame 的原生倾向,让精灵自己更新和绘制等……我都试过了,它们各有利弊 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多