2012-02-13 5 views
1

チェースカメラを車体に追従させるのに苦労しています。私はRacer Gameのサンプルプロジェクトを改造しています。タイルマップは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);を省略してください。

もう1つの問題は、onCreateSceneの実行が終了すると、カメラが参照を失ったplayerオブジェクトに続きます。 PhysicsConnectorクラスを使用してplayerオブジェクトをフィジックスボディに接続していないため、移動する必要はありません。

は、そうでない場合車体&実体場合は、追跡エンティティとして車を設定していない、initCar方法で作成されます。

+0

はい、明らかに私は物理オブジェクトをプレーヤーオブジェクトに接続していませんでした。今は素晴らしい作品です。ありがとうございます –

+0

チェースカメラはTMXTiledMapでのみ動作しますか?私は追跡エンティティを設定しようとしていますが、成功は得られません。 – Dharmendra

関連する問題