我正在开发一个游戏,在游戏中敌人的船只将从屏幕开始,然后在Y轴上垂直向玩家移动 .
但是,我在访问敌人的位置时遇到了一些麻烦,因为它全部都与某个范围有关 . 我不太确定如何解释它,但这就是我对敌人类的看法:
class EnemyActive(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
enemy_img_list = ['enemyshipone.png', 'enemyshiptwo.png',
'enemyshipthree.png','enemyshipfour.png']
enemy_img = random.choice(enemy_img_list)
self.image = pygame.image.load(enemy_img)
self.rect = self.image.get_rect()
self.rect.x = random.randrange(0,400)
self.rect.y = random.randrange(-200,-10)
self.speed = random.randrange(1,3)
def update(self):
self.rect.y += self.speed
def getCoord(self):
return (self.rect.x, self.rect.y)
所以,当我尝试使用另一个函数访问该位置时,该函数接收(x,y)坐标:
particle_list = particles.create_particles(particle_list,enemy.getCoord())
它返回时显示错误:
numbers = range(-5, -1) + range(1, 5)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
我不会撒谎并且说我完全理解错误,但我确实看到了推理背后的逻辑 . 我怎么能真正得到'getCoord'函数来发送适当的坐标?
1 回答
在python 3中,
range
是一个惰性序列,而不是列表 . 也就是说,当它被要求时,它像生成器一样一次生成一个值(懒惰),而不是一次将它们全部存储在内存中(eageR) .您可以't add ranges together because they don' t具有已定义的方法 .
list
确实:它连接起来 .我们可以通过调用列表类来将范围转换为列表 . 即,
list(range(1, 5))
.您可以构建两个列表,然后将它们连接起来,也可以将生成器链接在一起,然后创建一个列表 . 这被认为是更好的样式,因为它避免了创建中间列表 .
例如: