国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

J2ME開發(fā)手機游戲物理模型之拋物線

2019-11-18 15:40:08
字體:
供稿:網(wǎng)友

  物體做拋物線運動是游戲中基本運動物理模型之一! 在PC游戲中可以由重力公式輕易模擬,但在手機游戲中 ,由于多數(shù)手機不支持浮點運算因此不能用sin ,cos,來分解初速度。所以只能用近似模擬的方法!我所采用的是:先放大后縮小的模擬方式,并且為了更精確加入了一定的偏移量。

  先用哈希表列出0-90度的正弦值,并且把值放大100000倍,例如:

Hashtable anglevalue;
public void loadAnglevalue()
{
anglevalue = new Hashtable();
anglevalue.put(String.valueOf(0),new Integer(0));
anglevalue.put(String.valueOf(30),newInteger(50000));
anglevalue.put(String.valueOf(60),new Integer(86603));
anglevalue.put(String.valueOf(90),new Integer(100000));
……

  這樣就可以得出各種角度的正余弦值。

  設初速度為V0 物體當前坐標為x=0,y=0; t為時間 g重力=10;

  根劇力學公式 

Vx=V0*cos&;
Vy=V0*sin&;
  再根據(jù)重力公式:

x=Vx*t;
y=Vy*t –5*t*t;
  由于cos& sin&都是放大了100000倍的所以 再得到手機屏幕坐標的時候應該縮小100000倍

x=Vx*t/100000;
y=(Vy*t –5*t*t)/100000;
  現(xiàn)在公式中除了t之外都解決了! 現(xiàn)在來解決時間t;

  我們可以在游戲主循環(huán)的 中有不斷增加t的值 但是因為主循環(huán)非常快!以毫秒計算,所以我們應該加入緩沖:

while (true){
 thisThread.sleep(10);
 if(bFire){
  tTemp++;
  if (tTemp >10) {
   t+=1;
   tTemp = 0;
 }

  代碼中的if (tTemp >10) 這個值的判定就調(diào)整了時間的增長頻率!你也可以用if (tTemp >2)來使時間增長加快 或則用其他數(shù)值讓時間變慢。注重的一點就是我們的時間也要放大!至于放大多少倍則要看游戲的節(jié)奏!我這里暫且放大20000倍,因此公式為:

x=Vx*t/100000;
y=(Vy*t –5*t*t*20000)/100000;
  還有我們需要把 物體初始位置放在 屏幕的下放那就需要加個初始位置常量,公式變?yōu)椋?br />
x=Vx*t/100000;
y=(100000*(getHeight()-20))-(Vy*t –5*t*t*20000)/100000;
  getHeight()在手機中為得到手機屏幕的高度。好了,來看看用了這個公式后的運行效果(NOKIA 7650模擬器 或則unijava模擬器)

J2ME開發(fā)手機游戲物理模型之拋物線(圖一)
圖1

  這是45度角情況下的拋物線軌跡。

  是不是覺得高度不夠呢!運算不夠精確!那么我們在Y上加個偏移量來增加高度,公式改為:

x= (vx+windSpeed )*t /100000; ;
int pianyi=(t*400000);
if(vy==0){
 pianyi=0;
}
y=(100000*(getHeight()-imgWu.getHeight())-(vy*t-100000*t*t+pianyi))/100000;
  這里的X軸還加了風速 windSpeed 現(xiàn)實中物體定受風速影響!當然這里的風速也是放大的了;
 
if(vy==0){
 pianyi=0;
}
  這個代碼是在平拋的時候就不需要加入高度偏移了。現(xiàn)在再看45度角的 拋物線

J2ME開發(fā)手機游戲物理模型之拋物線(圖二)
圖2

  假如你還不滿足還可以改動偏移數(shù)值來讓模擬更精確。下面來看一些角度在不同力度和風速下的軌跡快照:

J2ME開發(fā)手機游戲物理模型之拋物線(圖三)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴宁市| 九寨沟县| 克拉玛依市| 汝南县| 鞍山市| 四子王旗| 搜索| 万源市| 新巴尔虎右旗| 镇平县| 罗平县| 敖汉旗| 永春县| 广水市| 闸北区| 大石桥市| 双江| 汉阴县| 噶尔县| 青神县| 光山县| 开化县| 台南市| 元谋县| 崇阳县| 西乡县| 林口县| 南江县| 都匀市| 乌鲁木齐县| 宜阳县| 正宁县| 深州市| 招远市| 昌邑市| 洛浦县| 双辽市| 北海市| 庆城县| 手游| 都兰县|