AndEngine游戲開發經驗----ParallaxBackground

fmms 12年前發布 | 21K 次閱讀 AndEngine 游戲開發

開發者同學都希望能做出優秀的游戲,在2D游戲中,使用parallax背景可以讓單調的2D背景變得錯落有致,讓整個背景看起來更有立體的感覺,增強游戲體驗和代入感

每次拖動界面,分層背景中的每一層都會隨著屏幕一起移動,但是單位移動的速度確不同,這樣就可以營造出一種遠近背景錯落有致的視覺效果

經典案例:還是憤怒的小鳥。。。。

好吧,在AndEngine中只有一個AutoParallaxBackground的例子可看,但是這個例子中背景是一直在不停移動的,如果你想要手動控制背景移動的話,下面的例子可以幫你~

是我從國外的一個網站上面轉來的~希望能幫到像我一樣英語不好的童鞋們~

貼代碼

首先要創建一個ScrollableParallaxBackground的類,繼承自ParallaxBackground

public class ScrollableParallaxBackground extends ParallaxBackground {

private float cameraPreviousX;
private float cameraOffsetX;

private Camera camera;

public ScrollableParallaxBackground(float pRed, float pGreen, float pBlue, Camera camera) {
    super(pRed, pGreen, pBlue);
    // TODO Auto-generated constructor stub
    this.camera = camera;
    cameraPreviousX = camera.getCenterX();
}

public void updateScrollEvents() {
    if (cameraPreviousX != this.camera.getCenterX()) {
        cameraOffsetX = cameraPreviousX - this.camera.getCenterX();
        cameraPreviousX = this.camera.getCenterX();
    }
}

public void scroll(int OffsetValue)
{
    cameraOffsetX=OffsetValue;
}

@Override
public void onUpdate(float pSecondsElapsed) {
    super.onUpdate(pSecondsElapsed);

    this.mParallaxValue += (cameraOffsetX * 2) * pSecondsElapsed;
    cameraOffsetX = 0;
}

}</pre>

然后需要你在游戲的主場景中重寫以下方法

   @Override
    public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {

    if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) {
        mTouchX = pSceneTouchEvent.getMotionEvent().getX();

    } else if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE) {
        float newX = pSceneTouchEvent.getMotionEvent().getX(); 

        mTouchOffsetX = (newX - mTouchX);

        autoParallaxBackground.updateScrollEvents();

        float newScrollX = mZoomCamera.getCenterX() - mTouchOffsetX;

        mZoomCamera.setCenter(newScrollX, mZoomCamera.getCenterY());

        mTouchX = newX;
    }

    return true;
}</pre> 



以下是創建背景對象的實例

       autoParallaxBackground=new ScrollableParallaxBackground(0, 0, 0,Camera);

    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(25, backSprite));
    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(10, middleSprite));
    autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(15, frontSprite));

    Scene.setBackground(autoParallaxBackground);</pre> 


 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!