Игра не моя, это Alawar, но она мне очень нравится, хочу исправить проблему (ilasm и т.п.)
XNA 4.0.
Еще какая-то непонятная библиотека ProjectMercury.
Симптомы:
Захожу в уровень, играю, вдруг через некоторое время картинка перестает обновляться, звук продолжает проигрываться, на Alt+F4 не реагирует, после Ctrl-Alt-Del окно игры становится серым, с помощью панели задач закрыть окно не получается, окно диспетчера задач не может выйти на передний план, зависшая игра его заслоняет, приходится с помощью эскизов в панели задач и клавиш-стрелок выбирать нужный процесс и завершать.
Никакой связи с конкретными уровнями или действиями в игре, чтобы зависание происходило при появлении конкретных спрайтов, скажем диалогов и т.д. - не наблюдается, зависало в самые разные моменты, даже на первом уровне, то есть проблема видимо в самом game loop (tick).
Но зависало всегда только в уровнях, то есть там где идут ресурсоемкие процессы, отсюда и подозрение, что процессор недостаточно быстро обрабатывает какие-то действия, а в XNA или же игре что-то "криво", отсюда и зависание.
Запустить под отладчиком пока не получилось, по отладке .NET я пока не спец, Mdbg выводит ошибку вроде:
(0x8013134B): Протокол отладчика несовместим с отлаживаемой программой. (Исключение из HRESULT: 0x8013134B)
Это что-то связанное с COM, странно, архитектура соответствует, и у отладчика и у EXE - x86.
И по-видимому это не Exception, так как вокруг RunGame (или вроде того, в общем в методах "верхнего уровня") стоит
try-catch
, который все исключения отображает в WinForms'овский MessageBox, а я ни разу не видел чтобы он появлялся, ну разве что если он заслонен тем же окном?
Вы сталкивались с такими проблемами в самом XNA или каких-то библиотеках?
Или это "косяк" самой игры?
P.S.
В другой игре, на другом "движке" - Unity3D, я тоже подобную проблему видел, симптомы схожие, странно.
С нативными играми никогда не было такого.
Есть подозрение, что это Alawar хитро встраивает свою DRM, игру я запускаю вне его wrapper'а в котором 30-минутный trial, на первый взгляд обойти trial довольно просто, - аргументы командной строки, но может они воспользовались особенностями MSIL и "пропатчили по полной"?
Ну ОК, коллеги, я сдаюсь, готов оплатить вашу игру если это так, но вдруг не так, тогда зачем же мне такой продукт оплачивать? :)