l使用场景触摸监听:
我会解释如何使用触摸监听
·首先,应当实现IOnSceneTouchListener接口
·然后检查事件动作。
@Override
publicbooleanonSceneTouchEvent(ScenepScene,finalTouchEventpSceneTouchEvent)
{
if(pSceneTouchEvent.isActionDown())
{
//executeaction.
}
returnfalse;
}
最后,注册到场景:
scene.setOnSceneTouchListener(this);
l创建左/右按钮
在大多数游戏中,你都要控制某个对象。所以控制器显得有必要。在这个例子中,我会展示如何创建左/右按钮(控制主角左/右移动)
1.创建按钮
本例使用矩形实体(RectangleEntity)简单明了。当然你可以使用任何其他实体如Sprite或AnimatedSprite。
按钮会被关联到HUD
privatevoidcreateControllers()
{
HUDyourHud=newHUD();
finalRectangleleft=newRectangle(20,200,60,60,vbo)
{
publicbooleanonAreaTouched(TouchEventtouchEvent,floatX,floatY)
{
if(touchEvent.isActionUp())
{
//moveplayerleft
}
returntrue;
};
};
finalRectangleright=newRectangle(100,200,60,60,vbo)
{
publicbooleanonAreaTouched(TouchEventtouchEvent,floatX,floatY)
{
if(touchEvent.isActionUp())
{
//moveplayerright
}
returntrue;
};
};
//可见,实际接受触摸事件消息的是场景!
yourHud.registerTouchArea(left);
yourHud.registerTouchArea(right);
yourHud.attachChild(left);
yourHud.attachChild(right);
camera.setHUD(yourHud);
}
首先,创建一个HUD,然后,两个矩形,重写矩形实体的onAreaTouched以便能处理事件,在场景中注册响应区域,最后把实体加到场景中。别忘了调用Camera的setHUD。
l处理安卓的原生按键消息(nativekey)
在开发应用时候,处理按键消息也很重要。有几个要记住,这是我的观点:
(注:这个属于AndroidFramework层)
1.重写方法:
首先,应该重写onKeyDown方法,该方法会捕获电话的回退键。
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent)
{
if(keyCode==KeyEvent.KEYCODE_BACK)
{
//performyouractons.
}
returnfalse;
}
2.处理不同的按键
显然,会有很多不同的按键消息,重要的有:
·KeyEvent.KEYCODE_HOME
·KeyEvent.KEYCODE_BACK
·KeyEvent.KEYCODE_MENU
值得一提的是,在有些设备上,没有特定的键,像我的平板就没有Menu键。
3.仔细思考
我强烈不建议重写系统的HOME/BACK键,因为需要返回前一个APP,另一个重要因素是:在GooglePlayStore团队为应用排位时也会考虑这个因素。(注:不太了解)
l捕获连续的触屏事件
本文讲述如何简单,快速,正确捕获连续触屏事件。
假如有一个精灵,需要连续地执行某一动作(如,在X轴上给玩家力来作移动),这里,我使用矩形实体。
1.可能的解法
有两个办法,分别介绍:
finalRectanglebutton=newRectangle(0,0,100,100,vbo)
{
@Override
publicbooleanonAreaTouched(TouchEventpSceneTouchEvent,floatpTouchAreaLocalX,floatpTouchAreaLocalY)
{
if(pSceneTouchEvent.isActionMove())
{
//Handleyouractionhere
}
returntrue;
}
};
如上,重写onAreaTouched方法并捕获isActionMove。这是个好办法,因为你手指按下时随着手指移动,即使是一,两个像素也会获得连续的移动事件,但并不完美。所以有更好的解法:
//ourflag
privatebooleanisTouchedFlag=false;
//ourbutton
finalRectanglebutton=newRectangle(0,0,100,100,vbo)
{
@Override
publicbooleanonAreaTouched(TouchEventpSceneTouchEvent,floatpTouchAreaLocalX,floatpTouchAreaLocalY)
{
if(pSceneTouchEvent.isActionDown())
{
isTouchedFlag=true;
}
if(pSceneTouchEvent.isActionUp())
{
isTouchedFlag=false;
}
returntrue;
}
@Override
protectedvoidonManagedUpdate(floatpSecondsElapsed)
{
if(isTouchedFlag)
{
//Executeyouractions.
}
super.onManagedUpdate(pSecondsElapsed);
}
};
这个办法使用了Updatehandler总是有效,因为:
·首先,声明一个布尔标志来存储按钮状态。
·使用Rectangle声明一个按钮。
·重写onAreaTouched方法捕获事件.
·如果是isActionDown按下,设置标志为True(触屏开始)
·如果是isActionUp抬起设置标志为false(释放)
·这次我们重写onManageUpdate检查标志是否为True,如果是则在循环中执行我们的要做的事。
l捕获长时点击(LongClick)
按着不放这个事件很容易实现,因为AE已经内置这个功能了
长时点击在界面中很有用,下面代码展示如何在场景中实现这个功能:
·首先,必须实现IHoldDetectorListener接口,重写下面三个未实现的方法:
@Override
publicvoidonHoldStarted(HoldDetectorpHoldDetector,intpPointerID,floatpHoldX,floatpHoldY)
{
}
@Override
publicvoidonHold(HoldDetectorpHoldDetector,longpHoldTimeMilliseconds,intpPointerID,floatpHoldX,floatpHoldY)
{
}
@Override
publicvoidonHoldFinished(HoldDetectorpHoldDetector,longpHoldTimeMilliseconds,intpPointerID,floatpHoldX,floatpHoldY)
{
}
·声明一个ContinousHoldDetector对象
privateContinuousHoldDetectorcontinuousHoldDetector;
·初始化它,并注册到场景。注意,这里使用默认的构造函数,如果要自定义一些参数,你也可以使用带参数的构造函数。
continuousHoldDetector=newContinuousHoldDetector(this);
yourScene.registerUpdateHandler(continuousHoldDetector);
·完成后,你就可以在IHoldDetectorListener接口的实现函数里执行自己的代码了
·onHoldStarted()-手指按住一段时间后调用。
·onHoldFinished()-手指离开屏幕后调用。
分享到:
相关推荐
AndEngine 2013-3-12 最新Jar包,直接拉进项目libs即可,可查看源代码
最新的AndEngine-GLES2源码,协助你更快更轻松的开发安卓游戏。
AndEngine 2013-2月 最新Example,直接导入Eclipse即可,API15, 环境 Android 4.0.3
AndEngine,是一款Android平台的开源2D。AndEngine ,游戏引擎,著名的休闲游戏 Flappy Bird就是使用的该引擎开发。
Andengine-Android-Studio 用于游戏引擎、流行标题和引擎的 Android Studio 模块。
官方版本,亲测可用
AndEngine ,一款android游戏开发的开源引擎,开发android游戏时很有用!文档详细介绍了该引擎的各种功能
官方版本,亲测可用
官方版本,亲测可用
Android 最为流行的2D游戏引擎 优点:(1)高效:在大运算量好事情况下,使用C/C++本地代码进行开发。比如物理引擎或者音频处理。 (2)AndEngine是开源项目,开发者可对源码进行修改,它的源码在github上托管
AndEngine 河內塔 遊戲源碼, 大圈不可壓小圈, 將3個圈圈移到另一個塔,
Android-游戏引擎AndEngine范例-源码
AndEngine游戏 DeliveryBoy 源代码,可以用来做AndEngine游戏实例教程进行参考
AndEngine-Utils 使 AndEngine 开发人员的生活更轻松的实用程序
AndEngine-井字游戏使用 AndEngine 的井字游戏,基于 Leonard Payne 的教程: : list=PLBmeNj1-Qt2ZucuAzoZQjOxscrWwYTii _
#AndEngine准备使用骨架 ##来自Charles Smartt Jr.和Jordan Dickow ##摘要以下是andEngine和andEnginePhysicsBox2DExtension的可编译就绪源代码集,仅在Android Studio中使用。 JNI本机扩展已被编译并包含在内,而...
适用于andengine + box2d扩展的android studio设置 这应该为您开箱即用。 在OSX 10.10和Android Studio 1.0 RC上进行了测试。如果没有,请告诉我!
AndEngine_分析之二-----BaseGameActivity. 中文
AndEngine对于物理引擎Box2D[3]的封装是让人惊讶的。 它使用JNI封装了Box2D的C++端,使得其运行效率比其他同级的物理引擎如Box2D快不少。如果你的游戏准备使用物理引擎,请优先考虑AndEngine。 扩展丰富 ...
AndEngine_分析之三-----AsyncTask_BaseActivity备忘