我有一个使用Android画布创建的动态壁纸。经过测试,我认为有必要利用OpenGL的强大功能,因此我正在尝试使用AndEngine。我想知道如何实现以下目标。
我有一个填满整个屏幕的背景图片,顶部有许多较小的位图(不是动画的动作)
到目前为止,我已将此作为背景图片:
@Override
public void onLoadResources()
{
mtexture = new Texture(1024, 1024, TextureOptions.BILINEAR);
TextureRegionFactory.setAssetBasePath("gfx/");
mtextureRegion = TextureRegionFactory.createFromResource(mtexture , this, R.drawable.background1, 0, 0);
this.mEngine.getTextureManager().loadTexture(this.mtexture );
}
@Override
public Scene onLoadScene(){
final Scene scene = new Scene(1);
Sprite background = new Sprite(0, 0, CAMERA_WIDTH*2, CAMERA_HEIGHT, mtextureRegion )
SpriteBackground sb = new SpriteBackground(background);
scene.setBackground(sb);
scene.setBackgroundEnabled(true);
return scene;
}
这适用于背景,但我需要移动的精灵。
在我的画布代码中,我执行以下操作来更新位置&每隔几毫秒移动物体的物理和绘制画布
private final Runnable drawScreen = new Runnable() {
public void run() {
drawFrame();
}};
-
void drawFrame() {
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
//draw
}
} finally {
if (c != null) holder.unlockCanvasAndPost(c);
}
mHandler.removeCallbacks(drawScreen);
mHandler.postDelayed(drawScreen, 10);
}
在AndEngine上执行此操作的适当方法是什么?使用相同的代码并替换openGL调用?
我查看了GLEngine
,我是否应该将Runnables发送到GlThread
队列?
编辑 - 我想我找到了答案......一个UpdateHandler。但是如何通知处理程序更新(即调用onUpdate
方法)。如果我制作一个定时的处理程序,如果我经常打电话会发生什么情况,是否会建立一个请求队列?
答案 0 :(得分:3)
首先,不要使用构造函数Scene(int)
,它已被弃用。请改用Scene()
。
正确,您应该使用更新处理程序。
您可以创建UpdateHandler
,然后将其注册到您的场景中:
scene.registerUpdateHandler(mUpdateHandler);
这样,每次场景更新(每帧)时,都会执行mUpdateHandler.onUpdate
方法中的代码。您没有手动调用它。如果您想停止它,请致电:
scene.unregisterUpdateHandler(mUpdateHandler);
因此,onUpdate
方法始终在UpdateThread中执行,因此您可以确保可以对所需的实体进行任何更改。所以你可以四处走动,你想要的精灵等......
顺便问一下,为什么背景的宽度为CAMERA_WIDTH*2
?这意味着只显示精灵的左半部分。如果你不打算移动相机,那么右半部分就不会出现。