КСНА: Основна физика ЈигЛибКс
КСНА сама, не нуди часове да нам помогне у обрачуну физике. Иако је могуће детектовати исти судар, али то је како се понашају објекти када је откривен, зависи само од кода писаног од нас. Осим ако користимо готове библиотеке за службенике. Узео сам најпопуларнији позадину КСНА'ова ОпенСоурце библиотеке - ЈигЛибКс .
Шта можете постићи?
Позивајући се на филмовима аутори, два примера:
А пример ... цреатед би истом ЈигЛибКс аутори:
Море видеос на сајту пројекта .
Креирање пројекта
Прва ствар коју треба да урадите је да преузмете из Довнлоад секције, најкасније извор ЈигЛибКс'а. После распакивања, креирали смо нови пројекат (у мом случају КСНА 3.1 пројекта), кликните на Солутион Екплорер на главном корена нашег пројекта (Решење НазваНасзегоПројекту), кликните десним тастером миша и изаберите Додај> постојећи пројекат

Додавање постојећег пројекта за постојеће
затим изаберите фолдер где сте претходно распаковали преузету физике мотор: ЈигЛибКс> ЈигЛибКс.цспрој.

Додавање постојећег пројекта за постојеће
Ако сте одабрали приликом креирања пројекат, пројекат за КСНА 3.1 верзију, сада морате да урадите надоградњу пројекта ЈигЛибКс на верзију 3.1. Ми смо то урадили десним кликом на роот пројекта ЈигЛибКс> Упграде Солутион. Ми смо то урадили да касније моћи да додате пројекат главних референци ЈигЛибКс'а пројекта. Иначе, то није могуће, јер у овом тренутку је намењен за верзију 3.0. Промене у верзији 3.1 није довољно велики, међутим, да се потпуно исправи библиотека је радила под овом верзијом КСНА.
Затим, кликните десним тастером миша на корен нашег главног пројекта (у мом случају то се зове ФизикаЗЈигЛибКс)> Адд Референце> Пројекти> ЈигЛибКс. У стаблу нашег пројекта, фасцикла референца треба да се појави ЈигЛибКс. Сада имамо приступ том именском простору.
Додатак физике система
Прво, то ће бити потребно да додате одговарајући намеспаце у вашим Гаме1.цс.
помоћу ЈигЛибКс.Пхисицс; помоћу ЈигЛибКс.Геометри; помоћу ЈигЛибКс.Цоллисион;
Зато могу да користе класе написане од стране креатора ЈигЛибКс'а. За почетак, у конструктору наше класе, креирали смо два објекта.
јавни Гаме1 () { Графика = нови ГрапхицсДевицеМанагер (ова); Цонтент.РоотДирецтори = "Садржај"; ПхисицсСистем ПхисицсСистем нови свет = (); ЦоллисионСистемСАП ворлд.ЦоллисионСистем = нови (); }
Објекат свет, који ПхисицСистем пример, покрене све потребне променљиве и контролер ће осетити догађаја дешавају унутар наше апликације. Догађаји везани за физику. У следећем реду, на ЦоллисионСистем особине, ми смо доделили ЦоллисионСистемСАП направљен објекат, што је неопходно да се открије било судара. Ова класа користи алгоритам "Свееп и орезати" за судару детекцију, што у овом примеру, бити довољан, али ако гледамо на фолдер у оквиру пројекта ЈигЛибКс судара, видимо да смо у стању да искористе друге спреман-класе, користећи различите алгоритме, нпр на на мрежи (мрежа). Ако изоставите овај корак да не можемо реаговати на сударима, а објекти би једноставно пролазе поред њих без икакве реакције.
Треба да радим једну ствар, наиме, да редовно ажурирате свој објекат који складишти логику физике. Да бисте то урадили, само упдате метод, додајте следећи код:
тимеСтеп = пловак (пловак) гамеТиме.ЕлапседГамеТиме.Тицкс / ТимеСпан.ТицксПерСецонд; ПхисицсСистем.ЦуррентПхисицсСистем.Интеграте (тимеСтеп);
Због ПхисицсСистем.ЦуррентПхисицсСистем је компонента статична, она је доступна са било ког места у нашем пројекту, који несумњиво повећава практичност овог решења.
Стварање глумца класе
Глумац класа, заправо ће послужити да се створи објекат, који ће подесити параметре дефинисање објекта у нашој апликацији, и која су неопходна за било какве калкулације о сударима са окружењем.
Хајде да креирате БокАцтор.цс класе тако што ћете кликнути на корену нашег пројекта> Адд> класе ..

