灵魂腐蚀 发表于 2015-1-18 11:12:46

JAVA教程之J2ME开辟手机游戏物理模子之抛物线

他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。  物体做抛物线活动是游戏中基础活动物理模子之一!在PC游戏中能够由重力公式容易摹拟,但在手机游戏中,因为多半手机不撑持浮点运算因而不克不及用sin,cos,来分化初速率。以是只能用近似摹拟的办法!我所接纳的是:先缩小后减少的摹拟体例,而且为了更准确到场了必定的偏移量。

  先用哈希表列出0-90度的正弦值,而且把值缩小100000倍,比方:

Hashtableanglevalue;
publicvoidloadAnglevalue()
{
anglevalue=newHashtable();
anglevalue.put(String.valueOf(0),newInteger(0));
anglevalue.put(String.valueOf(30),newInteger(50000));
anglevalue.put(String.valueOf(60),newInteger(86603));
anglevalue.put(String.valueOf(90),newInteger(100000));
……

  如许就能够得出各类角度的正余弦值。

  设初速率为V0物体以后坐标为x=0,y=0;t为工夫g重力=10;

  根剧力学公式 

Vx=V0*cos&;
Vy=V0*sin&;
  再依据重力公式:

x=Vx*t;
y=Vy*tC5*t*t;
  因为cos&sin&都是缩小了100000倍的以是 再失掉手机屏幕坐标的时分应当减少100000倍

x=Vx*t/100000;
y=(Vy*tC5*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*tC5*t*t*20000)/100000;
  另有我们必要把 物体初始地位放在 屏幕的下放那就必要加个初始地位常量,公式变成:

x=Vx*t/100000;
y=(100000*(getHeight()-20))-(Vy*tC5*t*t*20000)/100000;
  getHeight()在手机中为失掉手机屏幕的高度。好了,来看看用了这个公式后的运转效果(NOKIA7650摹拟器 或则unijava摹拟器)



  这是45度角情形下的抛物线轨迹。

  是否是以为高度不敷呢!运算不敷准确!那末我们在Y上加个偏移量来增添高度,公式改成:

x=(vx+windSpeed)*t/100000;;
intpianyi=(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度角的抛物线



  假如你还不中意还能够修改偏移数值来让摹拟更准确。上面来看一些角度在分歧力度微风速下的轨迹快照:


java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),

再见西城 发表于 2015-1-20 17:13:24

是一种使用者不需花费很多时间学习的语言

深爱那片海 发表于 2015-1-27 13:02:12

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

蒙在股里 发表于 2015-1-28 09:19:56

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

分手快乐 发表于 2015-1-31 05:45:16

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

海妖 发表于 2015-2-6 17:29:39

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

金色的骷髅 发表于 2015-2-17 17:17:30

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

admin 发表于 2015-2-27 21:01:03

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

老尸 发表于 2015-3-9 13:54:15

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

透明 发表于 2015-3-13 04:08:26

是一种语言,用以产生「小应用程序(Applet(s))

爱飞 发表于 2015-3-20 12:06:43

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
页: [1]
查看完整版本: JAVA教程之J2ME开辟手机游戏物理模子之抛物线