最近在做乙個遊戲,憤怒小鳥百戰天蟲一類的,好像叫做炮術遊戲吧。然後遇到了一些數學問題,發現自己果然不擅長數學,花了不少時間。分享一下已經解決的問題。
已實現的內容:人物的初速度根據觸點離人物位置而變化,觸點離人物越遠,鬆手後人物的初速度越大,飛的越遠
問題:因為人物不能無限飛行。
需求:限制人物的行動範圍。
要限制人物的行動範圍,比較好的實現方法是限制人物的最大初始速度,也就是限制觸點所能賦予玩家的最大速度。
最早的**如下:
1**中movex、movey是觸點相對於人物的座標,通過這種方法限制movex、movey的最大值。但是這段**的執行效果是把movex、movey的範圍限制在乙個邊長為2radius的正方形範圍內。正方形限制顯然是不合理的,在正方形的邊緣上各個點獲得的初速度參差不齊,在正方形的頂點獲得的初速度大得誇張。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);
還要用到三角函式,因為本質上是通過限制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...