gpt4 book ai didi

java - 动画断断续续,更新频率不高

转载 作者:行者123 更新时间:2023-12-02 06:42:51 24 4
gpt4 key购买 nike

我正在尝试完成折线收缩的简单动画。我正在访问加速度计 X 值,将其添加到点数组/列表中,然后更新所有这些点的 x 坐标。这是一张图:

enter image description here

举例来说,我的 SCREEN_WIDTH 是 800 像素。

第 1 步:我添加新点 A = (0, 9.43634),没有绘制任何内容,因为我至少需要 2 个点

points[(0, 9.43634)];

第 2 步:我添加另一个点 B = (0, 7.23134)。我重新计算新的 X 值,然后使用这些点绘制折线:

points[(0, 9.43634), (800, 7.23134)];

第 3 步:我添加另一个点 C = (0, 8.251251)。我重新计算 X 值,然后使用这些点绘制折线:

points[(0, 9.43634), (400, 7.23134), (800, 8.251251)];

第 4 步: ...

我的问题是动画不流畅。当我将要添加的最大点数设置为 ~100 时,它似乎会跳帧。看起来动画不是在添加单个点后刷新,而是在添加几个点后刷新。

我尝试过使用数组而不是 ArrayList 来避免垃圾收集,我尝试过限制动画速度等,但没有任何效果。

计算新的 x 值并使用 100 多个点绘制折线会很慢吗?我还尝试在相邻点之间绘制线条,但性能是相同的。

如果重要的话,我正在 Samsung Galaxy S2 上进行测试。

太糟糕了,我无法在这里发布它的动画,但这里是所有必要的代码:

来自加速度计测试项目的 Accelerometer_Test.java:

I've pasted it here because it is too long in my opinion

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gurniak.accelerometer.test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:allowBackup="true" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

来自 accelerometer-test-android 项目的 MainActivity.java:

package com.gurniak.accelerometer.test;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import android.util.Log;

public class MainActivity extends AndroidApplication {

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

AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
cfg.useAccelerometer = true;
cfg.useCompass = false;
cfg.useWakelock = true;

initialize(new Accelerometer_Test(), cfg);
}
}

我的问题是:如何加快动画速度并使其更加流畅?我希望它能够快速更新(每个 ~20[ms] 就完美了)并且在将每个点添加到 pointsX 后。我在这里做了一些非常愚蠢的事情吗?我在 logcat 中反复看到 GC_CONCURRENT FREED,即使在达到 MAX_NUM_POINTS 限制后未添加新点。最后,如果重新计算新的 x 值实际上对性能不利,是否有任何算法可以更快地重新计算它?

最佳答案

使用分析器或检测您的代码来查看时间都花在哪里了。 Android DDMS tools非常适合跟踪分配情况。

渲染中的打嗝通常是由垃圾收集引起的,这是由于在渲染循环中分配“太多”(即几乎所有东西)引起的,所以这就是我要开始的地方。但是,在尝试优化代码时,您应该找到并遵循实际的硬数据。如果与分配相关,请尝试在 create 中预分配所有“点”Vector2 对象。

关于java - 动画断断续续,更新频率不高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18955001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com