Ну вот и всё. XNA мертво: тут
А очередное обновление интерфейса блоггера превратило его в говно какие то.
Ну вот и всё. XNA мертво: тут
А очередное обновление интерфейса блоггера превратило его в говно какие то.
Итак, задача. У нас есть куча эффектов с разными параметрами. Надо в них загнать данные, много, разных. И надо чтобы всё было в более-менее одном месте. Тут вылезает чудная возможность C#, в C++ отсутствующая. Мы можем на ходу спросить объект "ты вот такой интерфейс реализуешь?" и получить ответ. И тут же смотрим в стандартные эффекты XNA - там уже есть интерфейсы вроде IEffectLight, IEffectMatrices. Далее делаем наш эффект реализующий нужные интерфейсы (и ещё добавляем своих), при рендере просто спрашиваем "у тебя такой интерфейс есть? А такой?" и передаём через них все данные. Всё, можно делать кучу сложных вещей. Можно делать ещё интерфейсы типа "рендерюсь в карту теней" откуда доставать предназначенную для этого технику. Назначение эффектов и установка неизменяемых параметров с текстурами спокойно делается в простеньком расширении Content Pipeline.
Код рендера будет все эти новые эффекты подхватывать сразу. И спокойно жить как с нашими так и с стандартными шейдерами. Менять что либо надо только если появились новые интерфейсы. Скорость - в профайлере на тяжелой сцене не вылазит вообще, мусор тоже не генерирует.
И чтобы я когда либо вернулся на плюсы после таких ништяков.
И важный момент, не совсем в тему. Frustrum.Intersects медленный, не используйте на каждый объект, проверяйте большими блоками.
Идея игры получается какой то не очень. Жечь зомби слишком однообразно, придётся придумывать что то новое.
А я разобрался как собирать контент для XNA без использования студии. Для этого надо проделать такое:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.ContentPipelineExtensions.targets" />И на выходе в папке bin будет собранный контент. Если собирать проект весь, не только контент, то достаточно запустить msbuild в папке где лежит csproj игры.
Теперь дело за малым - интегрировать всё это с контролем версий, чтобы игра собиралась автоматом при заливании изменений. Автоматизация, хо!
http://forums.create.msdn.com/forums/t/91616.aspx - будущее XNA туманно. Оно не будет жить на WinRT, скорее всего не будет поддерживать планшетники и WP8. Официально рекомендуется использовать WinRT/C++/DX11 для планшетов. Пока я сделаю игру под WP7 (анонс чере пару недель, следите за эфиром) и скорее всего начну делать крутой Ъ-фреймворк для игр на DX11 и с поддержкой WinRT в уме. А C# такой приятный язык.
Казуальное непотребство. Играть можно с любого открытого уровня, сложность ниже Divine следует считать изимодом. Divine не крут - любой уровень сдаётся максимум с первого-второго десятка попыток. Более-менее весело только на Judgement.
Но всё это по меркам жанра, на фоне типичных нынешних игрушек тут хардкор.
Если вдруг CLRProfiler стал падать при запуске XNA-игрушек то надо запускать его из командной строки из той же папки где лежит exe. Причина - XACT не очень хорошо дружит с определением рабочей папки, не может найти звук и кидает исключение.
Достаточно простой но неочевидный способ сделать мёртвый торрент живым. Для этого достаточно взять хэш, найти трекеры на которых торрент ещё был выложен и добавить их. Искать можно даже в гугле. В природе есть огромное количество трекеров о которых никто не слышал, если повезёт - то на одном-двух окажутся живые сиды.
Flash вообще и AS3 в частности говно лютое, всех кто его использует по собственной воле следует физически уничтожить, они не люди вообще. Тех кто придумал - растворить заживо в кислоте с прямой трансляцией в стерео на весь мир. Пидараса что не сделал опцию "я ебал ваши вектора, скейлинг-хуельник и прочее говно, хочу чтобы было M на N пикселе и всё было в них" вообще больно-больно убивать, потом вылечить, потом снова убивать и так пока не дойдёт до абсолютно нелечибельного сосотояния.
Сделал столкновения через BSP-дерево. За основу взят код найденный на AppHub, переделан на построение дерева для каждого меша, сохраняется вместе с моделью. В рантайме считается проверка на пересечение с Bounding Sphere, затем перевод в систему координат модели и проверка столкновения с деревом. Профайлер показывает что со скоростью всё в порядке. Сотня проверок на кадре и функция определения столкновений сидит где то в средней части. Минус сейчас - генерация мусора, надо найти реализацию LinkedList которая бы лучше работала с памятью. Или оставить как есть если сборка мусора не будет вызывать проблем.
