游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7331|回复: 11

手机游戏物理模型之——抛物线

[复制链接]

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2005-2-27 13:40:00 | 显示全部楼层 |阅读模式
物体做抛物线运动是游戏中基本运动物理模型之一! 在PC游戏中可以由重力公式 轻易模拟,但在手机游戏中 ,由于多数手机不支持浮点运算 因此不能用 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&;

   再根据重力公式:
x=Vx*t;  
y=Vy*t ?5*t*t;


由于cos& sin&都是放大了100000倍的所以 再得到手机屏幕坐标的时候应该缩小100000倍

x=Vx*t/100000;
y=(Vy*t ?5*t*t)/100000;


现在公式中除了t之外都解决了! 现在来解决时间t;

我们可以在游戏主循环的 中有不断增加t的值 但是因为主循环非常快!以毫秒计算
所以我们应该加入缓冲

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


代码中的if (tTemp >10) 这个值的判断就调整了时间的增长频率 ! 你也可以用
if (tTemp >2)来使时间增长加快 或则用其他数值让时间变慢

注意的一点就是我们的时间也要放大! 
至于放大多少倍 则要看游戏的节奏! 我这里暂且放大20000倍

因此公式为:

x=Vx*t/100000;
y=(Vy*t ?5*t*t*20000)/100000;       

还有 我们需要把 物体初始位置放在 屏幕的下放那就需要加个初试位置常量
公式变为:
x=Vx*t/100000;
y=(100000*(getHeight()-20))-(Vy*t ?5*t*t*20000)/100000;       
getHeight()在手机中为得到手机屏幕的高度
好了 来看看用了这个公式后的运行效果(NOKIA 7650模拟器 或则unijava模拟器)

图 paowu1.jpg


这是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 现实中物体定受风速影响! 当然这里的风速也是放大的了;
if(vy==0){
        pianyi=0;
      }
这个代码 是在平抛的时候就不需要加入高度偏移了

现在再看45度角的 抛物线
图paowu2.jpg
如果你还不满意 还可以改动偏移数值来让模拟更精确

下面来看一些角度 在不同力度 和风速下的轨迹快照




C:\Documents and Settings\Administrator\My Documents\开发当安\paowu1.bmp
C:\Documents and Settings\Administrator\My Documents\开发当安\paowu2.jpg
sf_2005227134019.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:41:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

图片 2
sf_200522713412.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:42:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

各种角度 风速
sf_2005227134214.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:43:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

各种角度 风速
sf_2005227134318.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:44:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

各种角度 风速
sf_200522713442.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:44:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

各种角度 风速
sf_2005227134455.jpg

5

主题

42

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-2-27 13:47:00 | 显示全部楼层

Re: 手机游戏物理模型之——抛物线

最后附上代码

sf_2005227134733.rar

52.85 KB, 下载次数:

61

主题

327

帖子

339

积分

中级会员

Rank: 3Rank: 3

积分
339
QQ
发表于 2005-2-27 14:38:00 | 显示全部楼层

Re:手机游戏物理模型之——抛物线

强悍!

7

主题

188

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2005-3-25 15:39:00 | 显示全部楼层

Re:手机游戏物理模型之——抛物线

好贴~~

1

主题

130

帖子

134

积分

注册会员

Rank: 2

积分
134
发表于 2005-4-4 19:35:00 | 显示全部楼层

Re:手机游戏物理模型之——抛物线

顶,好东东
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 03:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表