2012-02-13 148 views
1

我很难让追逐相机跟随车身。我正在修改赛车游戏示例项目。瓷砖地图是1024 x 786,相机设置为追逐车身。下面的代码:AndEngine Chase相机不关注机身

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

} 

回答

2

问题的一个可能的原因是,你的相机尺寸为1024x786过,因此显示的所有相机矩形,因为你启用界限,相机不遵循汽车。

省略线this.mBoundChaseCamera.setBoundsEnabled(true);

另一个问题是 - 相机跟随player对象,一旦执行完onCreateScene就失去参考。您没有将player对象连接到使用PhysicsConnector类的物理机构,因此它没有理由移动。

否则如果车身&实体在initCar方法创建的,你是不是设置了汽车作为追逐实体。

+0

是的,显然我没有将物理体连接到玩家对象。它现在很好用。谢谢 – 2012-02-14 01:15:49

+0

Chase Camera是否仅适用于TMXTiledMap?我试图设置追逐实体,但没有成功。 – Dharmendra 2012-08-15 10:19:48