Большинство аспектов устройства XNA довольно подробно и доходчиво рассмотрено в поставляемой с продуктом документации. Наиболее важный аспект, который довольно хорошо описан – это порядок вызова методов основного игрового цикла. Но все равно некоторым трудно понять когда, почему и зачем происходит вызов Initialize(), LoadContent(), UnloadContent(), Update(GameTime) и Draw(GameTime).
Итак, давайте разбираться.
Выяснить в каком порядке происходит вызов довольно просто, создадим пустой проект, вызовем перегрузки всех доступных методов и расставим в теле вызовов следующий код:
System.Console.Out.WriteLine(”Initialized”);
Вместо «Initialized» пропишем имена методов в которые помещаем код. При запуске в консоли Output (Ctrl+Alt+O) вы должны наблюдать нечто подобное:
'DebugGame.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DebugGame.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DebugGame.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'DebugGame.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
1: Initialize()
2: LoadGraphicsContent(bool loadAllContent)
3: LoadContent()
4: Update(GameTime gameTime)
5: OnActivated(Object sender,EventArgs args) by DebugGame.Game1
6: Update(GameTime gameTime)
7: BeginDraw()
8: Draw(GameTime gameTime)
9: EndDraw()
10: Update(GameTime gameTime)
... Begin Draw, End Draw & Update repeats here
111: OnDeactivated(Object sender,EventArgs args) by DebugGame.Game1
112: OnExiting(Object sender,EventArgs args) by DebugGame.Game1
113: EndRun()
114: Dispose(bool disposing)
115: UnloadContent()
The program '[6008] DebugGame.exe: Managed' has exited with code 0 (0x0).
Вот и проявился весь порядок вызовов методов основного игрового цикла.
Как Вы можете заметить, метод Update при запуске вызывается дважды, что является довольно неожиданным.
932 Прочтений • [Понимание основного игрового цикла XNA] [08.08.2012] [Комментариев: 0]