2016-03-01 139 views
1

我正在製作一款基本的汽車遊戲,並希望賽車在賽道上移動得更快,在草地上移動得更慢。我有兩個單獨的圖像來創建背景,一個是軌道,另一個是圖像的其餘部分。 Track測試圖像碰撞Pygame

我有一個汽車精靈,可以在屏幕上移動,但是當測試碰撞時,我不知道該怎麼做。我嘗試過:

track = track = SCREEN.blit(track, (0, 0)) 

if track.colliderect(car): 
    speed += 1.5 
else: 
    speed += 0.5 

但我被告知這隻適用於rect對象,我需要做什麼?

我一直未能找到任何與圖像碰撞相關的東西,這將有助於我的情況,所以如果有任何其他問題回答這個問題,請告訴我。

+0

我假設賽道的其餘部分是透視? 如果你的車比賽道薄的多,你可以通過檢查該賽道上賽道的顏色來檢查你的賽車的任何角落是否在賽道上。 (或者如果你想加快速度,只有當你完全在軌道上,所有的角落) – JeD

+0

是的,賽道的其餘部分是透徹的,我將如何去檢查角落是否在上面? –

回答

2

基本上是這樣的:

def isOnTrack(track,car): 
    #one corner; a is alpha, the transparency 
    #If a is 0 that means completely transparent 
    if track.get_at(car.x,car.y).a==0: 
     return false 

    #do this for all four corners of car 

    return true 

您使用該碰撞已經僅擁有這個軌道

track.get_at(X,Y)圖像如有軌道是表面

返回一個顏色值

顏色有4個字段,rgba

我檢查一個;透明度

+0

那麼我怎麼說角落的位置,'(car.x,car.y)'不適合我。 'AttributeError:'pygame.Surface'對象沒有屬性'x'' –

+0

哦,你的車也是精靈? 好吧,如果你想移動汽車,你需要有一個X和Y來保存它的位置,對吧? 使用這些作爲第一個角落,並通過添加汽車的寬度和高度來計算其他角度。通過調用car.get_width和car.get_height可以獲得寬度和高度的 – JeD

+0

。 http://www.pygame.org/docs/ref/surface.html – JeD