带有TMXTiledMap的BoundCamera和带有AnalogOnscreenControl的HUD

时间:2014-03-01 16:22:43

标签: andengine hud tmx

我正在将BoundCamera与TMXTiledMap一起使用,并使用AnalogOnScreenControl并将其附加到HUD。但是当我将地图滚动到另一个位置时,控件不能再使用了,请帮帮我!谢谢!

我的代码:

private void createControls() {
        mOnScreenControlTexture = new BitmapTextureAtlas(this.getTextureManager(), 256, 128, TextureOptions.BILINEAR);
        mOnScreenControlBaseTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mOnScreenControlTexture, this, "onscreen_control_base.png", 0, 0);
        mOnScreenControlKnobTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mOnScreenControlTexture, this, "onscreen_control_knob.png", 128, 0);
        mOnScreenControlTexture.load();
}

private void setAnalogControls() {
        analogOnScreenControl = new AnalogOnScreenControl(
                10, Constants.HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight() - 10, this.camera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, 200, this.getVertexBufferObjectManager(), new IAnalogOnScreenControlListener() {
                    @Override
                    public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
                        float velX = 0, velY = 0;
                        velX = pValueX;
                        velY = pValueY;
                        spaceShip.setVelocity(velX * 200, velY * 200);
                    }

                    @Override
                    public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
                    }
                });
        analogOnScreenControl.getControlBase().setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
        analogOnScreenControl.getControlBase().setAlpha(0.3f);
        analogOnScreenControl.getControlBase().setScaleCenter(0, 128);
        analogOnScreenControl.getControlBase().setScale(0.7f);
        analogOnScreenControl.getControlKnob().setAlpha(0.4f);
        analogOnScreenControl.getControlKnob().setScale(0.7f);
        analogOnScreenControl.refreshControlKnobPosition();

        hud.setChildScene(analogOnScreenControl);
}

public void loadLevel(int level) {
        try {
            final TMXLoader tmxLoader = new TMXLoader(activity.getAssets(),
                    this.engine.getTextureManager(),
                    TextureOptions.BILINEAR_PREMULTIPLYALPHA,
                    activity.getVertexBufferObjectManager());
            this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/lvl" + level
                    + ".tmx");
        } catch (final TMXLoadException e) {
            Debug.e(e);
        }

        final TMXLayer tmxLayer = this.mTMXTiledMap.getTMXLayers().get(0);
        mBoundChaseCamera.setBounds(0, 0, tmxLayer.getWidth(), tmxLayer.getHeight());
        mBoundChaseCamera.setBoundsEnabled(true);

        final Sprite invisibleSprite = new Sprite(0, 0, activity.getRegLifeLeft(), getVertexBufferObjectManager());
        invisibleSprite.setPosition((Constants.WIDTH - invisibleSprite.getWidth()) / 2, (Constants.HEIGHT - invisibleSprite.getHeight()) / 2);
        invisibleSprite.registerEntityModifier(new MoveXModifier(1000, invisibleSprite.getX(), tmxLayer.getWidth()));
        gameScene.attachChild(invisibleSprite);

        mBoundChaseCamera.setChaseEntity(invisibleSprite);
        gameScene.attachChild(tmxLayer);

        ArrayList<TMXObjectGroup> groups = mTMXTiledMap.getTMXObjectGroups();
        for (TMXObjectGroup group : groups) {
            if (group.getName().equals("enemies")) {
                ArrayList<TMXObject> enemies = group.getTMXObjects();
                int i = 0;
                for (TMXObject enemy : enemies) {
// DO SOMETHING
                }
            }
        }
}

private void startGame() {
                loadLevel(1);
}

@Override
public EngineOptions onCreateEngineOptions() {
        this.mBoundChaseCamera = new BoundCamera(0, 0, Constants.WIDTH, Constants.HEIGHT);
        camera = new Camera(0, 0, Constants.WIDTH, Constants.HEIGHT);
        EngineOptions en = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(Constants.WIDTH, Constants.HEIGHT), this.mBoundChaseCamera);

        return en;
}

@Override
protected void onCreateResources() {
        BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
        createControls();
}

@Override
protected Scene onCreateScene() {
        hud = new HUD();
        mainScene = new Scene();
        mainScene.setBackground(new Background(Color.BLACK));

        gameScene = new Scene();
        gameScene.setBackground(new Background(Color.BLACK));

        startGame();

        mBoundChaseCamera.setHUD(hud);

                mainScene.setChildScene(gameScene);

        return mainScene;
}

有人帮我吗?

0 个答案:

没有答案