选择显示字体大小

j2me mobile 3d入门教程(二)

starttime= system.currenttimemillis() - worldstarttime;
validity= world.animate((int)starttime);
perframetime=(int)system.currenttimemillis();

g.setcolor(0x00);
g.fillrect(0,0,getwidth(), getheight());

g.setclip(0,0,getwidth(),getheight());
g3d.bindtarget(g,true,graphics3d.dithergraphics3d.true_color);
g3d.setviewport(0,0,getwidth(),getheight());


g3d.render(world);

g3d.releasetarget();

framepor=(int)1000/((int)system.currenttimemillis()-perframetime);

system.out.println("3d demo frame/sn:"+framepor);

if(validity < 1)
&#123; // the validity too small; allow a minimum of 1ms.
validity = 1;
&#125;

if(validity == 0x7fffffff)
&#123; // the validity is infinite; scehdule a refresh in 1 second.
validity=1000;
&#125;

&#125;

public void run() &#123;
while(isrun)&#123;
repaint();
try&#123;
thread.sleep(validity);
&#125;catch(exception e)&#123;&#125;
&#125;

&#125;
这里如果你不喜欢使用线程的话,你可以换成timer。个人喜好问题吧,我对线程比较熟悉,所以这里我使用的是线程

动画似乎我现在也只理解到这些,全部和大家共享出来了。下面我想说一说transformable类中的几个方法。首先来介绍一下transformable类吧。transformable类是很重要的一个类,node就是它的子类,呵呵……知道它的重要性了吧。transformable中有四个方法是今天我要简单说一下的
postrotate(float, float, float, float)放是和物体的旋转有关系的在mobile3d中默认所有的物体的旋转轴都在自身的中心,所以对物体进行旋转操作的话,一定是自转,而不是绕某个点、或某个轴公转,这一点一定要弄清楚。也许这样说有些抽象那么我换个说法,就是这里的旋转只改变物体的朝向,并不改变物体的位置。这下明白了吧,也许有人要问“这不正是我们需要的吗?为什么要强调呢?”原因其实是这样的,在有的3d引擎中,旋转是以原点为基础的。也就是说如果需要做自转运动,就必须做移动、再旋转、再移动这样的操作,其实这样做的好处是可以方便点的运算,因为点不存在自转的概念。而我们的mobile3d在某种程度上说是不可以对点操作的,所以它的最小单位是mesh,那么它如何实现自转呢?来看个矩阵你就明白了
90,0,0,0
0,0,0,0
0,0,1,0
0,0,0,0
这个矩阵表示的当前的模型在y轴上有90度的旋转。现在我们回头来看看postrotate(float a, float x, float y, float z)方法,其中有4个参数,第一个就是这次需要旋转的角度,后三个其实一个这次旋转的轴,是通过一个向量来表示的,postrotate方法就是在原来的朝向上继续进行新的旋转,如果用数学公式来表示的话就是使用原有的矩阵乘以
a,0,0,0
0,x,0,0
0,0,y,0
0,0,0,z
这个矩阵就是新的方向矩阵
这个方法如果从数学角度听起来很难理解的话,你只要记住四个参数第一个是这次旋转的角度,后三个确定旋转轴
同postrotate方法类似的是setorientation(float a, float x, float y, float z)不同的是这次不再是旋转了而是直接设置到这个朝向
说过旋转再来看看移动,这个似乎就简单很多了translate(float x, float y, float z)这个就是指按照指定的向量平移;settranslation(float x, float y, float z)这个更简单了,直接移动到指定的位置。
其实还有一个方法scale(float sx, float sy, float sz)是用来进行缩放的,同样还有setscale(float sx, float sy, float sz)直接设置比例尺,这个六个方法是对物体进行直接的操作的,非常有用哦~尤其是前四个,在编写游戏的时候会经常用到,而后两个使用的频率似乎少一些,因为很多时候我们都是直接对摄像机的距离进行操作的(除非有特殊需要)。
下面我给出个使用前四方法的举例例子吧。
public void keypressed(int keycode)&#123;
float[] camertra;
float x;
float z;
switch(keycode)&#123;
case gamecanvas.down:
break;
case gamecanvas.up:
break;
case 52:
dir=dir-2;
system.out.println(dir);
x=(float)(3*math.sin((dir * 3.14159f) / 180.0f));
z=(float)(3*math.cos((dir * 3.14159f) / 180.0f));
camera.settranslation(x,0,z);
camera.setorientation(dir,0,1,0);
camertra=new float[3];

camera.gettranslation(camertra);
for(int i=0;i system.out.print(camertra[i]+" ");
&#125;
system.out.println();
camertra=new float[4];
camera.getorientation(camertra);
for(int i=0;i system.out.print(camertra[i]+" ");
&#125;
system.out.println();
break;

case 54:
dir=dir+2;
system.out.println(dir);
x=(float)(3*math.sin((dir * 3.14159f) / 180.0f));
z=(float)(3*math.cos((dir * 3.14159f) / 180.0f));
camera.settranslation(x,0,z);
camera.setorientation(dir,0,1,0);
camertra=new float[3];

camera.gettranslation(camertra);
for(int i=0;i system.out.print(camertra[i]+" ");
&#125;
system.out.println();
camertra=new float[4];
camera.getorientation(camertra);
for(int i=0;i system.out.print(camertra[i]+" ");
&#125;
system.out.println();
break;

&#125;
&#125;
呵呵……上面简单的对动画的播放和设置,以及对物体进行操作的说明,希望对你能有所帮助,其实现在的内容已经可以写出一个简单操作人物移动的游戏了或者是操作遥控汽车的游戏,还缺少的是碰撞的检测。不过由于时间的关系,我还没有写这样的东西,稍候一定整理一下写个遥控车什么的游戏,这里还是前把这次的代码给大家,另外稍候我会制作一个人物走动的动画,如果能控制m3g文件在合适的大小我会上传给大家做个素材吧。

程序源码


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons