仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1938|回复: 19
打印 上一主题 下一主题

[学习教程] IOS设计Android 3D 游戏完成之再谈碰撞仓酷云

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:44:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最重要的就是UINavigationController他是一层一层推进view的打开iPhone里的联系人每点一个联系人屏幕就会像右推到下一个界面这就是UINavigationController在做的事UINavigationController接着上一篇jpct-ae,发明已已往半年,如今都2012了。笔者在这已往的半年里年夜部分是为了生存奔忙,年夜四真是一个使人难忘的学期。几经展转,终究在本人喜好的岗亭上失职尽责了。既然已定了饭碗,就也蚍蜉撼树学着他人著书立说,或也能青史留下一笔。如今就一同往看看怎样个“深切”法。
1,深切碰撞道理
jpct-ae引擎的碰撞分为:线碰撞、球体碰撞、随圆碰撞三种,明天的代码原为jse版本,笔者将其转为android版并详加正文,但愿对人人有匡助。
2,代码剖析
01.packagecom.threed.jpct.example;
02.
03.importjava.lang.reflect.Field;
04.
05.importjavax.microedition.khronos.egl.EGL10;
06.importjavax.microedition.khronos.egl.EGLConfig;
07.importjavax.microedition.khronos.egl.EGLDisplay;
08.importjavax.microedition.khronos.opengles.GL10;
09.
10.importandroid.app.Activity;
11.importandroid.opengl.GLSurfaceView;
12.importandroid.os.Bundle;
13.importandroid.view.KeyEvent;
14.
15.importcom.threed.jpct.Camera;
16.importcom.threed.jpct.Config;
17.importcom.threed.jpct.FrameBuffer;
18.importcom.threed.jpct.Light;
19.importcom.threed.jpct.Logger;
20.importcom.threed.jpct.Object3D;
21.importcom.threed.jpct.Primitives;
22.importcom.threed.jpct.RGBColor;
23.importcom.threed.jpct.SimpleVector;
24.importcom.threed.jpct.Texture;
25.importcom.threed.jpct.World;
26.importcom.threed.jpct.util.MemoryHelper;
27.
28./**
29.*此示例展现了jpct-ae事情在android版本的碰撞检测
30.*
31.*@authoribm
32.*
33.*/
34.publicclassCollisionextendsActivity{
35.privatestaticCollisionmaster=null;//activity对象
36.privateGLSurfaceViewmGLView;//SurfaceView的完成,它利用公用外表显现OpenGL衬着。
37.privateMyRendererrenderer=null;//自界说衬着
38.
39.privatestaticfinalfloatDAMPING=0.1f;//重力
40.privatestaticfinalfloatSPEED=1f;//速率
41.privatestaticfinalfloatMAXSPEED=1f;//最年夜速率
42.
43.privateFrameBufferfb=null;//FrameBuffer对象
44.privateWorldworld=null;//World对象
45.
46.privateObject3Dplane=null;//立体
47.privateObject3Dramp=null;//斜面
48.privateObject3Dcube=null;//立方体
49.privateObject3Dcube2=null;//立方体
50.privateObject3Dsphere=null;//球体
51.
52.privatebooleanup=false;//偏向高低摆布
53.privatebooleandown=false;
54.privatebooleanleft=false;
55.privatebooleanright=false;
56.
57.privateSimpleVectormoveRes=newSimpleVector(0,0,0);//三维矢量
58.privateSimpleVectorellipsoid=newSimpleVector(2,2,2);//椭球
59.
60.privateRGBColorback=newRGBColor(50,50,100);//色彩
61.
62.privateCameracam;//纪录视野、地位及偏向
63.
64.privatelongtime=System.currentTimeMillis();//以后毫秒数
65.privatelongfps=0;//帧/秒
66.
67.protectedvoidonCreate(BundlesavedInstanceState){
68.
69.Logger.log("onCreate");
70.
71.if(master!=null){
72.copy(master);
73.}
74.
75.super.onCreate(savedInstanceState);
76.//实例化GLSurfaceView
77.mGLView=newGLSurfaceView(getApplication());
78.//利用本人完成的EGLConfigChooser,该完成必需在setRenderer(renderer)之前
79.//假如没有setEGLConfigChooser办法被挪用,则默许情形下,视图将选择一个与以后android.view.Surface兼容最少16位深度缓冲深度EGLConfig。
80.mGLView.setEGLConfigChooser(newGLSurfaceView.EGLConfigChooser(){
81.publicEGLConfigchooseConfig(EGL10egl,EGLDisplaydisplay){
82.int[]attributes=newint[]{EGL10.EGL_DEPTH_SIZE,16,
83.EGL10.EGL_NONE};
84.EGLConfig[]configs=newEGLConfig[1];
85.int[]result=newint[1];
86.egl.eglChooseConfig(display,attributes,configs,1,result);
87.returnconfigs[0];
88.}
89.});
90.
91.//实例化MyRenderer
92.renderer=newMyRenderer();
93.//设置View的衬着器,同时启动线程挪用衬着,以致启动衬着
94.mGLView.setRenderer(renderer);
95.//设置一个明白的视图
96.setContentView(mGLView);
97.
98.}
99.
100.@Override
101.protectedvoidonPause(){//puase
102.super.onPause();
103.mGLView.onPause();
104.}
105.
106.@Override
107.protectedvoidonResume(){//resume
108.super.onResume();
109.mGLView.onResume();
110.}
111.
112.@Override
113.protectedvoidonStop(){//stop
114.super.onStop();
115.}
116.
117.@Override
118.publicbooleanonKeyDown(intkeyCode,KeyEventevent){//按键处置,当高低摆布中的一个按下时,则将响应的变量置true
119.switch(keyCode){
120.caseKeyEvent.KEYCODE_DPAD_UP:
121.up=true;
122.break;
123.caseKeyEvent.KEYCODE_DPAD_DOWN:
124.down=true;
125.break;
126.caseKeyEvent.KEYCODE_DPAD_LEFT:
127.left=true;
128.break;
129.caseKeyEvent.KEYCODE_DPAD_RIGHT:
130.right=true;
131.break;
132.}
133.returnsuper.onKeyDown(keyCode,event);
134.}
135.
136.@Override
137.publicbooleanonKeyUp(intkeyCode,KeyEventevent){//当松开按键时,才会
138.up=false;
139.down=false;
140.left=false;
141.right=false;
142.returnsuper.onKeyUp(keyCode,event);
143.}
144.
145.privatevoidcopy(Objectsrc){
146.try{
147.//打印日记
148.Logger.log("CopyingdatafrommasterActivity!");
149.//前往一个数组,个中包括今朝这个类的的一切字段的Filed对象
150.Field[]fs=src.getClass().getDeclaredFields();
151.//遍历fs数组
152.for(Fieldf:fs){
153.//实验设置无停滞标记的值。标记设置为false将使会见反省,设置为true,将其禁用。
154.f.setAccessible(true);
155.//将取到的值全体装进以后类中
156.f.set(this,f.get(src));
157.}
158.}catch(Exceptione){
159.//抛出运转时非常
160.thrownewRuntimeException(e);
161.}
162.
163.}
164.
165.protectedbooleanisFullscreenOpaque(){
166.returntrue;
167.}
168.
169.classMyRendererimplementsGLSurfaceView.Renderer{
170.
171.publicMyRenderer(){
172.Config.maxPolysVisible=500;//最多绘制500个多边形
173.Config.farPlane=1500;//最远的符合立体为1500
174.Config.glTransparencyMul=0.1f;//在jpct-ae中修正参数盘算通明度,公式为trans=offset+objTrans*mul,默许的偏移量为0.1f
175.Config.glTransparencyOffset=0.1f;//偏移量,默许为0.1f
176.Config.useVBO=true;//利用极点缓冲区取代一般的极点数组,在某些呆板上会变快,默许为true(新版本改成true,原为false)
177.Texture.defaultTo4bpp(true);//??
178.Texture.defaultToMipmapping(true);//一切的纹理默许利用mipmaps,默许设置是false
179.}
180.
181.publicvoidonSurfaceChanged(GL10gl,intw,inth){
182.if(fb!=null){//假如fb不为null
183.fb.dispose();//烧毁清算
184.}
185.fb=newFrameBuffer(gl,w,h);//在利用前创立一个宽w,高h,内容为撑持opengl
186.//1.0/1.1的FrameBuffer
187.world=newWorld();//创立一个新的"天下"。world就像充斥对象与光芒空的房间
188.if(master==null){//假如master对象为空
189.plane=Primitives.getPlane(20,10);//失掉立体
190.plane.rotateX((float)Math.PI/2);//从jpct-ae的坐标扭转到一般坐标系
191.ramp=Primitives.getCube(20);//失掉立方体
192.ramp.rotateX((float)Math.PI/2);
193.sphere=Primitives.getSphere(30);//失掉球体
194.sphere.translate(-50,10,50);
195.cube2=Primitives.getCube(20);//立方体
196.cube2.translate(60,-20,60);
197.cube=Primitives.getCube(2);//我们可操纵的cube,参数暗示立方体的缩放
198.cube.translate(-50,-10,-50);
199.
200.plane.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);//设置碰撞形式为被碰撞
201.ramp.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
202.sphere.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
203.cube2.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
204.cube.setCollisionMode(Object3D.COLLISION_CHECK_SELF);//设置碰撞形式为自动碰撞
205.
206.world.addObject(plane);//将"物体"放到"天下"里
207.world.addObject(ramp);
208.world.addObject(cube);
209.world.addObject(sphere);
210.world.addObject(cube2);
211.
212.Lightlight=newLight(world);//为这个"天下"带来光照
213.light.setPosition(newSimpleVector(0,-80,-0));//设置光照坐标系
214.light.setIntensity(140,120,120);//设置光照强度
215.
216.cam=world.getCamera();//失掉以后的Camera
217.cam.moveCamera(Camera.CAMERA_MOVEOUT,100);//相对以后地位向后挪动100
218.cam.moveCamera(Camera.CAMERA_MOVEUP,100);//向上挪动100
219.
220.world.setAmbientLight(20,20,20);//设置情况光
221.MemoryHelper.compact();//接纳内存
222.if(master==null){//实例化Collision对象
223.Logger.log("SavingmasterActivity!");
224.master=Collision.this;
225.}
226.}
227.}
228.
229.publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
230.}
231.
232.publicvoidonDrawFrame(GL10gl){
233.move();//挪动
234.
235.cam.setPositionToCenter(cube);
236.cam.align(cube);
237.cam.rotateCameraX((float)Math.toRadians(30));
238.cam.moveCamera(Camera.CAMERA_MOVEOUT,100);
239.
240.fb.clear(back);
241.world.renderScene(fb);
242.world.draw(fb);
243.fb.display();
244.
245.if(System.currentTimeMillis()-time>=1000){
246.Logger.log(fps+"fps");
247.fps=0;
248.time=System.currentTimeMillis();
249.}
250.fps++;
251.}
252.
253.publicvoidmove(){//碰撞与挪动的设定
254.if(up){//按向上偏向键
255.SimpleVectort=cube.getZAxis();//获得cube的Z轴
256.t.scalarMul(SPEED);//向里挪动
257.moveRes.add(t);
258.}
259.if(down){
260.SimpleVectort=cube.getZAxis();
261.t.scalarMul(-SPEED);//向外挪动
262.moveRes.add(t);
263.}
264.if(left){
265.cube.rotateY((float)Math.toRadians(-1));//向左扭转
266.}
267.if(right){
268.cube.rotateY((float)Math.toRadians(1));//向右扭转
269.}
270.
271.//avoidhighspeeds;
272.if(moveRes.length()>MAXSPEED){
273.moveRes.makeEqualLength(newSimpleVector(0,0,MAXSPEED));//设定最年夜长度为MAXSPEED
274.}
275.cube.translate(0,-0.02f,0);//向上挪动0.02f
276.moveRes=cube.checkForCollisionEllipsoid(moveRes,ellipsoid,8);//设置碰撞
277.cube.translate(moveRes);//扭转
278.
279.//重力感到
280.SimpleVectort=newSimpleVector(0,1,0);
281.t=cube.checkForCollisionEllipsoid(t,ellipsoid,1);
282.cube.translate(t);
283.
284.//阻尼--#,思索的还真周密
285.if(moveRes.length()>DAMPING){//假如按上偏向键或下偏向键,发生阻尼
286.moveRes.makeEqualLength(newSimpleVector(0,0,DAMPING));
287.}else{
288.moveRes=newSimpleVector(0,0,0);//不然不发生
289.}
290.}
291.}
292.}

