ПредишенСледващото

2D графика е в студио игра 2.0 / 3.0


В тази лаборатория, ние ще разгледаме координатна система, която се използва за създаване на двуизмерни игри, говори за оттеглянето на двуизмерни образи на XNA, помислете за композиране въпроси, създаване на игра екранни размери и работата на в прозоречен и режима на цял екран.

координата


Развитието на двуизмерни игри използват двуизмерна координатна система. Фиг. 2.1. можете да видите нормалното координатна система и обекта изобразен в системата.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.1. Традиционната система на координати

В тази координатна система, произходът се намира в долния ляв ъгъл на системата - тя е тук, че има точка 0.0. Координати на оста Х се увеличава от ляво на дясно, Y ос - нагоре.

В развитието на компютърните игри чрез екрана координатна система. Основната разлика на тази система от традиционните е, че произходът намира в горния ляв ъгъл на екрана. Координатите на увеличението на Х-ос от ляво на дясно, а Y-оста е обърнат - координати увеличават от горе до долу. Фиг. 2.2. можете да видите координатната система, която се боядисате в същия триъгълник.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.2. Screen координатна система

Границите на екрана координатна система - е или на границата на игралното площ на прозореца - в режим на прозорец, или - ако режимът на екран резолюция на екрана. Например, ако в прозоречен режим, ние имаме размер на прозорец, равна на 800x600 пиксела, а след това са границите на координатната система.

