python - 使用 Sprite 组时更新类变量
问题描述
我先给你看我的代码(在主循环之外):
START_BAT_COUNT = 10
BAT_IMAGE_PATH = os.path.join( 'Sprites', 'Bat_enemy', 'Bat-1.png' )
bat_image = pygame.image.load(BAT_IMAGE_PATH).convert_alpha()
bat_image = pygame.transform.scale(bat_image, (80, 70))
class Bat(pygame.sprite.Sprite):
def __init__(self, bat_x, bat_y, bat_image, bat_health, bat_immune):
pygame.sprite.Sprite.__init__(self)
self.bat_health = bat_health
self.bat_immune = bat_immune
self.image = bat_image
self.rect = self.image.get_rect()
self.mask = pygame.mask.from_surface(self.image)
self.rect.topleft = (bat_x, bat_y)
self.bat_x = bat_x
self.bat_y = bat_y
def update(self):
self.bat_x += 500
all_bats = pygame.sprite.Group()
for i in range(START_BAT_COUNT):
bat_x = (random.randint(0, 500))
bat_y = (random.randint(0, 500))
bat_health = 5
bat_immune = False
new_bat = Bat(bat_x, bat_y, bat_image, bat_health, bat_immune)
all_bats.add(new_bat)
主循环内部:
all_bats.update()
all_bats.draw(display)
在 update() 中,每次读取代码时,我都会将 bat_x 的值增加 500,并且我知道 bat_x 的值会增加,因为我通过打印 bat_x 的值并观察它们的增加来测试这一点。我的问题是,有没有办法增加 bat_x,并让我的球棒真正移动?截至目前,变量增加但蝙蝠没有移动。谢谢
解决方案
您的显示器尺寸是多少?如果您在 x 方向上移动蝙蝠 500 像素,那么一旦它开始移动,它将立即飞离屏幕。此外,您的球棒可能不会移动,因为您没有更新其矩形的位置。
在行中
def update(self):
self.bat_x += 500
尝试
def update(self):
self.rect.move_ip(500, 0)
wheremove_ip
将矩形移动到位,每次更新时,蝙蝠的 x 坐标将增加 500。
推荐阅读
- python - 在 Python 中绘制霍夫空间
- javascript - 如何在我的文本编辑器组件中显示数据
- multithreading - 使用 apapche ignite 时无法删除 Web 容器(tomcat)中的 org.apache.ignite.internal.binary.BinaryThreadLocal 错误
- java - Java动态地图
合并以转换为 JSON - python - 如何使用 praw 按 id 检索 reddit 帖子?
- mips - 如何在“##”之后继续我的程序
- php - 除以零
- python - TypeError: __init__() 得到了一个意外的关键字参数“random_state”
- javascript - 为什么点区域四叉树搜索(用于碰撞检测)线性时间?
- c++ - EasyHook/Detour ReadFile 未按预期工作