2010-09-13 51 views
1

我想通過編寫一個蛇遊戲來學習Python(我有2.5.4),但是我被卡住了。 一些整數變成花車和不斷隨機變化,至少從我的角度:)Python改變整數浮點本身

的問題是,Snake.spawnPoint得到由Cam.move()

print Snake.spawnPoint # first time, this returns '[25, 20]' ,which is good. 
Cam.Move() 
print Snake.spawnPoint # after the method, the value is '[26.0, 21.0]', and that's bad 

之後改變了,他們只是在周圍漂移。

這是方法:(它無關的spawnPoint

def Move(self): 
    self.vel[0]+=(self.target[0]-self.cen[0])*self.k 
    self.vel[1]+=(self.target[1]-self.cen[1])*self.k 
    if self.vel[0] > self.friction: self.vel[0]-= self.friction 
    elif self.vel[0] < self.friction: self.vel[0]+= self.friction 
    else: self.vel[0] = 0 
    if self.vel[1] > self.friction: self.vel[1]-= self.friction 
    elif self.vel[1] < self.friction: self.vel[1]+= self.friction 
    else: self.vel[1]=0 
    self.cen[0]+=self.vel[0] 
    self.cen[1]+=self.vel[1] 

spawnPoint是一個常數,我追加到蛇的身體,當他產卵我想這是一個列表,因爲它有蛇的身體做名單,並渲染方法使用index()做的東西。

的代碼似乎並不適合這裏,所以我拉上了。 有人可以來看看嗎?謝謝 http://www.mediafire.com/?zdcx5s93q9hxz4o

+1

請儘量減少代碼到一個顯示你的問題的最小例子(這也可能幫助你自己找到問題) – second 2010-09-13 14:55:25

+0

嗯,我不能減少它,因爲我不知道什麼是錯的,但我知道' Snake.spawnPoint'被'Cam.move()'改變了,我忘了在描述中提到這個 – andrewrocks 2010-09-13 15:06:33

+1

@andrew:當整數變成float時,你可以在這個地方放兩個print語句來看看是否確實發生了。你在那裏做分區嗎? – SilentGhost 2010-09-14 11:06:21

回答

4

如果將整數組合在表達式中,即乘法,加法,減法(不一定是除法),整數將變爲浮點數。很可能,你的一些變量是浮動的,例如self.friction。

只有通過int(),浮點數纔會自行更改回整數。如果你觀察其他事情,你會發現它錯了。

看來你的Move方法間接修改了「spanwPoint」。我不知道這是否是預期的行爲,但這可能意味着您有兩個指向同一列表的引用。例如。

self.spawnPoint = [1, 0] 
self.vel = self.spawnPoint # Does not make a copy! 
self.vel[0] += 0.1 
self.vel[1] += 0.2 

將導致self.spawnPoint(也)爲[1.1,0.2]

+0

uhmmm ..我有很多移動方法:D,你指的是哪一個? – andrewrocks 2010-09-14 11:36:51

+0

看起來像'Camera.SnapTo()'是個罪魁禍首。 – 2010-09-14 11:37:47

+0

謝謝!我已經堅持了好幾天,現在我可以回去開心:),所以可以使用spawnPoint [:]來製作副本嗎? – andrewrocks 2010-09-14 11:39:09

1

在Python(如在許多其他語言)的任何簡單的算術操作(例如+, - ,/,*),涉及一個整數和一個浮點數的計算結果是一個浮點數的答案。整數永遠不會變成浮點數,它是作爲浮點返回的操作的結果。

請注意,僅涉及整數的操作的結果將作爲整數返回(我正在使用整數來指代Python中的intlong)。