遊戲中的一些數學物理問題(1)

2022-09-20 05:57:14 字數 1919 閱讀 6033

最近在做乙個遊戲,憤怒小鳥百戰天蟲一類的,好像叫做炮術遊戲吧。然後遇到了一些數學問題,發現自己果然不擅長數學,花了不少時間。分享一下已經解決的問題。

已實現的內容:人物的初速度根據觸點離人物位置而變化,觸點離人物越遠,鬆手後人物的初速度越大,飛的越遠

問題:因為人物不能無限飛行。

需求:限制人物的行動範圍。

要限制人物的行動範圍,比較好的實現方法是限制人物的最大初始速度,也就是限制觸點所能賦予玩家的最大速度。

最早的**如下:

1

var touchx =event.getlocationx();

2var touchy =event.getlocationy();

3var canvasx = 1280, canvasy = 736;45

var movex = touchx - (this.player.x + 0.5 *canvasx);

6var movey = touchy - (this.player.y + 0.5 *canvasy);78

//半徑

9var radius = 50;

10if(movex >radius) else

if(movex > -radius)

15if(movey >radius) else

if(movey > -radius)

2021

this.speed = cc.v2(-movex*0.3, -movey*0.3);

**中movex、movey是觸點相對於人物的座標,通過這種方法限制movex、movey的最大值。但是這段**的執行效果是把movex、movey的範圍限制在乙個邊長為2radius的正方形範圍內。正方形限制顯然是不合理的,在正方形的邊緣上各個點獲得的初速度參差不齊,在正方形的頂點獲得的初速度大得誇張。

還要用到三角函式,因為本質上是通過限制x,y的速度在x,y軸上的投影來限制x,y的座標的,理解這點很重要。

寫**的時候被誤導了,而且當時對圓方程的理解也欠缺,錯誤的**:var sinangle = movey/radius; 一開是用半徑求三角函式,在上來看這樣是正確的,但是實際過程中的三角函式值不能用半徑來求,因為觸碰螢幕時觸點所在的圓並不在那個固定半徑的圓上。所在的圓的半徑是   #根號(x²+y²)#  通過座標來動態求正弦余弦。

1

var touchx =event.getlocationx();

2var touchy =event.getlocationy();

3var canvasx = 1280, canvasy = 736;45

var movex = touchx - (this.player.x + 0.5 *canvasx);

6var movey = touchy - (this.player.y + 0.5 *canvasy);78

9//半徑,正弦,余弦

10var radius = 50;

11var sinangle = movey/math.sqrt(math.pow(movex,2)+math.pow(movey,2));

12var cosangel = movex/math.sqrt(math.pow(movex,2)+math.pow(movey,2));

1314

if(math.sqrt(math.pow(movex,2)+math.pow(movey,2)) >=radius)

1819

this.speed = cc.v2(-movex*0.3, -movey*0.3);

最終實現效果:

第一章 遊戲中的數學和物理 物理篇

物理在遊戲開發中是非常重要的部分,例如 敵人的地點,攻擊的最佳角度,傳球,面向哪個方向用多大的力量踢球等等,都需要物理學的支援.下面對遊戲中經常使用的幾個概念以及定理進行介紹.1.時間 遊戲中的時間一般採用兩種方法,一種是與現實世界相同,另一種是採取一種固定的假想時間間隔.以前所有的元件都採取相同的...

第一章 遊戲中的數學和物理 數學篇

唉 真是悲哀,從小學到大學,學了16年的數學和物理,直到今天才真正的使用到它們,雖然日常生活中可能很多事情都會涉及到,但是真正直接的利用它們卻是從現在才開始.唉 如果早知道就.沒辦法 學吧 1.直角座標系 這個概念比較簡單,大家應該都不會忘記吧 在表示構成畫像的點,線,以及bitmap 的位置時幾乎...

遊戲中的UI問題(一)

ui不光是體驗,還會帶來很多b類以上的問題。簡約的ui和有沒有問題沒關係,以下是一些問題,可以面對他們做行為的邊界檢查。自定義的控鍵拖動到另一些自定義控鍵上,當過程中會調出tips,滑鼠指標變換,很容易出ui邊界問題。ui邊界 窗體外部至內,客戶端容易假死。多版本客戶端切換更新情況下,載入時和登陸u...