我有一个使用 Android Canvas 创建的动态壁纸。经过测试,我觉得有必要利用 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;
}
这对于背景效果很好,但我需要移动 Sprite 。
在我的 Canvas 代码中,我执行以下操作来更新移动对象的位置和物理特性,并每隔几毫秒绘制 Canvas
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
方法)。如果我创建一个定时处理程序,如果我调用太频繁会发生什么,是否会建立一个请求队列?
最佳答案
首先,不要使用构造函数 Scene(int)
,它已被弃用。请改用 Scene()
。
正确,您应该使用更新处理程序。
您可以创建一个 UpdateHandler
,然后将其注册到您的场景中:
scene.registerUpdateHandler(mUpdateHandler);
这样,每次场景更新(每一帧)时都会执行mUpdateHandler.onUpdate
方法中的代码。您不手动调用它。如果您想停止它,请调用:
scene.unregisterUpdateHandler(mUpdateHandler);
因此,onUpdate
方法始终在 UpdateThread 中执行,因此您可以确保可以对实体进行任何所需的更改。这样你就可以四处移动并绘制你想要的 Sprite ,等等...
顺便问一下,为什么背景的宽度是CAMERA_WIDTH*2
?这意味着仅显示 Sprite 的左半部分。如果您不打算移动相机,那么右半部分将永远不会显示。
关于android - AndEngine 更新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455213/