第二部分,实体无素介绍
l精灵(Sprites)
如果在2D游戏开发中你还是新手,不知道什么样是精灵,我先简单给Sprite下个定义。
精灵就是放在场景坐标(X,Y)位置的2D位图(Spriteisa2DBitmap,positionedonthesceneby[X,Y]coordinates.)
在AE中,精灵是Entity扩展,更复杂的精灵类可以让你使用切分和动画。
1.创建精灵。
Sprite有很多个构造函数,这是其中最简单一个:
SpriteyourSprite=newSprite(x,y,textureRegion,vertexBufferObjectManager);
·第一,二个参数指定精灵的坐标。
·第三个参数是精灵的ITextureRegion(见loadingresources)
·第四个是顶点缓冲对象管理器,很常用,可以通过mEngine.getVertexBufferObjectManager();获得。
你还可以指定精灵的宽和高,默认使用ITextureRegion中的尺寸。尽可能多地定制Sprite,使用最相近的构造函数。
2.关联精灵
把精灵关联到其它实体,比如Scene,如下:
anyEntity.attachChild(yourSprite);
3.更多
·撤销关联
·控制可见性
·设置旋转
·删除精灵click.
·启用抖动显示(注:Dithering是一种欺骗你眼睛,使用有限的色彩让你看到比实际图象更多色彩的显示方式。通过在相邻像素间随机的加入不同的颜色来修饰图象,通常这种方式被用于颜色较少的情况下)click.
·Entity修改器click.
·切片和动画精灵click.
l切片和动画精灵(TiledSprite&AnimatedSprite)
本节介绍两个重要的Entity子类,略有不同。
1.TiledSprite:
在做按钮这些时候很有用,方便地创建按钮的不同状态(注:新的AE提供了ButtonSprite类来专门做按钮了)。你可以很方便地设置当前切片索引:
yourTiledSprite.setCurrentTileIndex(index)
2.AnimatedSprite:
是TiledSprite的子类,可以让TiledSprite动起来。
privatevoidcreateTiledSprite()
{
AnimatedSpriteas=newAnimatedSprite(0,0,tiledTextureRegion,vbo);
long[]frameDurration={100,100,100};
as.animate(frameDurration);
scene.attachChild(as);
}
上面的long[]有三个值因为,我的tiledTextureRegion有三个切片,猜对了,需要为每一个切片指定一个值。。。。。。。。。(注:每个切片播放后的延时)
l如何删除实体(HowtoremoveEntities):
对于不再需要的实体对象我们应当删除,按下面步骤来:
ourEntity.detachSelf();
yourEntity.dispose();
l将Entites作为层:
Layers的概念在游戏开发中很有用,幸运的是,在AE中,创建和管理层都很方便。
为了创建一个新的层,我们只需简单地将一个Entity对象与场景关联,好了!第一层可以使用了!
(注:这点与老版本有点不同,老版本把Layer独立出来了,有类似getTopLayer()函数)
finalintFIRST_LAYER=0;
finalintSECOND_LAYER=1;
privatevoidcreateLayers()
{
scene.attachChild(newEntity());//FirstLayer
scene.attachChild(newEntity());//SecondLayer
}
然后通过:scene.getChildByIndex(FIRST_LAYER).attachChild(yourEntity);
再往第一层里添加东西!
l实体修改器(EntityModifiers):
这个东西是用于将实体按照一定的数学函数作变化,f=E(x);参见org.andengine.entity.modifier包获取更多信息。
1.为一个Entity注册修改器:
yourEntity.registerEntityModifier(newRotationModifier(3,0,360));
这里注册了一个旋转修改器,有三个参数:持续时间,起始角度,终止角度。
2.无限循环的修改器。
不停地重复调用,可以理解为容器
yourEntity.registerEntityModifier(newLoopEntityModifier(yourModifier))));
3.修改器的监听器
有时在执行修改器的某个时间需要执行一段特定的代码,这时候只需覆盖修改器中的某些函数就是了:
RotationModifieryourModifier=newRotationModifier(3,0,360)
{
@Override
protectedvoidonModifierStarted(IEntitypItem)
{
super.onModifierStarted(pItem);
//Youractionafterstartingmodifier
}
@Override
protectedvoidonModifierFinished(IEntitypItem)
{
super.onModifierFinished(pItem);
//Youractionafterfinishingmodifier
}
};
yourEntity.registerEntityModifier(yourModifier);
l背景:
1.纯色背景:
privatevoidcreateBackground()
{
scene.setBackground(newBackground(Color.RED));
}
背景将被设置为红色
2.视差背景(parallaxbackground)
你也可以使用图片作为背景,这就是视差背景。不管摄像机如何变化,是否去删去,视差背景总是可见。
privatevoidcreateBackground()
{
ParallaxBackgroundbackground=newParallaxBackground(0,0,0);
background.attachParallaxEntity(newParallaxEntity(0,newSprite(0,0,background_region,vbo)));
scene.setBackground(background);
}
ParallaxBackground可以关联一个ParallaxEntity,这里是一个背景精灵图片。
3.自动的视差背景
AutoParallaxBackground是ParallaxBackground的子类,可以用来控制里面的实体,比如移动的去朵。但是不太灵活,推荐使用jaym分享的ParallaxLayer来实现达到很酷的效果!
l处理触摸操作:
通过重写onAreaTouched,你可以很容易地控制实体的触摸事件,这个例子中,我们创建一个新的精灵,注册触摸区域,过滤掉某些操作:
finalSpritesprite=newSprite(400,420,100,50,vbo)
{
@Override
publicbooleanonAreaTouched(TouchEventpSceneTouchEvent,floatX,floatY)
{
if(pSceneTouchEvent.isActionUp())
{
//executeaction
}
returntrue;
};
};
scene.registerTouchArea(sprite);
scene.attachChild(sprite);
记住在场景中注册触摸区域,不然没有作用。IsActionUp意思是在用户手指离开屏幕时候
更多触摸条件:
·isActionCancel
·isActionDown
·isActionMove
·isActionOutside
l创建并理解场景
场景是绘制到屏幕上的所有对象的根容器,一个场景可以包含多层,每层容纳(静态或者动态地)一定数量的实体(Entity)。Scene有子类:HUD,MenuScene,CameraScene,这些子类绘制在固定位置和摄相机镜头无关。
1.创建场景:
ScenenewScene=newScene();
2.显示切换场景:
有时候,应当使用多个场景而不是使用多个活动(Activity)
mEngine.setScene(scene);
切换到另一个场景,先前的场景就停止更新了。
scene.setChildScene(differentScene);
为场景设置一个不同的子场景,有时子场景设置后需要决定是否进行更新,那么使用
setChildScene(pChildScene,pModalDraw,pModalUpdate,pModalTouch)
子场景很有用,比如需要弹出界面的时候。
3.禁用场景的背景:
yourScene.setBackgroundEnabled(false);
在背景可见的情况下,设置子场景后只能看到子场景,为了出现弹出效果,把子场景的背景设为false。这样子场景好像在屏幕上一样(注:即子场景的背景透明)。
lHUD
HUD的解释在前面。
HUD是Scene的子类,可以跟随摄像机的运动。
HUD使用和Scene没有区别:
HUDhud=newHUD();
hud.attachChild(yourEntity);
camera.setHUD(hud);
不过记得为摄像机设置HUD.
l创建菜单场景(MenuScene)
AE提供了一个很棒的MenuScene来创建好看又会动的菜单。
1.创建菜单场景。
在例子中,我们创建一个带2个精灵菜单项的MenuScene.同时带有缩放的动画,当菜单项被点击时,会被放大。
privateMenuScenemenuScene;
privateMenuScenecreateMenu()
{
menuScene=newMenuScene(camera);
finalIMenuItemoptionsMenuItem=newScaleMenuItemDecorator(newSpriteMenuItem(0,region2,vbo),2,1);
finalIMenuItemplayMenuItem=newScaleMenuItemDecorator(newSpriteMenuItem(1,region1vbo),2,1);
menuScene.addMenuItem(optionsMenuItem);
menuScene.addMenuItem(playMenuItem);
menuScene.buildAnimations();
menuScene.setBackgroundEnabled(false);
menuScene.setOnMenuItemClickListener(this);
returnmenuScene;
}
使用ScaleMenuItemDecorator创建动画,引擎还提供了其他MenuItem修饰器
。你也可以很容易地创建自己的修饰器,还可以将修饰器和实体修改器结合起来。(具体见引擎的代码)
SpriteMenuItem的第一个参数是按钮的ID,然后为菜单设置setOnMenuItemClickListener监听器,实现IOnMenuItemClickListener:
@Override
publicbooleanonMenuItemClicked(MenuScenepMenuScene,IMenuItempMenuItem,floatpMenuItemLocalX,floatpMenuItemLocalY)
{
handleButtonActions();
switch(pMenuItem.getID())
{
case0:
//action
returntrue;
case1:
//action
returntrue;
default:
returnfalse;
}
}
l实体间的碰撞:
AE让我们检查两个实体的碰撞变得非常容易:
a,创建实体。
b,重写onManagedUpdate()
Spriteentity=newSprite(x,y,100,300,textureRegion,vbo)
相关推荐
《AndEngine游戏-DeliveryBoy-源代码》是一个用于学习AndEngine游戏开发的示例项目,其主要内容涵盖了AndEngine的基本使用、游戏逻辑构建以及资源管理等多个方面。AndEngine是一款流行的开源Android游戏开发引擎,它...
AndEngine 2013-2月 最新Example,直接导入Eclipse即可,API15, 环境 Android 4.0.3
AndEngine 2013-3-12 最新Jar包,直接拉进项目libs即可,可查看源代码
AndEngine-GLES2是一款专为Android平台设计的开源2D游戏引擎,它为开发者提供了高效且易用的工具,用于创建各种2D游戏。这款引擎以其简洁的API和丰富的功能而受到开发者的欢迎,尤其值得一提的是,曾经风靡全球的...
### AndEngine分析之三——AsyncTask与BaseActivity深入解析 #### 一、AsyncTask概述 在AndEngine项目中,为了实现界面更新等操作时避免主线程阻塞的问题,使用了`AsyncTask`来处理后台任务。`AsyncTask`提供了一...
学习AndEngine-GLES2的源码,你将了解到如何使用OpenGL ES 2.0进行图形编程,如何管理游戏状态,以及如何实现高效的性能优化。这不仅可以提升你的Android游戏开发技能,还能帮助你理解和解决实际开发中遇到的问题。...
AndEngine 中的 BaseGameActivity 详解 BaseGameActivity 是 AndEngine 框架中一个关键的组件,它是游戏的基础,负责管理游戏的引擎和SurfaceView。它继承自 BaseActivity,并实现了 IGameInterface 接口。 ...
在Android游戏开发中,AndEngine是一个非常流行的2D游戏引擎,它允许开发者创建高质量的图形和交互式体验。本文将探讨如何在AndEngine中实现后台加载资源,同时展示一个使用AsyncTask来处理加载过程的示例。 在...
在使用AndEngine-GLES2压缩包时,你需要包含必要的库文件,并按照官方文档或者社区教程进行项目设置。通常,开发流程包括创建游戏场景、添加精灵、定义动画、实现碰撞检测以及添加音效和音乐等。 总的来说,...
Andengine-Android-Studio是将Andengine集成到Android Studio的模块,方便开发者在现代的Android开发环境中进行游戏开发。 Andengine的主要特点包括: 1. **轻量级**:Andengine的体积小巧,性能高效,对设备资源...
AndEngine是一款专为Android平台设计的2D游戏开发框架,它提供了一套高效、易用的API,使得开发者能够快速构建各种2D游戏。AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **...
AndEngine是一款专为Android平台设计的游戏开发引擎,它简化了2D游戏的创建过程,让开发者无需深入理解底层图形库,就能快速构建出高质量的移动游戏。本资源提供了AndEngine的范例源码,这对于初学者和有经验的...
官方版本,亲测可用
##摘要以下是andEngine和andEnginePhysicsBox2DExtension的可编译就绪源代码集,仅在Android Studio中使用。 JNI本机扩展已被编译并包含在内,而所需要做的只是开始编写您的游戏。 这是我们的游戏《 Dot!Panic》的...
3. **Entity-Component-System架构**:AndEngine采用了ECS模式,这是一种常见的游戏开发设计模式,通过组件组合来定义实体,使得代码更易于维护和扩展。 4. **事件驱动编程**:AndEngine支持事件驱动模型,开发者...
通过深入学习AndEngine-GLES2的源码,开发者可以更好地理解游戏引擎的工作原理,进一步提升开发技能。在实际开发中,结合标签中的“源码”和“工具”,开发者可以自定义扩展,打造符合自己需求的游戏框架。
AndEngine是一款开源的游戏开发引擎,专门针对Android平台设计,它简化了2D游戏的开发流程,使得开发者可以更专注于游戏的创意和逻辑。Box2D是物理模拟库,广泛用于创建真实感的2D物理效果,如碰撞检测、重力等。...
碰撞检测在AndEngine中通常通过实体(Entities)和碰撞监听器(CollisionListeners)来实现。实体是AndEngine中的基本构建块,可以代表游戏中的任何可交互对象,如角色、道具或者障碍物。当两个实体可能有重叠时,就...
通过分析源代码和阅读教程,学习者可以掌握AndEngine的基本用法,例如设置场景、添加实体、实现物理行为、处理用户输入和更新游戏逻辑。 总的来说,这个压缩包文件提供了一个很好的机会,让对AndEngine感兴趣的...