XNA — метод обновления против метода рисования

Мне очень интересно узнать, что, если я помещу всю логику анимации/движения спрайтов в метод Draw вместо метода Update, а метод обновления будет просто управлять касанием и другими событиями. 1) есть проблемы с производительностью игровой анимации/логики?
2) не будет ли игровой экран работать так, как ожидалось?


person Yogesh    schedule 06.12.2012    source источник


Ответы (1)


В основном существует одно большое различие между методами рисования и обновления. Метод отрисовки работает в циклах с производительностью машины, поэтому, если компьютер медленный, вы можете получить 30 циклов в секунду, если компьютер имеет низкую производительность. Это также означает, что циклы не фиксированы, поэтому в одну секунду вы можете получить 30 циклов от метода рисования, а в следующий раз вы можете получить 40.

Вместо этого метод обновления имеет фиксированное количество циклов, поэтому это означает, что игровой процесс не будет замедляться только потому, что компьютер тормозит.

Не проблема поместить логику анимации спрайтов внутрь метода отрисовки. Это будет просто означать, что анимация будет работать со скоростью, с которой машина может справиться. Однако, если анимация влияет на другую логику непосредственно в игре, я бы рекомендовал выкладывать код в ветку обновления.

person Frozendragon    schedule 06.12.2012
comment
в этом случае (30 кадров в секунду или 40 кадров в секунду и без методов синхронизации ч / б), если мне нужно, чтобы 1 к 1 выполнялось между обновлением и отрисовкой, что можно сделать? - person Yogesh; 06.12.2012
comment
@Yogesh попробуйте переместить весь код рисования в метод обновления, хотя это необычно и не рекомендуется. - person user1306322; 06.12.2012
comment
@Yogesh Draw всегда будет работать в соотношении 1:1 с вашим методом Update, если только вы не начнете пропускать кадры (в конфигурации по умолчанию). Как правило, ваша логика должна быть достаточно гибкой, чтобы справиться с тем, что Draw не вызывается. - person Andrew Russell; 07.12.2012