2017-05-07 102 views
0

我正在pygame中開發一款遊戲,其中敵方船隻將從屏幕開始,然後沿着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()) 

它回來與一個錯誤,說明:

號碼=範圍(-5,-1)+範圍(1,5)

TypeError:不支持的操作數類型+:'範圍'和'範圍'

我不會說謊,並說我完全理解錯誤,但我確實看到邏輯背後的推理。我怎樣才能讓我的'getCoord'函數發送適當的座標?

+0

如果您正在使用Python 3,在這裏看到:http://stackoverflow.com/questions/13318083/python-unsupported-types-range-and-range – Gabriel

+0

你能發佈整個堆棧跟蹤,所以我們不必猜測會發生什麼? – tdelaney

+0

您的代碼是否實現該行?你想要它做什麼?在Python 2中,'range'返回一個列表,並且它們會連接而沒有錯誤。在python 3上,你可以'numbers = list(range(-5,-1))+ list(range(1,5))''。 – tdelaney

回答

2

在Python 3中,range是一個懶惰的序列,而不是一個列表。也就是說,當被要求時,它會像生成器一樣每次產生一個值(懶惰),而不是立即將它們全部存儲在內存中(eageR)。

您不能將範圍一起添加,因爲它們沒有+定義的方法。 list確實:它連接在一起。

我們可以通過調用列表類來將範圍轉換爲列表。 I.e,list(range(1, 5))

您可以構建兩個列表,然後用+連接它們,也可以將這些生成器鏈接在一起,然後創建一個列表。這被認爲是更好的風格,因爲它避免了創建中間列表。

如:

from itertools import chain 
my_list = list(chain(range(-5, -1), range(1, 5))) 
+0

實際上,範圍對象不是生成器,而是不可變的序列。答案的其餘部分看起來不錯。 – skrx

+0

你是對的。當我回到我的電腦時,我會編輯我的答案。 –