如何让Pygame行星精灵随机在屏幕顶部/底部半屏生成?
解决方案
要实现行星随机在屏幕顶部或底部显示一半生成,只需修改Planets类的__init__方法中Y轴位置的赋值逻辑,具体操作如下:
核心修改逻辑
行星尺寸为400×400,结合屏幕高度500的参数:
- 顶部显示一半:将Y坐标设为
-200,让行星上半部分处于屏幕外,下半部分刚好露出在屏幕顶部 - 底部显示一半:将Y坐标设为
300(500-200),让行星下半部分处于屏幕外,上半部分刚好露出在屏幕底部
用random.choice()随机选取上述两个坐标,即可实现随机切换生成位置的需求。
修改后的完整代码
class Planets(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image_original = random.choice(planet_images) self.image = pygame.transform.scale(self.image_original, (400, 400)) self.image.set_colorkey(BLACK) self.rect = self.image.get_rect() self.radius = int(self.rect.width * .95 / 2) # Make the hitbox visible ---> pygame.draw.circle(self.image, RED, self.rect.center, self.radius) self.rect.x = 1000 # 随机选择顶部或底部生成位置 self.rect.y = random.choice([-200, 300]) self.speedy = 0 self.speedx = -2 def update(self): # killing and spawning new enemies when they go of the screen self.rect.x += self.speedx self.rect.y += self.speedy if self.rect.left < -1400: self.kill() new_planets = Planets() all_sprites.add(new_planets) planets.add(new_planets)
补充说明
每次生成新行星时,random.choice([-200, 300])会随机从两个目标Y坐标中选取一个,既满足随机切换位置的需求,又保留了原有行星从右向左移动、超出屏幕后自动重生的逻辑。
内容的提问来源于stack exchange,提问作者MLX
相关产品推荐
相关产品推荐