Креирање БокАцтор.цс класе
Ставите следећи код унутар датотека БокАцтор.цс:
усинг Систем; помоћу Мицрософт.Ксна.Фрамеворк; помоћу Мицрософт.Ксна.Фрамеворк.Грапхицс; помоћу ЈигЛибКс.Матх; помоћу ЈигЛибКс.Пхисицс; помоћу ЈигЛибКс.Геометри; помоћу ЈигЛибКс.Цоллисион; Именски простор ФизикаЗЈигЛибКс { публиц цласс БокАцтор: ДраваблеГамеЦомпонент { приватни Вецтор3 положај; приватни Вецтор3 скала; _боди приватно тело; Јавни Каросерија Каросерија { добити { _боди вратити; } } приватни ЦоллисионСкин _скин; јавни ЦоллисионСкин коже { добити { _скин вратити; } } јавни БокАцтор (игра игра, Вецтор3 позиција, Вецтор3 скала): база (игра) { тхис.поситион = позиција; тхис.сцале = скала; } } }
БокАцтор класа наслеђује из класе ДраваблеГамеЦомпонент јер глумац мора да се повуче на екрану, тако да можемо видети шта се дешава. Поле Поситион поседује информације о централној тачки унутар кутије, а скала - његове димензије тела је да се схвати као променљива која складишти информације о кретању и ротације нашег објекта Кожа је одговоран за детекцију колизије...
Креирање Тело и ЦоллисионСкин
Следећи корак ће бити додате на крају БокАцтор конструктор класе, следећи код:
_боди = ново тело (); _скин = нови ЦоллисионСкин (_боди); _боди.ЦоллисионСкин = _скин;
За _боди променљиве, доделити инстанцу тела, која ће сачувати основне информације о стању у коме се налази објекат _скин Хоће ли имају информације о "Схелл" нашег објекта, који ће бити креирана на основу претходно унети _боди.. Коначно, он је још увек подешен ЦоллисионСкин имовина за _боди.
Сада, одлучити шта облик, ће имати наш глумац. Зависи од тога како ће се понашати на сцени. Поглед за примитива класе налазе у ЈигЛибКс> примитива.
У нашем случају, желимо да наш циљ да се понашају као кутија, тако да смо користили ову класу Бок, тако што ћете додати следећи код на крају БокАцтор класи конструктора.
Кутија Кутија = нови оквир (Вецтор3.Зеро, Матрик.Идентити, скала); _скин.АддПримитиве (кутија, нова МатериалПропертиес (0.8ф, 0.8ф, 0.7ф));
У горе, направили смо нови објекат класне Бок, чији параметри у конструктору стоји: Положај центру нашег кутији, кутија оријентације (идентитет матрица значи да нема ротације, итд), и скали која ће бити постављен када изградње објекта БокАцтор.
Друга линија, судара са површином додаје да нашег објекта тако да може да реагује са другим објектима. Први параметар је објекат типа са којим се бавимо, други параметар специфицира понашање материјала (трење и еластичност).
Одређивање масе објекта
Да бисте утврдили масу објекта, који поред центар гравитације, зависи од правца силе која ће утицати на овај објекат, аутори ЈигЛибКс, створила је следећи метод који је додат у класи БокАцтор.
СетМасс приватни Вецтор3 (пловак маса) { ПримитивеПропертиес примитивеПропертиес = нови (ПримитивеПропертиес ПримитивеПропертиес.МассДистрибутионЕнум.Солид, ПримитивеПропертиес.МассТипеЕнум.Масс, маса); флоат нежељене; Вецтор3 ЦОМ; Матрица ИТ; Матрица итЦоМ; Скин.ГетМассПропертиес (примитивеПропертиес, од јунк, од министара, од њега, од итЦоМ); Боди.БодиИнертиа = итЦоМ; Боди.Масс = смећа; ЦОМ повратак; }
На крају конструктора исте класе, можемо утврдити масу на следећи начин:
Цом = СетМасс Вецтор3 (1.0ф); И то када је у питању преузимање масе нашег објекта
. Наравно, ништа не спречава да, током примене, може да промени масу објекта.
Подешавање право место Бок'ав
У овом кораку, ми смо поставили нашу кутијицу на ставке које ће бити дате у конструктору током стварања нашег глумца. Ово је неопходно да се уклопи тело нашем објекту, као и судара површину према истом објекту да ефекат био адекватан и реалан.
На крају БокАцтор конструктора, додајте следећи код:
_боди.МовеТо (позиција, Матрик.Идентити); _скин.АпплиЛоцалТрансформ (нова Трансформације (ЦОМ, Матрик.Идентити)); _боди.ЕнаблеБоди ();
Прва линија помера "тело" нашег глумца на одређену ставку. Други параметар МовеТо метода, указује на оријентацију објекта.
Друга линија поставља судара простор односно центар гравитације имовине.
Последња линија, омогућава симулацију да _боди и глумац. Ова линија је неопходно јер симулација је подразумевано онемогућена.
Стварање света.
Сва подешавања у вези са оквирима су поставили, тако да можете да одете да створи свет. На крају конструктора у главном фајлу нашег пројекта гаме1.цс, додајте следећи код:
фаллингБок = БокАцтор нови (овај, нови Вецтор3 (5, 20, 5), нови Вецтор3 (2, 2, 2)); иммоваблеБок = БокАцтор нови (овај, нови Вецтор3 (0, -5, 0), нови Вецтор3 (10, 10, 10)); иммоваблеБок.Боди.Иммовабле = труе; Цомпонентс.Адд (фаллингБок); Цомпонентс.Адд (иммоваблеБок);
Компонента је још да се дода на све методе у класи Гаме1:
БокАцтор фаллингБок; БокАцтор иммоваблеБок;
Прве две линије чине наше глумце. Параметри у конструктору, стоји: први - инстанца у којој глумац створио, у овом случају, наш главни захтев класа Гаме1, други - позиција, трећи параметар је величина ставке.
Трећа линија значи да други објекат је непокретан, а као што се види у параметрима прослеђује конструктору, то ће бити много већи (5к) од првог објекта.
Четврти и пети ред креиран од стране нас ће додати објекте на скуп компоненти који ће аутоматски бити повучене од стране Гаме класе, који наслеђује, након примене.
Цртање
Прелазимо сада на последњој фази, то јест, одбацивање резултат на екрану је заиста лепе речи, цртате сцену. Али прво, морамо додати оквир модела, који ћемо користити у нашем пројекту. Пример модела из иновативних игара , можете преузети овде .
Када распакујете фајл и копирати два садржаних датотека (са моделом и текстуре) треба да буде у Солутион Екплореру, десним тастером миша на фасциклу садржај (у нашем пројекту) и изаберите Додај> Екистинг Итем ... и изаберите датотеку модела ФБКС и. Поновите корак, изаберете датотеку из текстуре.
Класа БокАцтор, креирајте нови метод који ће учитати наш модел:

