2012-01-09 7 views
3

私はこのメソッドをAndengineで使用して、カメラのオフセットを設定してアイテムのリストをスクロールします。AndEngineカメラのオフセットと2つのシーン

@Override 
     public void onScroll(ScrollDetector pScollDetector, int pPointerID, 
       float pDistanceX, float pDistanceY) { 
      //Disable the menu arrows left and right (15px padding) 
      if(mCamera.getXMin()<=15) 
       menuleft.setVisible(false); 
      else 
       menuleft.setVisible(true); 

      if(mCamera.getXMin()>mMaxX-15) 
       menuright.setVisible(false); 
      else 
       menuright.setVisible(true); 

      //Return if ends are reached 
      if (((mCurrentX - pDistanceX) < mMinX) ){     
       return; 
      }else if((mCurrentX - pDistanceX) > mMaxX){ 

       return; 
      } 

      //Center camera to the current point 
      this.mCamera.offsetCenter(-pDistanceX,0); 
      mCurrentX -= pDistanceX; 


      //Set the scrollbar with the camera 
      float tempX =mCamera.getCenterX()-CAMERA_WIDTH/2; 
      // add the % part to the position 
      tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH;  
      //set the position 
      //scrollBar.setPosition(tempX, scrollBar.getY()); 

      //set the arrows for left and right 
      menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); 
      menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); 



      //Because Camera can have negativ X values, so set to 0 
      if(this.mCamera.getXMin()<0){ 
       this.mCamera.offsetCenter(0,0); 
       mCurrentX=0; 
      } 


     } 

問題は、私が戻って最初のアクティビティに移動するとき だから最初のシーンがあるため、カメラが移動されるの位置から外れている、私は活動中の私の2番目のシーンとしてこれを使用することです。

最初のシーンに戻るときにカメラをリセットすることはできますか?

私はCamer.reset()を無駄にしようとしました。

提案がありますか?

答えて

8

mCamera.setCenter(CAMERA_WIDTH/2, CAMERA_HEIGHT/2);を使用してください。カメラの位置がリセットされます。

ちなみに、カメラの位置に合わせてメニューの矢印を変更しています。 AndEngineには、このケースを扱うクラスがあります:)手動で行う必要はありません。 といい、Head-Up Displayを意味します。 HUD classを拡張することができます.HUDは画面上の定位置に置かれた単なるシーンです。必要な数だけエンティティを追加することができます。その後、mCamera.setHUD(Your HUD object here);に電話すると、完了します。移動するエンティティをカメラの向こう側に置く必要はありません。

私が見る別の問題はmCamera.offsetCenter(0, 0);です。 offsetCenterは、単に現在の中心座標にパラメータを追加します。 0にははありません。には全く影響がないので、この呼び出しは役に立たないです。あなたは何を達成しようとしていますか?カメラを(0、0)にリセットしますか?

編集:ここでは

は自分のゲームからHUDの例です:

public class AttackControl extends HUD { 
// =========================================================== 
// Constants   
// =========================================================== 

// ===========================================================   
// Fields   
// =========================================================== 
private Sprite mSprite; 
private IAttackControlClickListener mListener; 
// ===========================================================   
// Constructors   
// =========================================================== 
public AttackControl(final float pX, final float pY, final Camera pCamera, final TextureRegion pTextureRegion, final IAttackControlClickListener pListener) { 
    super.setCamera(pCamera); 
    this.mListener = pListener; 
    this.mSprite = new Sprite(pX, pY, pTextureRegion) { 
     @Override 
     public boolean onAreaTouched(final TouchEvent pTouchEvent, final float pX, final float pY) { 
      AttackControl.this.mListener.onClick(); 
      return true; 
     } 
    }; 
    super.attachChild(this.mSprite); 
    super.registerTouchArea(this.mSprite); 
} 
// ===========================================================   
// Getter & Setter   
// =========================================================== 

// ===========================================================   
// Methods for/from SuperClass/Interfaces   
// =========================================================== 

// ===========================================================   
// Methods   
// =========================================================== 

// ===========================================================   
// Inner and Anonymous Classes   
// =========================================================== 
public interface IAttackControlClickListener { 
    public void onClick(); 
} 
} 

その後、あなたは、このクラスのインスタンスを作成します。

final AttackControl attackControl = new AttackControl(...); 

ととして設定カメラのHUD:

あなたがHUDとして1を設定し、あなたが1以上HUDを使用したいどのような場合には

、その後、次のものが最初に自分の子シーンも作ります。例えば、私は別のHUDを持っている場合は、DisplayStatsと呼ばれ、私はそれをこのように作成しました:

final DisplayStats displayStats = new DisplayStats(...); 

すると、ちょうど攻撃コントロールの子シーンとして設定します。覚えておいてください - HUDシーンです!ここではすべてのシーン操作が有効です。

attackControl.setChildScene(displayStats); 

そして今、次のHUDは、その上displayStatsの子シーンも...とができます。

+0

ありがとうございました。私はここから得た例を使用しています。http://www.andengine.org/forums/post25398.html?hilit=MenuItems#p25398コードがHUDをどのように探すのでしょうか?これは初めての使用です –

+0

また、mCamera.setCenter(0,0);場面は画面からハングインです。 –

+1

私はあなたの事例を後で作っていくつもりです。カメラについては、 'mCamera.setCenter(CAMERA_WIDTH/2、CAMERA_HEIGHT/2);を試してみてください。これがうまくいかない場合は、最初のシーンを終了するときにカメラの位置を保存するだけです。 – Jong

0

はケースで誰もが将来的にこれを発見し、他の答えは十分ではありません、これを試してみてください。

mCamera.setZoomFactor(1.0f); 

これは、ZoomCameraを使用している場合に必要です。私はこれをやっていたので、ズームインしてシーンを切り替えると、ズームファクタが調整されていたため、すべてが乱れてしまいました。

+0

なぜdownvote?これは完全に必要であり、私のために働いた。 –

関連する問題