Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android游戏surfaceview框架布局缓慢_Android_User Interface_Surfaceview_Android Framelayout - Fatal编程技术网

android游戏surfaceview框架布局缓慢

android游戏surfaceview框架布局缓慢,android,user-interface,surfaceview,android-framelayout,Android,User Interface,Surfaceview,Android Framelayout,我目前正在写一个游戏,现在遇到了一个问题 在我的游戏中,如果我在自定义surfaceview类上覆盖一个framelayout,我的帧速率将根据framwlayout中放置的视图小部件的数量而下降 我正在使用framelayout来放置一些游戏控件和文本视图以进行点显示 我曾想过直接在gameloop中的surfaceview上实现这些控件,但这基本上破坏了Android UI小部件的用途,而且必须在XML上移动要容易得多 如何解决这个问题 这是我的密码: XML文件: <?xml ver

我目前正在写一个游戏,现在遇到了一个问题

在我的游戏中,如果我在自定义surfaceview类上覆盖一个framelayout,我的帧速率将根据framwlayout中放置的视图小部件的数量而下降

我正在使用framelayout来放置一些游戏控件和文本视图以进行点显示

我曾想过直接在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的延迟和下降,这使我认为问题与渲染无关……

我认为没有简单的解决方案。 为了确保我会首先使用TraceView检查性能瓶颈到底在哪里。
现在,如果这个瓶颈确实与Android小部件有关(很可能是因为将SurfaceView与Android小部件结合起来成本很高),那么您可以尝试这样做

    getWindow().setFormat(PixelFormat.RGB_565);
    holder.setFormat(PixelFormat.RGB_565);
这可能有助于曲面合成的性能,但会丢失alpha。还要确保精灵的格式相同。 如果这没有帮助,你要么需要使用更少的小部件,要么开始在画布上绘制你自己的小部件。但一定要检查游戏引擎,如。无需为基本任务重新发明轮子:-)

另一个想法是: 您是否看到所有设备或平板电脑上的性能问题?
根据我个人的经验,平板电脑对性能问题更为敏感,因为它们的像素数比gpu的能力要高。那么,您是否在manifest.xml中激活了硬件加速功能?

“很可能是因为将SurfaceView与Android小部件结合起来成本高昂”真的吗?我以前不知道!是,曲面视图绘制到单独的曲面上,因此系统需要进行额外的曲面合成。所以SurfaceView总是会有额外的开销。我还没有在平板电脑上尝试我的游戏,但在我的手机上(960*540),我可以在没有UI小部件的情况下获得55~60fps,在UI小部件的情况下获得14~19fps。。。。