这是我的游戏代码:
这是我的整段代码。当我开火时,为什么我的子弹没有出现在屏幕上 当我删除它们时,为什么子弹仍在屏幕上(见第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
为什么会这样?我编辑了我的程序。哦,运行代码片段只会在句子中加载我的代码(很长时间)。
答案 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。