2010-09-06 87 views
1

下面是我想要實現的圖像:http://bit.ly/cabifI 基本上我想要藍色圓圈沿着曲線路徑來回移動,當我按下左右箭頭鍵時。如何在pygame中沿着路徑散佈圖像?

我知道我必須blit圖像,但有沒有辦法自動確定路徑的x,y座標,並在按下按鍵時將圖像粘貼到那裏?

或者是否有一些需要使用的算法/技術之王?

回答

0

我假設你知道路徑座標。

給定路徑上的單個點,將球放在同一個x上,但讓y = y - ballRadius - (lineWidth/2)

一個非常簡單的近似值;你可能會有一些交叉點,特別是在陡坡上,但它可能會訣竅。你可以得到的座標很容易

+0

這就是問題所在。我不知道路徑中每個點的座標。有沒有辦法讓這個自動化? – Marconi 2010-09-06 15:16:09

+0

我明白了,現在顯而易見的路線是更新您的答案以及如何生成路徑。你如何繪製一個你不知道的點?你在使用圖書館嗎? – Mizipzor 2010-09-07 12:21:46

+0

pygame是唯一的依賴項,但這裏是我所做的:我編輯圖像,然後在pygame中用紅線畫出我想要的路徑,然後從左到右掃描像素,然後從上到下掃描像素。每次我點擊一個紅色像素,我都會記錄它的座標。 – Marconi 2010-09-19 02:11:24

1

一種方式是這樣的:

y = int(math.cos(x/70) * 30 + surface.get_height()/2) 

假設你使用640×480的分辨率,它會近似描述你的路徑

另一種方法是使一些pygame的代碼繪製路徑,並將其存儲爲一個列表,我們可以稱之爲'路徑'。

path = list(0 for x in range(screen.get_width())) #make every y to 0 originally 

while not <exit condition>: 
    if pygame.mouse.get_pressed()[0]: #if lmb is pressed 
     mpos = pygame.mouse.get_pos() 
     x, y = mpos[0], mpos[1] #redundant, but for demonstrating 
     path[x] = y #so this will map y coordinates to x coordinates 

    draw_path(screen, path) #some function to draw you path, so its easier to make 
當然

那裏有一些問題必須解決,就像如果一個:那麼你可以說

path[x] 

你想看起來像這樣的代碼獲得對應的y座標任何x座標座標沒有被映射它將是0,你的球不會移動非常光滑

你也可以使用那個'cos'函數來產生列表'路徑'

path = [] 
for x in range(len(screen.get_width())): 
    y = int(math.cos(x/70) * 30 + surface.get_height()/2) 
    path.append(y) 

也喜歡mizipzor說你將不得不做調整球,所以它看起來像它的滾動的曲線的頂部,而不是通過它

=)