AndEngine更新屏幕

时间:2011-12-10 07:54:20

标签: android andengine

我有一个使用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方法)。如果我制作一个定时的处理程序,如果我经常打电话会发生什么情况,是否会建立一个请求队列?

1 个答案:

答案 0 :(得分:3)

首先,不要使用构造函数Scene(int),它已被弃用。请改用Scene()

正确,您应该使用更新处理程序。 您可以创建UpdateHandler,然后将其注册到您的场景中:

scene.registerUpdateHandler(mUpdateHandler);

这样,每次场景更新(每帧)时,都会执行mUpdateHandler.onUpdate方法中的代码。您没有手动调用它。如果您想停止它,请致电:

scene.unregisterUpdateHandler(mUpdateHandler);

因此,onUpdate方法始终在UpdateThread中执行,因此您可以确保可以对所需的实体进行任何更改。所以你可以四处走动,你想要的精灵等......

顺便问一下,为什么背景的宽度为CAMERA_WIDTH*2?这意味着只显示精灵的左半部分。如果你不打算移动相机,那么右半部分就不会出现。