AndEngine 学习系列2-实体(Entities)

本文介绍了2D游戏开发的基本概念和技术,包括精灵的创建与管理、背景设置、触摸操作处理、场景创建及实体间的碰撞检测等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二部分,实体无素介绍

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();

lEntites作为层:

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.自动的视差背景

AutoParallaxBackgroundParallaxBackground的子类,可以用来控制里面的实体,比如移动的去朵。但是不太灵活,推荐使用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)

{

@Override

protectedvoidonManagedUpdate(floatpSecondsElapsed)

{

if(player.collidesWith(this))

{

//executeactions

}

};

};

l如何正确创建文字

GLES2只有一个类便可以创建静态和动态的文字。

1.创建文字时的重点

实例化文字对象前先准备内存。比如想显示一个分数:"Score:128"

确定使用什么字体,和使用哪些字符,然后:

Textt=newText(0,0,font,"Score:0123456789",vbo);

这样,就不会每次都重新生成一个新的文字实例了!

内容概要:本文全面介绍了数据流图(DFD)的概念、构成元素及其重要性。数据流图是从数据传递和加工的角度,以图形方式表达系统逻辑功能、数据流向和变换过程的工具。文章详细解释了数据流图的四个基本元素:数据流、加工、数据存储和外部实体,并通过实例说明了这些元素在实际场景中的应用。文中强调了数据流图在软件开发需求分析和业务流程优化中的关键作用,通过绘制顶层、中层和底层数据流图,逐步细化系统功能,确保数据流向和处理逻辑的清晰性。此外,文章还指出了常见绘制误区及解决方法,并以在线购物系统为例进行了实战分析,展示了从需求分析到数据流图绘制的全过程。 适合人群:软件工程师、业务分析师、系统设计师以及对系统分析与设计感兴趣的初学者。 使用场景及目标:①帮助开发团队在需求分析阶段清晰展示数据流动和处理过程,避免理解偏差;②辅助企业梳理和优化业务流程,识别效率低下的环节,提升运营效率;③为系统设计和开发提供详细的逻辑框架,确保各模块的功能明确,减少开发错误。 阅读建议:本文内容详实,涵盖了从理论到实践的各个方面。建议读者在学习过程中结合实际项目背景,逐步掌握数据流图的绘制技巧,并通过反复练习和优化,加深对系统分析与设计的理解。
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 《CoffeeTime_0.99.rar:主板BIOS修改工具详述》 在计算机硬件领域,BIOS(基本输入输出系统)是计算机启动时最先加载的软件,它负责初始化硬件设备,并为操作系统提供基本的交互功能。不过,随着处理器技术的持续进步,部分主板可能无法原生支持更新的CPU型号。为解决这一问题,一些技术爱好者和专业人士会通过修改主板BIOS,也就是俗称的“魔改”,来提升其兼容性。本文将深入剖析名为“CoffeeTime_0.99.rar”的工具,它是一款专门用于主板BIOS修改,以实现对第6、7、8、9代英特尔CPU支持的工具。 我们先来看“CoffeeTime.exe”,这是该工具的主程序文件。通常情况下,它会配备一套直观易用的用户界面,方便用户对BIOS进行修改操作。不过,在使用该工具之前,用户必须具备一定的电脑硬件知识,因为一旦操作失误,就可能导致系统运行不稳定,甚至无法启动。对于初学者而言,谨慎操作至关重要,否则可能会造成不可挽回的损失。 “readme.txt”是软件包中常见的文档,一般会包含使用指南、注意事项以及开发者提供的其他重要信息。在使用CoffeeTime之前,用户务必要仔细阅读该文件,因为里面可能包含了如何正确运行程序、避免错误操作以及解压后具体步骤等关键内容。 “bin”和“data”是两个文件夹,它们可能包含了用于BIOS修改的各种二进制文件和数据。“bin”文件夹通常会包含特定版本的BIOS固件或用于修改的工具,而“data”文件夹则可能包含更新CPU微码、识别信息等必要的数据文件。在进行BIOS修改的过程中,这些文件会被程序调用,从而实现对原有BIOS的扩展或修正。 BIOS的修改过程一般包含以下步骤:首先,备份原始BIOS,这是在进行任何修改前的必要步骤,以便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值