打磚塊遊戲中 怎麼判斷小球與方塊的撞擊 以及小球撞擊後運動的方向呢?

時間 2021-05-31 15:08:40

1樓:Linyxus

判斷小球和方塊有無碰撞很簡單,因為遊戲中的矩形是沒有旋轉的,所以計算小球圓心與矩形各邊的距離並不用到距離公式,只要做一次減法就行,然後判斷距離和小球半徑的大小關係。

關於重複碰撞問題,可以記錄下是與矩形哪條邊碰撞的,並且改變速度後順便改變位置,使小球與矩形之間隔開一點點距離。或者,如果剛剛的位置判斷使用的是小球半徑>距離而非小球半徑≥距離,那只要使小球和矩形剛好接觸就行,這樣可以保證不會重複碰撞。

另:在處理小球與玩家控制的擋板碰撞時,最好可以根據擋板速度改變小球的水平速度,這樣比較符合實際,而且別人的作品中大多也是這樣處理的。

再另:可以考慮使用完全彈性碰撞的公式來處理。

2樓:

或許提前預判可以解決小球跑進擋板裡面的問題,提前預判可以在碰撞驗證程式中多加乙個常量,從而增大小球半徑或加大擋板實現

至於碰撞驗證,從小球球心與擋板形心的相對距離著手可能容易點,四個角的話,考慮球心和形心的x、y的相對值應該就能解決

3樓:劉斌

在解決問題之前,你先要找到真正的問題是什麼,否則豈不是緣木求魚。

這裡出現bug的本質原因是遊戲邏輯將時間離散化了。舉例來說,在第n-1幀時,彈球與磚塊相距極小的距離,程式判斷沒有發生碰撞。第n幀,彈球沿原方向前進一段距離,使得彈球與磚塊部分重疊了,程式判斷發生碰撞,改變彈球的速度向量。

第n+1幀,彈球沿新的方向移動到新的位置,然而還不足以移出磚塊的範圍,程式再一次檢查到碰撞……於是你描述的bug出現了。

錯誤開始於第n幀,因為彈球和磚塊視為剛體的話,所謂的重疊時是不應該存在的。真正的碰撞發生於第n幀的時點之前,即第n-1和n幀之間的某一刻。所以第n幀的處理邏輯不能只簡單的修改彈球的速度,要對這種重疊做一些修正,確保彈球和磚塊分離,以免下一幀持續處於錯誤的狀態。

除了重疊之外,還有種bug是:如果物體尺寸較小而速度很大,兩個本來會碰撞的物體可能會在兩幀之間直接穿越了。

問題中的分離軸定理演算法,包括最小平移量計算,你仔細看一下,是用於不規則凸多邊形的。你需要處理的形狀無非是圓、矩形、圓角矩形等規則形狀,完全不需要用。

順便引申一下,雖然打磚塊這個遊戲用不上,如果要實現大量活動物體的碰撞,可以看一下事件驅動模擬,這是優先佇列的乙個應用。

4樓:SuperFashi

打磚塊遊戲中擋板基本保持在乙個軸上活動,所以直接設為x=0或者y=0。小球一直以直線運動,方位可以直接用一元一次方程描述。然後做一下解方程就可以了。

至於碰撞,一點trick就好。碰撞的時候判斷圓心,把擋板真正的顯示位置往後放半徑就好。

fps遊戲中,究竟是如何判斷是否擊中對方呢?

喵喵劉欣宇 FPS遊戲由於各個射擊角度和射擊方位不同,擊中敵方位置的不同,是需要大量計算量的,如果全部由伺服器來計算的話,伺服器壓力太過於巨大。所以這部分工作基本是由客戶端來完成的,再使用演算法封包發回伺服器,這時候伺服器只需要判斷發回的資料為是否擊中,和擊中血量,就可以反饋到另乙個玩家身上。但也是...

怎麼根據自身特點判斷打什麼位置

呢名 這還迷茫?你就是個炮台定位。你給的資訊太粗糙了,大致猜測你爆發力不夠,身高又不足以構成優勢,會導致你突破是個問題,強調空位投籃不提干擾投籃是不是意味著你出手速度或者收球節奏 習慣有問題,導致你在貼防情況下出手能力和準度不能同時保證。你的體重跟身高不足以讓你在內線搶吃,正規全場的話,如果有一手背...

欺詐遊戲中的少數決遊戲是怎麼玩兒的?

帥羔 看完少數決,裡面所出現的 必勝法 著實是比較精妙。遊戲規則 1 總共22個人,選出乙個人提出乙個問題,所有人都在規定時間內選擇投票 YES OR NO 2 主辦方進行唱票,選擇人數少的獲勝 3 重複步驟1 2 直至最後剩餘1人或者2人,即獲勝者為1個或者2個 遊戲背景 1 主辦方每個人分配乙個...