在andengine中停止并启动自动视差背景

时间:2014-03-05 17:18:55

标签: android

我是android开发的新手,我想知道如何启动和停止自动视差背景? 我在屏幕上有两个按钮,下一个和上一个,我想停止并按下按钮点击视差。 我正在做这样的事情:

    autoParallaxBackground = new AutoParallaxBackground(0, 0, 0, 5);

    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(-10.0f, new Sprite(0, CAMERA_HEIGHT - this.backgroundAtlasRegion.getHeight(), this.backgroundAtlasRegion)));
    scene.setBackground(autoParallaxBackground);

    scene.setOnAreaTouchListener(new IOnAreaTouchListener() {
        @Override
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                ITouchArea pTouchArea, float pTouchAreaLocalX,
                float pTouchAreaLocalY) 
        {

            if(pSceneTouchEvent.isActionUp())
            {
                autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(0.0f, new Sprite(0, CAMERA_HEIGHT - backgroundAtlasRegion.getHeight(), backgroundAtlasRegion)));

                if(pTouchArea == ForwardSprite)
                    if(pTouchArea == backSprite)
                    return true;
            }
            if(pSceneTouchEvent.isActionMove()) {

                if(pTouchArea == ForwardSprite)
                {
                    player.animate(new long[]{200, 200, 200}, 3, 5, true);
                    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(-10.0f, new Sprite(0, CAMERA_HEIGHT - backgroundAtlasRegion.getHeight(), backgroundAtlasRegion)));

                    //backgroundSprite.setPosition(backgroundSprite.getX()-5, backgroundSprite.getY());
                }
                if(pTouchArea == backSprite)
                {
                    player.animate(new long[]{200, 200, 200}, 9, 11, true);
                    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(10.0f, new Sprite(0, CAMERA_HEIGHT - backgroundAtlasRegion.getHeight(), backgroundAtlasRegion)));

                    //backgroundSprite.setPosition(backgroundSprite.getX()+5, backgroundSprite.getY());
                }
                return true;
            }
            return false;
        }
    });

1 个答案:

答案 0 :(得分:2)

不幸的是AndEngine没有提供启动和停止autoParallaxBackground的功能。但是,您可以通过在AndEngine的AutoParallaxBackground类中添加几行代码来克服它。 (更好的方法是在你自己的项目中扩展该类)

package org.andengine.entity.scene.background;



/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 19:44:31 - 19.07.2010
*/
public class AutoParallaxBackground extends ParallaxBackground {
// ===========================================================
// Constants
// ===========================================================

// ===========================================================
// Fields
// ===========================================================

private float mParallaxChangePerSecond;
private boolean moving;

// ===========================================================
// Constructors
// ===========================================================

public AutoParallaxBackground(final float pRed, final float pGreen, final float pBlue, final float pParallaxChangePerSecond) {
super(pRed, pGreen, pBlue);
this.mParallaxChangePerSecond = pParallaxChangePerSecond;
}

// ===========================================================
// Getter & Setter
// ===========================================================

public void setParallaxChangePerSecond(final float pParallaxChangePerSecond) {
this.mParallaxChangePerSecond = pParallaxChangePerSecond;
}

// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================

@Override
public void onUpdate(final float pSecondsElapsed) {
super.onUpdate(pSecondsElapsed);
if(moving)
    this.mParallaxValue += this.mParallaxChangePerSecond * pSecondsElapsed;
}

// ===========================================================
// Methods
// ===========================================================
public void start(){
    this.moving = true;
}

public void stop(){
    this.moving = false;
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}

该行:

this.mParallaxValue += this.mParallaxChangePerSecond * pSecondsElapsed;

负责移动背景。它在onUpdate方法中使用,因此您可以通过布尔标志轻松阻止和取消阻止它。我试图分别开始和停止每一层,但它是更大更复杂的任务。