2

私は自分のゲームの背景を作成して、あるものが他のものよりも遠いという印象を与えるようにしています。だから私は空、太陽、いくつかの雲と地面を持っているとしましょう。空と太陽が最も遠く、真ん中に雲があり、地面が正面にあります。プレーヤーがカメラをズームまたはパンする場合、近くのレイヤーよりも遠くのレイヤーの移動を少なくして、実際に遠くにあるような印象を与えます(地面の動きが最も多く、雲の動きが少なく、太陽の動きがほとんどありません)自動視差の動作と同じですが、静的な背景であるため、プレーヤーがズームインまたはズームアウトしない限り、通常は何も動きません。

この概念は、ゲームプレイオブジェクト(鳥、豚、ブロックなど)を使用して怒っている鳥に実装され、地面が正面にあり、山の層が中央にあり、空と雲が最も遠いです。

今、私が達成しようとしていることを理解している場合は、それを実行する方法を教えてください。過去数日間、私は夢中になり、まだそれを実装するための概念を置くことさえできませんでした。どんなコードも素晴らしいでしょう。

4

1 に答える 1

9

このような目的で Andengine を使用することもできます:
http://www.youtube.com/watch?v=ug5vfys6MIA

参照: http://www.andengine.org/forums/features/parallaxlayer-t5390.html

そのような効果を実現するのは非常に簡単です。以下に例を示します。

@Override
    public void onLoadResources() {
        BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

        this.mBitmapTextureAtlas = new BitmapTextureAtlas(256, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
        this.mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "player.png", 0, 0, 3, 4);
        this.mEnemyTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "enemy.png", 73, 0, 3, 4);

        this.mAutoParallaxBackgroundTexture = new BitmapTextureAtlas(1024, 1024, TextureOptions.DEFAULT);
        this.mParallaxLayerFront = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "parallax_background_layer_front.png", 0, 0);
        this.mParallaxLayerBack = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "parallax_background_layer_back.png", 0, 188);
        this.mParallaxLayerMid = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "parallax_background_layer_mid.png", 0, 669);

        this.mEngine.getTextureManager().loadTextures(this.mBitmapTextureAtlas, this.mAutoParallaxBackgroundTexture);
    }

    @Override
    public Scene onLoadScene() {
        this.mEngine.registerUpdateHandler(new FPSLogger());

        final Scene scene = new Scene();
        final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(0, 0, 0, 5);
        autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(0.0f, new Sprite(0, CAMERA_HEIGHT - this.mParallaxLayerBack.getHeight(), this.mParallaxLayerBack)));
        autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(-5.0f, new Sprite(0, 80, this.mParallaxLayerMid)));
        autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(-10.0f, new Sprite(0, CAMERA_HEIGHT - this.mParallaxLayerFront.getHeight(), this.mParallaxLayerFront)));
        scene.setBackground(autoParallaxBackground);

        /*
         * Calculate the coordinates for the face, so its centered on the camera.
         */
        final int playerX = (CAMERA_WIDTH - this.mPlayerTextureRegion.getTileWidth()) / 2;
        final int playerY = CAMERA_HEIGHT - this.mPlayerTextureRegion.getTileHeight() - 5;

        /* Create two sprits and add it to the scene. */
        final AnimatedSprite player = new AnimatedSprite(playerX, playerY, this.mPlayerTextureRegion);
        player.setScaleCenterY(this.mPlayerTextureRegion.getTileHeight());
        player.setScale(2);
        player.animate(new long[] { 200, 200, 200 }, 3, 5, true);

        final AnimatedSprite enemy = new AnimatedSprite(playerX - 80, playerY, this.mEnemyTextureRegion);
        enemy.setScaleCenterY(this.mEnemyTextureRegion.getTileHeight());
        enemy.setScale(2);
        enemy.animate(new long[] { 200, 200, 200 }, 3, 5, true);

        scene.attachChild(player);
        scene.attachChild(enemy);

        return scene;
    }
于 2012-05-29T11:18:41.313 に答える