项目符号不可见,删除后不会从屏幕删除

时间:2014-12-11 00:38:53

标签: windows python-2.7 pygame pycharm

这是我的游戏代码:

这是我的整段代码。当我开火时,为什么我的子弹没有出现在屏幕上 当我删除它们时,为什么子弹仍在屏幕上(见第242到250行)?如果你有时间,你能告诉我为什么自从我第一次开始游戏以来我的游戏一直滞后吗?谢谢您的帮助! (已由其他用户回答)

    class Fire_User(pygame.sprite.Sprite):
        def __init__(self, image_file):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load(image_file)
            self.rect = self.image.get_rect()

    #Move function#
        def update(self):
            self.rect.x -= 10

#Class for the player 1 to be able to fire projectiles(Steve's head from Minecraft) at player 2#
    class Fire_Comp(pygame.sprite.Sprite):
       def __init__(self, image_file):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load(image_file)
            self.rect = self.image.get_rect()

        #Move function#
       def update(self):
            self.rect.x += 10

射击子弹的Pygame事件:

elif event.key == K_LSHIFT:
    bullet = Fire_User('bomb_user.jpg')
    bullet.rect.x = my_ball.rect.x + 10
    bullet.rect.y = my_ball.rect.y
    fired = 1
    bulletGroup.add(bullet)
elif event.key == K_RSHIFT:
    otherBullet = Fire_Comp('steve.png')
    otherBullet.rect.x = dad.rect.x - 10
    otherBullet.rect.y = dad.rect.y
    fired = 1
    otherBulletGroup.add(otherBullet)

更新
我试图将我的照片(子弹)放到屏幕上。它给了我一个错误:

Traceback (most recent call last):
  File "E:/PyCharm_Tony/Hero's_War.py", line 273, in <module>
    screen.blit(bullet.image, bullet.rect)
NameError: name 'bullet' is not defined

为什么会这样?我编辑了我的程序。哦,运行代码片段只会在句子中加载我的代码(很长时间)。

1 个答案:

答案 0 :(得分:1)

开始游戏的最初延迟是因为声明

pygame.time.delay(1000)

删除它或评论它以消除滞后。

现在,而不是:

bullet = Fire_User()
otherBullet = Fire_Comp()

在每个活动中创建实例。例如:

elif event.key == K_LSHIFT:
    bullet1 = Fire_User()
    bullet1.rect.x = my_ball.rect.x+10
    bullet1.rect.y = my_ball.rect.y
    bulletGroup.add(bullet1)

只要您按下K_LSHIFT,就会显示子弹 。我建议将这些位置作为__init__类的Fire_User()的参数。减少rect的增量以清楚地看到运动。

就移除子弹而言,spritecollide函数具有属性dokill

spritecollide(sprite, group, dokill, collided = None) -> Sprite_list

dokill论证是一个布尔。如果设置为True,则将从组中删除所有碰撞的Sprite。

相关问题