заштићена Оверриде воид ЛоадЦонтент () { Модел = Гаме.Цонтент.Лоад ("бокМодел"); }
и додајте у све методе у овој класи, декларација променљиве модела:
приватни модел модела; Затим додати исту класу, следећи метод:
ГетВорлдМатрик приватни Матрица () {. Повратак Матрик.ЦреатеСцале (скала) * _скин.ГетПримитивеЛоцал (0) Трансформ.Ориентатион * _боди.Ориентатион * Матрик.ЦреатеТранслатион (_боди.Поситион);} То даје низ нашег сложеног света, који добијамо множењем матрица у низу: Степен у судару површине, и стварно угао под којим се налази њега, "тело" објекта (угао), и положај "тело" објекта.
Ми ћемо морати више пројекцију и приказивање матрице, који ће додати да се у главном класи апликација (у гаме1.цс датотека):
приватни Матрица _виев; Погледај јавни Матрикс { добити { _виев вратити; } } приватни Матрица _пројецтион; Пројекција јавног Матрикс { добити { _пројецтион повратак; } }
У конструктору класе Гаме1, хајде да поставите на крају пројекционог матрице додавањем следеће линије:
Матрик.ЦреатеПерспецтивеФиелдОфВиев _пројецтион = ( МатхХелпер.ТоРадианс (45.0ф), (Флоат) грапхицс.ПреферредБацкБуфферВидтх / (флоат) грапхицс.ПреферредБацкБуфферХеигхт, 0.1Ф, 1000.0ф );
Нећу описивати параметара матрице пројекције, јер претпостављам да у овој фази они су сасвим јасно, али ако не, ја вас позивам да овај чланак о мсдн'ие .
Оставио смо подесили приказ матрице, ми ћемо то урадити у методу Упдате, Гаме1.цс датотеку тако што ћете додати следећу линију кода:
Матрик.ЦреатеЛоокАт _виев = ( Нови Вецтор3 (0, 10, 20), фаллингБок.Боди.Поситион, Вецтор3.Уп );
Ова линија ће изазвати центру екрана, ту ће бити наш пада објекат. Током јесени, видећемо како, долазе у сукоб са објекта који је имобилизоване.
На крају, остаје нам да додате метод за БокАцтор жреба, који се аутоматски позива за овај објекат за цртање.
Жреб Оверриде публиц воид (ГамеТиме гамеТиме) { БасицВорлдГаме игра = (БасицВорлдГаме) игра; Матрица [] = трансформише нова матрица [модел.Бонес.Цоунт]; модел.ЦопиАбсолутеБонеТрансформсТо (трансформише); ВорлдМатрик = ГетВорлдМатрик Матрица (); фореацх (МоделМесх мреже у модел.Месхес) { фореацх (БасицЕффецт ефекат у месх.Еффецтс) { еффецт.ЕнаблеДефаултЛигхтинг (); еффецт.ПреферПерПикелЛигхтинг = труе; еффецт.Ворлд = трансформише [месх.ПарентБоне.Индек] * ворлдМатрик; еффецт.Виев = гаме.Виев; еффецт.Пројецтион = гаме.Пројецтион; } месх.Драв (); } }
Са првом реду, имаћете приступ приказу пројекције и матрице, стварајући референцу на главну тему наше апликације. Остатак кода, је типично за пружање објекте са БасицЕффецт класе. Важно је само да користи матрицу ворлд, матрица која се обрачунава у реалном времену, а заправо ЈигЛибКс израчунату за нас.
Чланак се базира на документацији налазе овде , али постоје индиције да је овде репродукован текст је застарела, и написао ме верзији би требало да ради боље. Можда је то због непотпуне компатибилности са КСНА 3.1, али из онога што сам гледао на методе, једна од њих је смањен са три на два параметра. ЈигЛибКс верзија 0.3.1 (од 11. септембра 2009).
Завршен пројекат за преузимање (КСНА 3.1) (2.1 МБ)
Саставио Демо (КСНА 3.1) (0.3 МБ)
Сродне ставке
3 коментар / а
веома занимљива ставка, не играјте се са графикона, али сам га прочитао са задовољством. Хвала!
По мом монитору, хиљаде људи у свету добити личне кредите из различитих поверилаца. Дакле, постоји добра могућност да се нађе комерцијални кредит у свакој земљи.




















































Па ћу вам рећи да није ту да коментарише, поставите на високом нивоу као и обично.