我目前正在寫一個遊戲,現在遇到了一個問題。android遊戲surfaceview與framelayout慢
在我的遊戲中,如果我在我的自定義surfaceview類上覆蓋framelayout,根據在framwlayout中放置多少個視圖窗口小部件,幀速率將下降。
我使用FrameLayout裏放置一些遊戲控制和點顯示textviews ..
我想過直接在gameloop的surfaceview實施控制,但基本上摧毀Android的UI組件的目的加必須移動XML才容易得多。
如何解決這個問題?
這裏是我的代碼: XML文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FrameLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.sora.game.npc.Panel
android:id="@+id/myview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<GridLayout
android:layout_width="wrap_content"
android:layout_height="179dp"
android:columnCount="8"
android:rowCount="5" android:layout_gravity="bottom|left" android:visibility="visible">
<Button
android:id="@+id/upleft"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_column="0"
android:layout_gravity="bottom|right"
android:layout_row="0"
android:text="↖" />
<Button
android:id="@+id/up"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="1"
android:layout_gravity="bottom"
android:layout_row="0"
android:text="↑" />
<Button
android:id="@+id/upright"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_column="2"
android:layout_columnSpan="4"
android:layout_gravity="bottom"
android:layout_row="0"
android:text="↗" />
<Button
android:id="@+id/left"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="0"
android:layout_gravity="bottom"
android:layout_row="1"
android:text="←" />
<Button
android:id="@+id/vdp"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="1"
android:layout_gravity="bottom"
android:layout_row="1"
android:text="⥁" />
<Button
android:id="@+id/right"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="2"
android:layout_columnSpan="4"
android:layout_gravity="left"
android:layout_row="1"
android:text="→" />
<Button
android:id="@+id/downleft"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_column="0"
android:layout_gravity="right"
android:layout_row="2"
android:text="↙" />
<Button
android:id="@+id/down"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_column="1"
android:layout_gravity="left"
android:layout_row="2"
android:text="↓" />
<Button
android:id="@+id/downright"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_column="2"
android:layout_columnSpan="4"
android:layout_gravity="left"
android:layout_row="2"
android:text="↘" />
<Space
android:layout_width="1dp"
android:layout_height="47dp"
android:layout_column="0"
android:layout_gravity="fill_horizontal"
android:layout_row="1" />
<Space
android:layout_width="61dp"
android:layout_height="1dp"
android:layout_column="1"
android:layout_gravity="fill_horizontal"
android:layout_row="0" />
<Space
android:layout_width="30dp"
android:layout_height="1dp"
android:layout_column="2"
android:layout_gravity="fill_horizontal"
android:layout_row="0" />
</GridLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawingCacheQuality="high"
android:visibility="visible" >
<TextView
android:id="@+id/life"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Life"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="Score"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/npcqt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="NPC quantity"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/strike"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/score"
android:layout_marginTop="67dp"
android:text="strike" />
<Button
android:id="@+id/fire"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="----Fire!----"/>
<Button
android:id="@+id/cycle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/strike"
android:text="cycle" />
</RelativeLayout>
</FrameLayout>
編輯:我做了一些實驗:
,如果我擴大我的自定義視圖面的大小,沒有UI部件都在上面(覆蓋)表面視圖,FPS的滯後和下降不會發生,這使我認爲問題是沒有渲染相關....
「這很可能是因爲將SurfaceViews與Android Widgets結合在一起被稱爲是昂貴的」真的嗎?我以前不知道! – tom91136 2012-04-14 15:32:53
我編輯了我的問題;我會馬上嘗試硬件加速! – tom91136 2012-04-14 15:36:01
不,硬件加速不起作用,它什麼都不做 – tom91136 2012-04-14 15:37:11