android - AndEngine 更新屏幕

标签 android andengine

我有一个使用 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/

相关文章:

android - 通过 VBO 将附加数据传递给 fragment 着色器 - DynamicSpriteBatch

android - Android Studio 2.0 Gradle错误[NoClassDefFoundError:无法初始化类org.gradle.StartParameter]

java - 为什么AndEngine的CollisionHandler在一次碰撞中会产生多个事件?

java - 添加到数组或链表时游戏崩溃

android - 动画结束时的单选按钮监听器

android - AndEngine GLES2 - 如何使用调用 IUpdateHandler 的实体?

java - AndEngine 物理示例

android - Inapp billing subscription error 您的订单被拒绝,因为它被认为是高风险的

android - 如何将位图缓存到 native 内存中

java - 数据库版本 SQLite Android