andengine游戏引擎总结进阶篇2
本篇包括瓦片地图,物理系统,
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() { @Override
public void preSolve(Contact arg0, Manifold arg1) {
// TODO Auto-generated method stub } @Override
public void postSolve(Contact arg0, ContactImpulse arg1) {
// TODO Auto-generated method stub } @Override
public void endContact(Contact arg0) {
// TODO Auto-generated method stub } @Override
public void beginContact(Contact arg0) {
// TODO Auto-generated method stub
final Body bodya=arg0.getFixtureA().getBody();//获得bodya
final Body bodyb=arg0.getFixtureB().getBody();//获得bodyb
String 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
本篇包括虚拟键盘,粒子系统 1虚拟键盘 分为两种,一种是单个虚拟键盘,另一种是多个方位虚拟键盘 1)加载虚拟键盘所需要的图片资源 private BitmapTextureAtlas mOnScree ...
- andengine游戏引擎总结基础篇
其他的游戏引擎知道的不是很对,不过相对于学java的童鞋们来说,那是个不错的选择啦,这个发动机咋样,google去吧.基础篇包括图片,字体,音效,数据读取,会了这点,就会做简单的小游戏啦 对于游戏 ...
- 如何制作一款HTML5 RPG游戏引擎——第五篇,人物&人物特效
上一次,我们实现了对话类,今天就来做一个游戏中必不可少的——人物类. 当然,你完全是可以自己写一个人物类,但是为了方便起见,还是决定把人物类封装到这个引擎里. 为了使这个类更有意义,我还给人物类加了几 ...
- 如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话
今天我们来实现情景对话.这是一个重要的功能,没有它,游戏将变得索然无味.所以我们不得不来完成它. 但是要知道,使用对话可不是一件简单的事,因为它内部的东西很多,比如说人物头像,人物名称,对话内容... ...
- 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么 ...
- HTML5 RPG游戏引擎 地图实现篇
一,话说全国年夜事 前没有暂看到lufy的专客上,有一名伴侣念要一个RPG游戏引擎,出于兴趣筹办入手做一做.因为我研讨lufylegend有冶时间了,对它有必然的依赖性,因而便筹办将那个引擎基于 ...
- HGE游戏引擎之实战篇,渐变的游戏开场
#include <hge.h> #include "menuitem.h" //#include <hgefont.h> #include <hge ...
- Atitit 基于dom的游戏引擎
Atitit 基于dom的游戏引擎 1. 添加sprite控件(cocos,createjs,dom)1 1.1.1. Cocos1 1.1.2. createjs1 1.1.3. Dom模式2 1. ...
- libgdx游戏引擎教程
第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html 第二讲: libgdx游戏引擎教程(二 ...
随机推荐
- Hbase深入学习(一) 什么是hbase
Hbase深入学习(一) 什么是hbase 一.hbase是什么? 首先hbase是一个在Hadoop的HDFS分布式存储系统上介于映射(key/value)的nosql的分布式数据库:它通 ...
- C语言当中的作用域
在C语言当中,变量的作用域分为两种:全局变量和局部变量. 在所有函数之外声明的变量是全局变量,这些变量可以在整个程序当中被访问: 局部变量是在某一对大括号({})之间生命的变量,这些变量在这对大括号之 ...
- Java程序员应该知道的10个面向对象理论
英文原文:10-object-oriented-design-principles 面向对象理论是面向对象编程的核心,但是我发现大部分 Java 程序员热衷于像单例模式.装饰者模式或观察者模式这样的设 ...
- 彻底解决TAP(点透)提升移动端点击响应速度
使用fastclick 尼玛使用太简单了,直接一句: FastClick.attach(document.body); 于是所有的click响应速度直接提升,刚刚的!什么input获取焦点的问题也解决 ...
- Android 四大组件之Activity生命周期
写这篇博文之前,已经对android有一定的了解和认识.这篇博文主要讲述android的Activity的生命周期,这是android开发者必须掌握的知识.android的Activity组件拥有7个 ...
- 数据库基础(变量、运算符、if语句、while语句)
数据库基础(变量.运算符.if语句.while语句) 变量: 定义变量:declare @变量名 数据类型 变量赋值:set @变量名 = 值 输出:print 变量或字符串 SQL语言也跟其他编 ...
- Android 开发中的View事件监听机制
在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...
- Git 和 SVN之间的五个基本区别
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...
- python正则表达式练习篇2
首先生成正则表达式练习的数据: #! /usr/bin/python from random import randint, choice from string import lowercase f ...
- Weex 开发入门
去年也听说过 React Native 技术,现在好像很多大公司都在这套技术中踩坑,在开发自己的UI.工作中涉及不到,一直没有学习相关的知识. 并且听说阿里的 vue native,一直很期待.前段时 ...