2017-05-09 43 views
1

我對遊戲製造者來說很新奇,而且我在功能上遇到了一些麻煩。粘在表面遊戲機上的球

我正在做一個類似pong的遊戲,當球與槳的頂部或底部(較小的一側,而不是面對)球和槳凍結時,我遇到了一個問題。

我在碰撞事件中使用槳的唯一代碼是顛倒水平速度。

hspeed * = -1;

我明白這個問題,因爲球已經與頂部接觸,水平方向反轉,但它仍然與表面接觸,因爲動力速度沒有改變,所以再次反轉,並卡在一個無限循環。

我試過很多事情要解決它,如設置報警檢測如果球在一幀後,仍然觸摸並扭轉垂直速度(沒有成功)

我也試過檢查球頂部的y位置是否與槳葉底部的y位置相同(反之亦然),如果是,則反轉垂直速度。但再次沒有成功。

我敢肯定,如果使用了正確的代碼,這兩種方法都能正常工作,但我必須執行錯誤。

我應該使用什麼方法來使它與槳的頂部或底部相碰撞,它不會卡住,理想情況下只是反轉垂直速度而不是水平速度?

我敢肯定,這有一個簡單的解決方案,但因爲我是新的,我無法解決它!

謝謝!

回答

0

我的解決方案是當球與槳碰撞時更改實例。創建一個與當前對象幾乎相同的對象,然後刪除碰撞事件,但將創建事件設置爲以反向速度移動。球會按照你想要的方向移動,但不會卡住。然後您可以檢查是否有空的空間,如果有,請將對象改回原始球。

+0

我不建議爲這個簡單的東西創建另一個實例。 – Timtech

0

首先,這是一個很好的問題。我不知道你是如何檢查碰撞的,但是如果你是在步驟事件中進行檢查(而不是碰撞事件或其他),但是你應該能夠分別檢查水平和垂直碰撞。例如(用槳對象的名稱替換OBJ):

if (position_meeting(x-1, y, obj) || position_meeting(x+1, y, obj)) { 
    //horizonal collision 
} 
if (position_meeting(x, y-1, obj) || position_meeting(x, y+1, obj)) { 
    //vertical collision 
} 

這給檢測它擊中一個角落正好邊緣的情況下,在這種情況下,你可能會想翻轉兩種速度的優勢。

即使使用碰撞事件,您也可以做更多的事情,即使使用碰撞事件,只需檢查球的x值(假設您將兩個精靈居中)小於{槳的x值加或減其寬度},這將表示垂直碰撞。