2012-01-12 5 views
0

Android用の基本的な3Dゲームを作成し、HUDを追加します。私はこれをどのようにするべきですか? 3Dゲームの上にとどまるレイアウトを追加することは可能ですか、それともOpenGLでこれを行う必要がありますか?Android:OpenGL-ESゲーム(HUD)の画像

答えて

1

代表的な解決策は、3Dシーンを描画し、次に正射投影に切り替えて、OpenGLを使用してHUDをまだペイントすることです。 OpenGLキャンバスの上に普通のコンポーネントを配置すると、おそらく予測できない結果になります(ちらつきや目立たないことがあります)。

2

OpenGLレイアウトに1つまたは複数のレイアウトを追加することは可能です。これを行うには、RelativeLayoutから始める必要があります。 OpenGLとHudの両方のレイアウトが含まれています。宣言の順序は重要です(最初に宣言され、最初にレンダリングされます)。 Hudレイアウトの位置を変更するには、layout_margin属性を使用するか、フルオーバーレイの場合はmatch_parentを使用します。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <!-- START of OpenGL Layout --> 
    <LinearLayout 
     android:id="@+id/openGLLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginLeft="0dp" 
     android:layout_marginTop="0dp" > 
    </LinearLayout> 
    <!-- END of OpenGL Layout --> 

    <!-- START of HUD Layout --> 
    <LinearLayout 
     android:id="@+id/hudLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="50dp" 
     android:layout_marginTop="50dp"> 
     <TextView 
      android:id="@+id/hudText" 
      android:text="Hud Text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 
     </TextView> 
    </LinearLayout> 
    <!-- END of HUD Layout --> 

</RelativeLayout> 

この例では、OpenGLレイアウトはコンテナとして使用されるempy LinearLayoutです。私は、コードによって、このRelativeLayoutに私自身のGLSurfaceViewを追加します。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState) 

    setContentView(R.layout.main); 
    MyOpenGLSurfaceView view = new MyOpenGLSurfaceView(getApplication()); 
    LinearLayout openGLLayout = (LinearLayout)findViewById(R.id.openGLLayout); 
    openGLLayout.addView(mView); 
} 

私は確認のポップアップやコンテキストメニューを中心に、このメソッドを使用します。この方法で私はopenGLを使って自分のボタンを作成する必要はありません。

0

私は同じ問題を抱えていました。私は今、ほぼ1年間それを戦っていました。私は、XMLレイアウトを使用していないが、代わりにそのようなJavaでのビューを追加してい:addViewはそうのように呼び出すに私が得た

rel.addView(camPreview, camParams); 
rel.addView(glView, glParams); 
rel.addView(imageView, imageParams); 

1の提案は、zインデックスのparamを追加しました:

rel.addView(camPreview, 0, camParams); 
rel.addView(glView, 1, glParams); 
rel.addView(imageView, 2, imageParams); 

それは、私も、私は解決策だった最後に

を望んでXMLレイアウトに切り替えてみましたが、まだない

を仕事のどちらか。..しませんでした:

glView.setZOrderMediaOverlay(true); 
rel.addView(camPreview, camParams); 
rel.addView(glView, glParams); 
rel.addView(imageView, imageParams); 

注:setZOrderMediaOverlay(真)は、あなたが実際に

はそれを試してみて、それがあなたのために働くなら、私に知らせてビューを追加する前に呼び出す必要があります。

関連する問題