Странные проблемы заикания, не связанные с GC - PullRequest
0 голосов
/ 22 декабря 2010

У меня возникают странные проблемы с заиканием в моей игре, хотя мой FPS никогда не падает ниже 30. Примерно каждые 5 секунд моя игра заикается.Из-за проблем со сборкой мусора у меня изначально возникало заикание каждые 1-2 секунды, но я их уже разобрал и часто буду обходиться без сборки мусора 15-20 секунд.

Несмотря на это, моя игра периодически даже заикаетсякогда GC не указан в logcat где-нибудь рядом с заиканием.Даже когда я вынимаю большую часть своего кода и просто делаю код «физики» из приведенного ниже кода, у меня возникает эта странная проблема замедления.Я чувствую, что что-то упускаю или что-то упускаю.

Разве этот "истекший" код, который я вставил, не останавливает никаких различий в скорости главного героя, связанных с изменениями в FPS?* Любые входные данные / теории были бы потрясающими.

Физика:

private void updatePhysics()
{
    //get current time
    long now = System.currentTimeMillis();

    //added this to see if I could speed it up, it made no difference
    Thread myThread = Thread.currentThread();
    myThread.setPriority(Thread.MAX_PRIORITY);

    //work out elapsed time since last frame in seconds
    double elapsed = (now - mLastTime2) / 1000.0;

    mLastTime2 = now;

    //measures FPS and displays in logcat once every 30 frames
    fps+=1/elapsed;
    fpscount+=1;

    if (fpscount==30)
    {
        fps=fps/fpscount;
        Log.i("myActivity","FPS: "+fps+" Touch: "+touch);
        fpscount=0;
    }

    //this should make the main character (theoretically) move upwards at a steady pace
    mY-=100*elapsed;

    //increase amount I translate the draw to = main characters Y 
    //location if the main character goes upwards
    if (mY<=viewY)
    {
        viewY=mY;
    }
}

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Попробуйте профилировать ваш код с помощью traceview .

1 голос
/ 22 декабря 2010

Попробуйте удалить вызов Log.i(), если вы этого еще не сделали!

Редактировать:

Либо удалите плавающую точку. elapsed не должно быть двойным, просто вместо этого сохраните целое число миллисекунд. Затем вы можете использовать mY-=100*elapsed/1000; в своих вычислениях движения и комментировать или удалять другие вычисления с плавающей запятой (fps, fpscount).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...