CoreAnimation---制作动画很强大很喜欢的框架可以用少量的代码写出漂亮的动画CQuartz2D---强大的2D绘图库COpenGL---不用介绍了超级强大的3D库CCoreImage---
兰色精灵 该用户已被删除
沙发
发表于 2015-1-21 13:51:43 | 只看该作者
培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
柔情似水 该用户已被删除
板凳
发表于 2015-1-28 05:29:42 | 只看该作者
有办法利用自己手头的电脑立刻开始这个美妙旅程的。
莫相离 该用户已被删除
地板
发表于 2015-2-4 06:11:31 | 只看该作者
边吃零食边看Stanford的视频教程
乐观 该用户已被删除
5#
发表于 2015-2-9 08:06:04 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
若天明 该用户已被删除
6#
发表于 2015-2-19 04:46:19 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
再现理想 该用户已被删除
7#
发表于 2015-2-21 06:38:14 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
透明 该用户已被删除
8#
发表于 2015-3-11 07:49:02 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-11 18:13:19 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
10#
发表于 2015-3-19 06:24:25 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
活着的死人 该用户已被删除
11#
发表于 2015-3-22 20:28:39 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
海妖 该用户已被删除
12#
发表于 2015-4-12 19:22:24 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
若相依 该用户已被删除
13#
发表于 2015-4-16 11:12:14 | 只看该作者
边吃零食边看Stanford的视频教程
admin 该用户已被删除
14#
发表于 2015-4-19 09:09:26 | 只看该作者
到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了
只想知道 该用户已被删除
15#
发表于 2015-4-26 07:55:48 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
灵魂腐蚀 该用户已被删除
16#
 楼主| 发表于 2015-4-27 09:32:20 | 只看该作者
到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了
愤怒的大鸟 该用户已被删除
17#
发表于 2015-5-9 05:00:34 | 只看该作者
在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。
爱飞 该用户已被删除
18#
发表于 2015-6-8 23:47:41 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
再见西城 该用户已被删除
19#
发表于 2015-6-12 10:43:55 | 只看该作者
特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地
飘灵儿 该用户已被删除
20#
发表于 2015-6-19 21:05:51 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-30 03:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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