Free Lancer
Free Lancer

Reputation: 1000

AndEngine Chase Camera Not Following Body

I'm having a hard time making the chase camera follow the a car body. I am tinkering the Racer Game example project. The Tile Map is 1024 x 786 and the Camera is set to chase the Car Body. Here's the code:

@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);

}

Upvotes: 1

Views: 1606

Answers (1)

Jong
Jong

Reputation: 9125

A possible cause of the problem is that your camera size is 1024x786 too, therefore the full camera rectangle is shown and since you enabled bounds, the camera does not follow the car.

Omit the line this.mBoundChaseCamera.setBoundsEnabled(true);.

Another problem is - the camera follows the player object to which you lose the reference once onCreateScene finishes executing. You are not connecting the player object to a physics body using PhysicsConnector class, so it has no reason to move.

Otherwise if the car body & entity are created in initCarmethod, you are not setting the car as the chase entity.

Upvotes: 2

Related Questions