2011-12-10 28 views
2

私はアンドロイドキャンバスを使って作成したライブ壁紙を持っています。テストの結果、OpenGLのパワーを活用する必要があると感じ、AndEngineを実験しています。私は次のことをどのように達成できるのだろうかと思います。AndEngine更新画面

@Override 
public void onLoadResources() 
{ 
    mtexture = new Texture(1024, 1024, TextureOptions.BILINEAR); 
    TextureRegionFactory.setAssetBasePath("gfx/"); 
    mtextureRegion = TextureRegionFactory.createFromResource(mtexture , this, R.drawable.background1, 0, 0); 
    this.mEngine.getTextureManager().loadTexture(this.mtexture); 
} 

@Override 
public Scene onLoadScene(){ 
    final Scene scene = new Scene(1); 

    Sprite background = new Sprite(0, 0, CAMERA_WIDTH*2, CAMERA_HEIGHT, mtextureRegion) 
    SpriteBackground sb = new SpriteBackground(background); 
    scene.setBackground(sb); 
    scene.setBackgroundEnabled(true); 
    return scene; 
} 

これを:

は私がトップ(ないアニメーションの動き)

は、これまでのところ私は、背景イメージのためにこれを持っている上、フローティング多くの小さなビットマップと、画面全体を埋める背景イメージを持っていますバックグラウンドでうまく動作しますが、スプライトを動かす必要があります。私のキャンバスコードで

、私はすべての数ms

 private final Runnable drawScreen = new Runnable() { 
     public void run() { 
      drawFrame(); 
     }}; 

位置に移動する物体の&物理学を更新し、キャンバスを描画するために、次のん - 適切な方法は何

void drawFrame() { 
     final SurfaceHolder holder = getSurfaceHolder(); 

     Canvas c = null; 
     try { 
      c = holder.lockCanvas(); 
      if (c != null) { 
        //draw 
      } 
     } finally { 
      if (c != null) holder.unlockCanvasAndPost(c); 
     } 

     mHandler.removeCallbacks(drawScreen); 
     mHandler.postDelayed(drawScreen, 10); 
    } 

をAndEngineでこれをするには?私は同じコードを使用してOpenGL呼び出しを代用するのですか?

私はGLEngineを見ましたが、GlThreadキューにRunnablesを送信するはずですか?

EDIT - 私は答えを見つけたと思います... UpdateHandler。しかし、どのようにして更新プログラムのハンドラに通知することができますか(つまり、onUpdateメソッドを呼び出す)。時限ハンドラを作成すると、あまりにも頻繁に呼び出すとどうなりますか?リクエストのキューが増えますか?

答えて

3

まず、コンストラクタScene(int)を使用しないでください。廃止予定です。代わりにScene()を使用してください。

正しい場合は、更新ハンドラを使用する必要があります。 あなたがUpdateHandlerを作成し、あなたのシーンにそれを登録することができます

scene.registerUpdateHandler(mUpdateHandler); 

この方法は、mUpdateHandler.onUpdateメソッド内のコードは、毎回シーンの更新が実行される(各フレームを。)。 を手動で呼び出さないでください。あなたはそれを停止したい場合は、呼び出し:

scene.unregisterUpdateHandler(mUpdateHandler); 

をので、onUpdateメソッドは常にUpdateThreadで実行あるので、あなたはあなたがそこに希望のエンティティへの変更を行うことができますことを確認することができます。だからあなたは、あなたが欲しいものなどの周りを移動することができます。

ちなみに、なぜ背景の幅はCAMERA_WIDTH*2ですか?つまり、スプライトの左半分だけが表示されます。カメラを動かす予定がない場合、右半分は表示されません。

関連する問題