Камера AndEngine Chase не следует за телом

Мне трудно заставить камеру преследования следить за кузовом машины. Я работаю над примером проекта Racer Game. Карта плитки имеет разрешение 1024 x 786, а камера настроена на погоню за кузовом автомобиля. Вот код:

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

        this.mScene = new Scene();
        //this.mScene.setBackground(new Background(0, 0, 0));

        /** Tiled Map Test **/
        try {
            final TMXLoader tmxLoader = new TMXLoader(this.getAssets(), this.mEngine.getTextureManager(), TextureOptions.BILINEAR_PREMULTIPLYALPHA, 
                    this.getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
                @Override
                public void onTMXTileWithPropertiesCreated(final TMXTiledMap pTMXTiledMap, final TMXLayer pTMXLayer, final TMXTile pTMXTile, 
                        final TMXProperties<TMXTileProperty> pTMXTileProperties) {
                    /* We are going to count the tiles that have the property "box=true" or "boxBool=true" set. */
                    if(pTMXTileProperties.containsTMXProperty("box", "true")) {
                        SpeedsterGameActivity.this.numBoxes++;
                    }
                }
            });
            // Load the TMX file into an Object
            this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/level3.tmx");

            this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText( SpeedsterGameActivity.this, "Box count in this TMXTiledMap: " + SpeedsterGameActivity.this.numBoxes, Toast.LENGTH_LONG).show();
                }
            });
        } catch (final TMXLoadException e) {
            Debug.e(e);
        }

        // Get the first TMX Layer and add it to the scene
        final TMXLayer tmxLayer = this.mTMXTiledMap.getTMXLayers().get(0);
        this.mScene.attachChild(tmxLayer);

        /* Make the camera not exceed the bounds of the TMXEntity. */
        this.mBoundChaseCamera.setBounds(0, 0, tmxLayer.getHeight(), tmxLayer.getWidth());
        this.mBoundChaseCamera.setBoundsEnabled(true);

        /* Debugging stuff */
        Debug.i( "Game Info", "Height & Width: " + tmxLayer.getHeight() + " x " + tmxLayer.getWidth() );

        int[] maxTextureSize = new int[1];
        GLES20.glGetIntegerv( GLES20.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0);
        Debug.i("Game Info", "Max texture size = " + maxTextureSize[0]);
        /**********/

        /* Calculate the coordinates for the face, so its centered on the camera. */
        final float centerX = (CAMERA_WIDTH - this.mVehiclesTextureRegion.getWidth()) / 2;
        final float centerY = (CAMERA_HEIGHT - this.mVehiclesTextureRegion.getHeight()) / 2;

        /* Create the sprite and add it to the scene. */
        final AnimatedSprite player = new AnimatedSprite(centerX, centerY, this.mVehiclesTextureRegion, this.getVertexBufferObjectManager());
        this.mBoundChaseCamera.setChaseEntity(player);
        /********************/

        this.mPhysicsWorld = new FixedStepPhysicsWorld(30, new Vector2(0, 0), false, 8, 1);

        //this.initRacetrack();
        //this.initRacetrackBorders();

        this.initCar();
        this.initObstacles();
        this.initOnScreenControls();

        this.mScene.registerUpdateHandler(this.mPhysicsWorld);

}

person Free Lancer    schedule 13.02.2012    source источник


Ответы (1)


Возможная причина проблемы заключается в том, что размер вашей камеры тоже 1024x786, поэтому отображается полный прямоугольник камеры, и, поскольку вы включили границы, камера не следует за автомобилем.

Опустите строку this.mBoundChaseCamera.setBoundsEnabled(true);.

Другая проблема заключается в том, что камера следует за объектом player, на который вы теряете ссылку после завершения выполнения onCreateScene. Вы не подключаете объект player к физическому телу с помощью класса PhysicsConnector, поэтому у него нет причин для перемещения.

Иначе если кузов автомобиля и объект созданы initCarметодом, вы не устанавливаете автомобиль в качестве объекта погони.

person Jong    schedule 13.02.2012
comment
Да, видимо, я не подключил физическое тело к объекту игрока. Теперь он отлично работает. Спасибо - person Free Lancer; 14.02.2012
comment
Камера Chase работает только с TMXTiledMap? Я пытаюсь установить объект погони, но не добиваюсь успеха. - person Dharmendra; 15.08.2012