3

Я перенес проект XNA в моно. Все работает нормально. Но я заметил, что телефон (HTC 8x) нагревается. игра native-XNA в отлаге работала нормально. Разрешение увеличилось (480x800 против 720x1280) и fps тоже (30 против 55). Есть ли рекомендации по оптимизации? Какие самые тяжелые операции? Моя игра - простой 2-й арканоид, и я не понимаю, что может нагревать телефон.Monogame (monoXNA) heats Телефон

+0

Это странно. Я прокомментировал все в методах обновления и рисования в основном классе. И ничего не изменилось. – vsesh

+0

Лучше всего запустить профайлер производительности над кодом. Возможно, попробуйте фиксированный шаг времени http://msdn.microsoft.com/en-us/library/bb203878.aspx – craftworkgames

+0

Я думаю, что по умолчанию XNA всегда обновляет экран x раз в секунду. (Я не помню точной скорости). Вы можете посмотреть на использование Game.SupressDraw, как это было предложено в принятом ответе на этот вопрос: [Как приостановить перерисовку в XNA?] (Http://stackoverflow.com/questions/16554717/how-do-i -pause-the-redraw-in-xna) Обратите внимание, что решение, отвечая на вопрос, на самом деле не помогло задающемуся вопросом. Это может или не поможет вам. –

ответ

2

Вы должны ограничить свою игру во всех устройствах для запуска с постоянной частотой кадров сделать это в XNA вам нужна линии:

TargetElapsedTime = TimeSpan.FromTicks(333333); //30 fps 
this.IsFixedTimeStep = true; 

ограничение фпс от 55 до 30 уменьшит загрузку процессора работу поэтому нет больше тепла,

и если это не поможет проверить, если некоторые фоновые потоки твой не делают некоторые интенсивные работы

+0

вы должны ТОЛЬКО делать то, что вы предложили, если пытаетесь создать игровой цикл с фиксированным шагом. В большинстве игр используется цикл с переменным шагом и, следовательно, не требуется «постоянная» частота кадров, потому что они хотят использовать аппаратное обеспечение и, если это возможно, работать с более плавным. Есть намного лучшие способы уменьшить нагрев, чем жестко ограничить ваш FPS. Я настоятельно рекомендую сделать больше исследований, прежде чем отвечать на такие вопросы. – Strifex

+0

@ Strife согласно msdn.microsoft.com: в игровом цикле с фиксированным шагом Game вызывает обновление после истечения времени TargetElapsedTime. После вызова Update, если не настало время снова вызвать Update, Game вызывает Draw. После того, как вызывается Draw, если не настало время снова вызвать обновление, Game простаивает, пока не наступит время для вызова Update. FixedTimeStep не влияет на ваш игровой процесс, и если есть намного лучшие способы, почему вы не опубликовали никакого ответа? – elios264

+0

Я не отправлял ответ, потому что правильный ответ заключается в том, что нам не нужно знать, почему его приложение нагревает телефон без его профилирования и нахождения области кода, которая, по-видимому, вызывает процессор и/или графический процессор для обработки так сильно. Для получения дополнительной информации о переменных шагах с переменными шагами см. Это обсуждение: http://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step – Strifex