andengine游戏引擎总结进阶篇2
来源:互联网 发布:gtd时间管理 知乎 编辑:程序博客网 时间:2024/05/01 21:36
本篇包括瓦片地图,物理系统,
1瓦片地图
超级玛丽,冒险岛,魂斗罗等游戏主场景都有瓦片地图画成,它的作用可见一斑,它可以用tiled Qt软件画成,在辅助篇中讲讲解tiled Qt软件的使用
1)加载tmx文件
try {final TMXLoader tmxLoader = new TMXLoader(this,this.mEngine.getTextureManager(), TextureOptions.NEAREST,null);this.mTMXTiledMap = tmxLoader.loadFromAsset(this,"sence"+leave.getInt("leave", 1)+".tmx");} catch (final TMXLoadException tmxle) {Debug.e(tmxle);}
2)加载将每一个图层瓦片
//将每一层TMXLayer加载到scene中for (int i = 0; i < this.mTMXTiledMap.getTMXLayers().size(); i++) {TMXLayer layer = this.mTMXTiledMap.getTMXLayers().get(i);mScene.attachChild(layer);}
3)具体瓦片图块的使用
好啦,一个很大的场景就加载完成了,具体的每个瓦片的使用,将在下一篇与box2d(物理系统)具体结合使用时展示它强大的威力
2)物理世界
物理世界想象成我们的世界就行,其中包括物理世界的实质,皮肤(人的衣服),刚体(人),连接器(设置弹性,密度,摩擦力),关节,碰撞检测,物体在物理世界中的添加与移除等
1)创建物理世界
this.mPhysicsWorld = new FixedStepPhysicsWorld(30, new Vector2(0, 80),true, 8, 1);//Vector()设置的是力,就是向下为80N的力
2)皮肤的创建
很简单,就是一个Sprinte或者是AnimateSprite图片的创建,物体外边的变化就是皮肤的变化啦
// 创建player,并别加载到scene中final AnimatedSprite player = new AnimatedSprite(centerX-200, centerY-100,this.mPlayerTextureRegion);//this.mBoundChaseCamera.setChaseEntity(player);
3)连接器的创建
final FixtureDef playerFixtureDef = PhysicsFactory.createFixtureDef(0,0, 0.5f);//设置弹性,密度,摩擦力
4)刚体
mPlayerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, player,BodyType.DynamicBody, playerFixtureDef);//BodyType有三种,一种是DynamicBody,运动的重型物体,一种是KinematicBody,运动的轻型物体,最后一种StaticBody,静态物体,比如墙体,就是这一种
5)将物体添加到物理世界中
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector( player, mPlayerBody, true, false) );
6)将物体从物理世界中移除
mEngine.runOnUpdateThread(new Runnable() { @Override public void run() { final PhysicsConnector physicsConnector = mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(physicalmap.get(bodyb));//通过皮肤获得连接器 if (physicsConnector != null) { mPhysicsWorld.unregisterPhysicsConnector(physicsConnector);//注销连接器 bodya.setActive(false); mPhysicsWorld.destroyBody(bodyb);//摧毁物体 mScene.detachChild(physicalmap.get(bodyb)); physicalmap.remove(bodyb);//physicalmap是皮肤与刚体结合的结合 System.gc(); } } });
一定要放到一个线程中,不然很容易出错误
7)碰撞检测
在物理世界上注册
this.mPhysicsWorld.setContactListener(new ContactListener() {@Overridepublic void preSolve(Contact arg0, Manifold arg1) {// TODO Auto-generated method stub}@Overridepublic void postSolve(Contact arg0, ContactImpulse arg1) {// TODO Auto-generated method stub}@Overridepublic void endContact(Contact arg0) {// TODO Auto-generated method stub}@Overridepublic void beginContact(Contact arg0) {// TODO Auto-generated method stubfinal Body bodya=arg0.getFixtureA().getBody();//获得bodyafinal Body bodyb=arg0.getFixtureB().getBody();//获得bodybString ida=(String) bodya.getUserData();//通过bodya,bodyb对碰撞的物体进行处理String idb=(String) bodyb.getUserData(); if("mPlayerBody".equals(idb)&&"bossBody".equals(ida)){scoresEditor.putInt("user0", score);scoresEditor.commit();lifeEditor.putInt("life", live);lifeEditor.commit();System.gc();mHandler.postDelayed(boss, 2000);//2秒钟后到gameover界面}});
8)关节andengine学习示例网站
- andengine游戏引擎总结进阶篇2
- andengine游戏引擎总结进阶篇1
- andengine游戏引擎总结基础篇
- 游戏引擎Andengine总结(二):AndEngine引擎运行原理
- 配置JDKAndroid 2D游戏引擎AndEngine
- android游戏引擎 andengine
- AndEngine游戏引擎简介
- 游戏引擎Andengine总结(五):TexturePacker的使用
- 游戏引擎AndEngine总结(八):自定义Button
- 游戏引擎Andengine总结(一):AndEngine环境配置及extension,AndEngineExamples导入
- 游戏引擎Andengine总结(三):AndEngine与Android的粘合点
- 游戏引擎Andengine总结(一):AndEngine环境配置及extension,AndEngineExamples导入
- AndEngine游戏引擎剖析【一】
- Android游戏引擎--AndEngine入门
- AndEngine游戏引擎之【生命周期】
- AndEngine游戏引擎之【生命周期】
- Android 2D游戏引擎AndEngine快速入门教程
- Android 2D游戏引擎AndEngine配置环境
- 腾讯实习生招聘笔试
- Merge Sorted Array
- 给定字符串先序和中序遍历,求后序遍历
- iOS 开发者必不可少的 75 个工具
- 用adb命令删除系统自带launcher
- andengine游戏引擎总结进阶篇2
- 最大子序列和问题
- C++学习笔记1C++开发环境搭建创建第一个项目Hello word!
- java基本程序设计2
- gcc中-pthread和-lpthread的区别
- Linux strace命令
- 浅析objc的消息机制
- wp-IsolatedStorageSettings
- c语言 指针作为函数参数