Създаване на нов стандарт игра проект на име P2_1. Панелът Solution Explorer scholknem Щракнете с десния бутон върху папката съдържание и от контекстното меню изберете Добавяне (съществуващ елемент. Прозореца по подразбиране на Windows за работа с файлове. Ние считаме, с помощта на графичен файл, и добавете към проекта. В резултат на това на панел Solution Explorer трябва да изглежда така както е показано на фиг. 2.4.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.4. Снимки добавени към проекта

Обявата 2.1. Променливи за работа с изображения


Започнете () метод на spriteBatch обекта подготвя графичното устройство за изхода на изображението. Метод равен същия обект се като параметър променлива тип Texture2D (MySprite), тип променлива Vector2 (позиция) и цвят, с което се променя цвета на изображението. В този случай, белият цвят - това означава, че цветовете на изображението ще останат непроменени. Край () метод завършва процедурата по отнемане - изображението на екрана.

Начертайте метод базов клас в този случай не се използва за извеждане на изображения. Ще разгледаме ролята си в продукцията изображението по-долу.

След като стартирате програмата, ще получи картина (фигура 2.5.) .:

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.5. Изображението показва на екрана на играта

Помислете за един подход, който опростява подход към получаването на изображения по метода, описан по-горе.

клас за развитие за съхранение на графична информация


Създаване на нов стандарт проект на име P2_2. Добавяне към проекта изображението, което ние създадохме по-горе (P2_1.png).

Сега мисля за това, което трябва да бъде класа да представлява игра обекта. Сега имаме нужда от клас обект, който може да съхранява текстура спрайт и информация за позицията си на екрана. ако е необходимо Този списък може да се разшири - и - и двете свойства - и методи. Но в такъв проект, ние ще работим по един от следните сесии. И все пак ние ограничи две споменати по-горе свойства.

икона Scholknem проект P2_2 в панела Solution Explorer и изберете изскачащ елемента от менюто Добавяне (клас. Вие ще видите диалогов прозорец, за да добавите нов елемент, в него ще се появи празен клас (фиг. 2.6.) Модела.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.6. Ние сме добавяне на един нов клас за проекта

Определяне на името на новия клас - нека да бъде spriteClass, и кликнете върху бутона Add. Проектът ще се добави нов празен клас. Тук е нашият проект, след като всички тези действия (фиг. 2.7.).

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.7. Външен вид на прозореца на проекта, след добавянето на нов клас

Ние променя класа spriteClass код, както следва.

Второ - създаване на необходимите свойства на класа.

Трето - да се изгради класа конструктор, който ще се инициализира тези свойства.

Ето как класа код се грижи за всички модификации (виж Обява 2.4.):

Над сме погледна към изхода на правоъгълен образ, който заема цялата площ на файла с изображението. Ние не изисква никакви допълнителни настройки за показване на това изображение. На практика не е много удобно да се използват няколко отделни файлове, които се съхраняват на изображението. Освен това, не всички от картинката - правоъгълник. Тук имаме нужда, на първо място - по-напреднали от боя, инструмент за рисуване, и второ - един малко по-различен метод за показване на изображения. По-рано, за да се покаже изображение имахме нужда текстура и изображения координират в прозореца на играта. Сега, обаче, е необходимо координатите на позицията на желаното изображение, за да ни в графичен файл.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.8. Създаване на изображение в Adobe Photoshop

Тук сме създали три снимки - изображенията на тези уроци ще бъдат полезни за нас, за да създадете своя собствена версия на класическата игра на понг.

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.9. Ние се определят координатите на спрайт в графичен файл

По същия начин, ние получаваме координатите на долния десен ъгъл на изображението. В този случай - (35, 97). За бъдещата работа, ние се нуждаем от познаването на координатите на горния ляв точка на граничната кутия на спрайт, както и - ширината и височината. В този случай ширината е 17 пиксела (35- 18), на височина - 88 пиксела (97 - 9). В резултат на това получаваме следните параметри на правоъгълник, в което се заключава нашата спрайт:

  • X 18
  • Y: 9
  • Ширина: 17
  • Височина: 88

По-долу ще бъдат необходими данни.

Сега се зареди изображението в проекта и ще продължи да работи. Както си спомняте, по-горе, ние създадохме компонент шаблон една игра, която е подходяща за показване. Сега, ние редакция на шаблона. Обявата 2.8. можете да видите модифициран кода на компонента за игра

Обявата 2.8. Променено кода на компонента за игра


Обърнете внимание на промените, направени в компонента.

Добавихме три променливи - sprTexture, sprRectangle, sprPosition - текстура съхранение правоъгълник, показваща координатите на спрайт в текстурата и позицията на изхода на спрайт на екрана.

След това, ние модифициран клас строителя, като към списъка с променливи предадени следните параметри:

  • Код Texture2D newTexture - предавка текстура. Параметърът се предава чрез препратка, което означава, че обектът не се получи копие от текстурата, а само препратката към нея - тя спестява системни ресурси.
  • Правоъгълник newRectangle - правоъгълник, който определя координатите на спрайт в изображението.
  • Vector2 newPosition - позиция спрайт върху екрана на играта.

Тялото на конструктор, ние се инициализира със съответните свойства на параметрите на класа мина.

Освен това, ние завършваме метода на код Draw. Тук ние ще имаме най-трудната част от промяната. Въпросът е в играта, за които ние създаваме компонент, вече разполага с всички средства за показване на изображения. Ето защо, най-разумно да се използва вече съществуващ тип SpriteBatch на обект, за да го използвате за показване на изображението на екрана. С цел да се направи веднъж създаден SpriteBatch на разположение за всички компоненти на играта, има специална техника. Има такова нещо като игрални услуги, които са на разположение на всички компоненти. На първо място, ние добавяме създадения обект в клас тип Game1 SpriteBatch в списъка на услуги за хазартни игри (Ще обсъдим това по-късно), а след това да можем да извлечем обекта в компонентите на играта. Ние правим точно това - следната команда създава нов обект sprBatch, която съдържа препратка към оригиналния обект въведете SpriteBatch, който по-рано в Game1 клас добавен към списъка на игра ресурси.

SpriteBatch sprBatch = (SpriteBatch) Game.Services.GetService (typeof (SpriteBatch));

sprBatch.Draw (sprTexture, sprPosition, sprRectangle, Color.White);

Взели сме изложени на спрайт на екрана, първо се обадете на метода Започнете () тип SpriteBatch обект, а след това - нарича метод Draw (), а след това - метод Край (), крайното заключение. Тук не се обадя на тези методи. Фактът, че тези методи ще бъдат извикани в метода на Draw (), което води до основната игра (Game1 тип обект). Кодът за клас Game1 някои промени, които ние сега се разгледа. Обявата 2.9. можете да видите кода.

Обявата 2.9. Клас Код Game1

За да започнете, ние добавихме нови променливи, една от които (тип spriteComp) се използва за съхраняване клас spriteComp обект, а втората (като Texture2D) се използва за съхраняване на текстури. Тъй като текстура съдържа множество спрайтове, променлива Texture2D може да се наложи да се създадат множество обекти, така че има смисъл да се създаде тази променлива веднъж, за да се зареди изображението в него и да го ползват.

LoadContent на метод (), както обикновено, се създаде обект като SpriteBatch, а с помощта на Services.AddService на отбора (typeof (SpriteBatch), spriteBatch); SpriteBatch добавите обект към списъка на услуги за игри. Това стана, след това spriteBatch отбор може да се нарече в компонентите на играта и да покаже своите снимки.

Освен това, в този метод, ние се зареди изображението текстура в текстура и променлив метод CreateNewObject повикване ();. Този метод сме създали сами по себе си - ние да го използвате, за да създадете gameObject обект.

gameObject = нов spriteComp (тази, реф текстура, нов правоъгълник (18,9,17,88), нов Vector2 (100150));

При създаването на обекта, се минава на класа конструктор spriteComp Целта на играта (това), позоваване на текстурата, правоъгълник на обекта - имайте предвид, че ние създаваме нов обект на правоъгълника, който се инициализира със стойностите на координатите на желаната структура в нашата спрайт файл, преди това са изчислени. Като минахме към конструктор нов обект тип Vector2, която съдържа координатите на спрайт за показване на екрана на играта.

CreateNewObject на метод () ще се постави друг отбор - Components.Add (gameObject). С негова помощ, ние добавяме към списъка на игра компоненти новосъздадените обект. Това е един много важен команда - благодарение на нея при изпълнение на екипа base.Draw (gameTime); метод Draw ще бъдат обработвани от нашата игри компонент, и образите, които той показва, са показани.

В метод Draw () клас Game1 на които използваме следния код:

spriteBatch.Begin () команда; изготвяне на графичен ustroytstvo за извеждане на изображения, а след изходното изображение се извършва - на base.Draw на повикване (gameTime); обработени компоненти игра съответните методи, наследени от DrawableGameComponent. Спомням си, че в жребия за метод () spriteComp нашия компонент е само Draw метод повикване () клас обект SpriteBatch, никакви разговори започват () и Край (). В резултат на това, след като компонент показва изображението на обект О завършва spriteBatch Край команда () в метода на Draw () клас Game1 и изображението се появява на екрана.

Този работен механизъм ви позволява да създавате различни компоненти, като ги добавите към списъка на компонентите на играта и не се тревожи за изхода на всеки един от тях в привлече метод (Game1 клас). След компонента се добавя към списъка на игра елементи, сключен графичното представяне е автоматично. Можем да кажем, че този метод base.Draw (gameTime); "Сканиране" всички регистрирани компоненти и ги показва на екрана.

Този подход е най-полезен в развитието на реалните игри.

Тук е екрана на играта след оттеглянето си образ (Фигура 2.10.).

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.10. Екранът за игра, след като компонент изход

Тук ние разгледахме различните подходи към изображенията на заключението. Въпреки това, тя може да се види, че изображението изход, който е свързан с предмета на играта - това е само една от задачите, които трябва да бъдат решени в развитието на играта. Други задачи - например - обектът се движи, чек, се сблъскали с други обекти, ако обектът - същият може да бъде решен с помощта на различни подходи. Тя може да се види, че най-сложните от гледна точка на прилагане на директивата - за развитието на отделен компонент на играта е едновременно най-удобния за изпълнение на различни функции игра обекта. По-късно, промяна на функционалността на игрални съоръжения, ние ще използваме точно този подход.

Помислете за изхода на няколко изображения в екрана на играта. Както казахме, като се използват регистрирани компоненти игра наследени от DrawableGameComponent, сключен автоматизиран. Все пак, това не означава, че не е необходимо да се използват прости методи за оттегляне.

Помислете например за сключване на фоновото изображение в съществуваща P2_3 проект. Ние създадохме един образ, който можете да използвате, за да създадете своя собствена версия на понг. По същия начин, се създаде един образ, който ще служи като фон за игра. Стандартен екран игра е с резолюция от 800x600 пиксела. Ние ще създаде изображение с този размер (нека го наречем background.png), той зареди в проекта. За да направите това, добавете нова променлива към класа

След това, в LoadContent () метод, за качване на изображения команда променливата

Сега показва изображение с помощта на () метод Draw на spriteBatch на обекта.

spriteBatch.Draw (backTexture, нов правоъгълник (0, 0, 800, 600), Color.White);

Сложете тази команда между повиквания Започнете () и Край () команда преди base.Draw (gameTime);
В резултат на това прозореца на играта ще придобие този вид (фиг. 2.11.).

XNA новинарски статии уроци () - член 2г-графика в студио игра 2

Фиг. 2.11. Изходен прозорец игра след добавяне на фон

Както можете да видите, обект на спрайт игра показва над фоновото изображение.

ЗАБЕЛЕЖКА
  • Подход изискващи приоритетни съответствие извеждане на изображения за коригиране на смесването им не е много удобно. Въпреки това, XNA Framework предоставя специални инструменти за регулиране на взаимното разположение на обектите. По-специално, начина на определяне на спрайт да посочите "дълбочина" (дълбочина), в която се намира.

въпроси
Подкрепете проекта - споделете линка, благодаря!