2012-01-12 2 views
0

Android 용 기본 3D 게임을 만들었으며 HUD를 추가하고 싶습니다. 어떻게해야합니까? 3D 게임 위에 배치 된 레이아웃을 추가 할 수 있습니까, 아니면 OpenGL을 사용하여이 작업을 수행해야합니까?Android : OpenGL-ES 게임 (HUD) 이미지

답변

1

일반적인 해결 방법은 3D 장면을 그 다음 직각 투영으로 전환하고 OpenGL을 사용하여 HUD를 계속 칠하는 것입니다. OpenGL 캔버스 위에 일반 구성 요소를 배치하면 예기치 않은 결과가 발생할 수 있습니다 (깜박이거나 단순히 보이지 않을 수도 있음).

2

하나 이상의 레이아웃을 OpenGL 레이아웃에 추가 할 수 있습니다. 이렇게하려면 RelativeLayout으로 시작해야합니다. OpenGL과 Hud Layout을 모두 포함합니다. 선언 순서는 중요합니다 (첫 번째 선언, 첫 번째 렌더링). 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 레이아웃을 사용하지 않은, 대신과 같이 자바에서보기를 추가하고 다음 addView가과 같이 호출에 내가 가진

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

하나의 제안 AZ 인덱스 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 (참)은 실제로보기

그것을 시도하고 당신을 위해 작동하는지 알려 주시기를 추가하기 전에 호출 할 필요가있다.