python - 为什么我的精灵不动
问题描述
我的精灵应该在屏幕上从右向左移动,并且应该有多个相同的精灵从随机的 Y 坐标移动,而 X 应该保持不变。取而代之的是,此时没有运动,只有一个精灵。
class Mob(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((90, 90)).convert_alpha()
self.image = pygame.image.load(badguy_file).convert_alpha()
self.image = pygame.transform.scale(self.image, (100, 100))
self.rect = pygame.Rect(x, y, 100, 100)
self.x = x
self.y = y
self.rect.x = random.randrange(800 - 100)
self.rect.y = random.randrange(-100, -40)
self.speedx = 5
self.mask = pygame.mask.from_surface(self.image)
def update(self):
self.rect.y += self.speedy
if self.rect.top > height + 10 or self.rect.left < -25 or self.rect.right > width + 20:
self.rect.x = random.randrange(width - self.rect.width)
self.rect.y = random.randrange(-100, -40)
self.speedx = random.randrange(2,0)
def render(self, screen):
screen.blit(self.image, (self.x, self.y))
mobYRange = random.randrange(200, 450)
mobs = pygame.sprite.Group()
for i in range(8):
mob = Mob(850,mobYRange)
mobs.add(mob)
mob.render(screen)
解决方案
当您选择 y 坐标时,您会这样做mobYRange = random.randrange(200, 450)
,然后您对所有小怪使用相同的坐标。您需要将调用移动到创建srandrange
的 for 循环中。Mob
另外我不确定 pygame 是如何工作的。但是你应该只打电话screen.blit()
一次吗?我会猜到这是您调用每一帧以将其绘制到屏幕上的东西。
推荐阅读
- java - 溢出菜单更改列表视图数据
- django - 使用 Djongo 添加多个 ArrayModelField 项的实例
- ruby - “如果找到返回对象”的单行代码
- sql-server - SSIS 包在 VSTS 2019 中运行良好,但在 SQL Server 2017 中无法通过 SQL 代理或 DTEXEC
- vba - VBA 用户表单图像大小不同或在计算机之间失去保真度
- javascript - 计算跨度标签中值的百分比
- reactjs - 如何将数据从类组件传递到功能组件,反之亦然
- android - 如何在 WebView 文本选择菜单中保留标准的“全选”和“复制”菜单项?
- php - 如何将请求传递给父类
- vb.net - 无法在 Visual Basic 6 中打开项目