下面是我想要實現的圖像:http://bit.ly/cabifI 基本上我想要藍色圓圈沿着曲線路徑來回移動,當我按下左右箭頭鍵時。如何在pygame中沿着路徑散佈圖像?
我知道我必須blit圖像,但有沒有辦法自動確定路徑的x,y座標,並在按下按鍵時將圖像粘貼到那裏?
或者是否有一些需要使用的算法/技術之王?
下面是我想要實現的圖像:http://bit.ly/cabifI 基本上我想要藍色圓圈沿着曲線路徑來回移動,當我按下左右箭頭鍵時。如何在pygame中沿着路徑散佈圖像?
我知道我必須blit圖像,但有沒有辦法自動確定路徑的x,y座標,並在按下按鍵時將圖像粘貼到那裏?
或者是否有一些需要使用的算法/技術之王?
我假設你知道路徑座標。
給定路徑上的單個點,將球放在同一個x
上,但讓y = y - ballRadius - (lineWidth/2)
。
一個非常簡單的近似值;你可能會有一些交叉點,特別是在陡坡上,但它可能會訣竅。你可以得到的座標很容易
一種方式是這樣的:
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說你將不得不做調整球,所以它看起來像它的滾動的曲線的頂部,而不是通過它
=)
你可以使用貝塞爾曲線,但這對你正在做的事情是過度的。這裏有一個很好的教程介紹主題:http://devmag.org.za/2011/04/05/bzier-curves-a-tutorial/ 和pygame示例代碼:http://www.pygame.org/tags/bezier
這就是問題所在。我不知道路徑中每個點的座標。有沒有辦法讓這個自動化? – Marconi 2010-09-06 15:16:09
我明白了,現在顯而易見的路線是更新您的答案以及如何生成路徑。你如何繪製一個你不知道的點?你在使用圖書館嗎? – Mizipzor 2010-09-07 12:21:46
pygame是唯一的依賴項,但這裏是我所做的:我編輯圖像,然後在pygame中用紅線畫出我想要的路徑,然後從左到右掃描像素,然後從上到下掃描像素。每次我點擊一個紅色像素,我都會記錄它的座標。 – Marconi 2010-09-19 02:11:24