XNA за начинаещи рисуване Sprites, анимации и работещи

XNA за начинаещи рисуване Sprites, анимации и работещи

Здравейте скъпи потребители на портала GcUp.Ru! В тази статия ще ви кажа как да се направи спрайт и да направи анимация в XNA GameStudio за него. както и да ви запозная с движението на спрайтове в двуизмерен пространство. Всички кода по-долу се проверява и функционира перфектно във версия 3.1. Но също така трябва да работи и в други версии (3.0 и 4.0, за сметка на 2.0 не съм сигурен). Преди проучване на този урок ви препоръчвам да прочетете първата ми статия. като този урок е продължение на това, което означава, че ще трябва знанието, че сте получили от първата статия.

Така че, ако имате всички по-горе, а след това да започнете!

Част 1: Изготвяне спрайт.

Първо, нека да се разбере какво е спрайт. Sprite - това е един обект (на снимката) в 2D игра. Вашият герой, врагът, обичайната дърво или платформа - всичко това е спрайт. Дори и на заден план, които привлякохме в предишната статия, ще бъде един вид спрайт.

Т.е. както вероятно се досещате, и принцип спрайт рисунка е подобен на принципа на съставяне на заден план. Но, в тази статия ще се подобри екарисажи духове и да се създаде една нова класа.

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

Създаване на клас да се направи спрайт:


За да започнете, нека да създадете нов проект (как да стане това, са описани подробно в предишния ми статия) и го наричат ​​DrawSprite.

Сега кликнете с десния бутон върху името на проекта (в Solution Explorer) и изберете Add -> New т -> Class.

XNA за начинаещи рисуване Sprites, анимации и работещи

Нека го наречем спрайтове.

XNA за начинаещи рисуване Sprites, анимации и работещи

След създаването на нашия клас е както следва:

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> използване на система;
използване System.Collections.Generic;
използване System.Linq;
използване System.Text;

Както знаете, това е стандартен клас за проекта за езика C # програмиране. т.е. XNA пространства от имена тук. Тъй като аз не ги помня наизуст (и най-вероятно никой програмист не ги помня), ние ще ги добавите към "отиде заедно." Например, ние създадохме една променлива за текстура (а Texture2D. Ако някой си спомня) и компилаторът се оплаква, че не съществува едно пространство от имена (както той пише името му). След това беше, че сме направили и каза.

Така че сега нека да си спомним как сме добавили нашия опит в играта.

Ние сме създали една променлива за текстурите се зареждат текстури в метод LoadContent на () и да ги привлече в привлече метод (). Т.е. за създаване на отделен клас, и в него се направи спрайт (или по-скоро, да се справя спрайт и черпим в Game1), ние трябва да го създадем (в нашия нов клас) променлива, създаване на метод за зареждане на текстурите (като метод на LoadContent () ) и да се създаде метод за рисуване на текстури (като Draw () метод).

Сега можете да започнете да редактирате нашия нов клас. Както знаете, целият клас код е написан на блок (между скобите) клас. Ето защо, веднага след:

Променливата е създаден, дизайнерът е готова. Сега ние се процедира, за да заредите изображението. Да се ​​създаде метод LoadContent () веднага след строителя. В нейните параметри трябва да напишете два обекта. Един обект е един клас ContentManager (между другото, тук също липсва пространство от имена, добавете я), а вторият клас String. Първата ни позволява да извикате метода Load. за зареждане на изображението, а вторият ще позволи да се създаде по пътя към изображението. И така, ето как изглежда метод LoadContent ().

? 200 "200px": '' + (this.scrollHeight + 5) + 'пиксела'); "> обществени невалидни LoadContent (ContentManager съдържание, String текстура)
<
spriteTexture = Content.Load(Texture);
>

Както можете да видите, спрайт се зарежда, както и на заден план. Едва сега в Game1 клас трябва само да въведете дума съдържание и пътя към текстура. Останалото вече е писано.

Така че, сега да преминем към следващата (и последна) метод - Draw (). Единственият параметър, който трябва да бъде приет до нея, тя spriteBatch. Сега остава само да привлече спрайт начин ние знаем (точно както ние привлече на заден план). Единственото нещо, което е не е нужно да се обадя методи spriteBatch.Begin () и spriteBatch.End (). защото не да се обадя на тези методи за всяко отделно спрайт, ние ще ги наричаме веднъж (Game1 клас). И така, тук тя изглежда като метод ни Draw ().

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");">
обществени невалидни Draw (SpriteBatch spriteBatch)
<
spriteBatch.Draw (spriteTexture Color.White.);
>

Както можете да видите, вторият аргумент (след spriteTexture) ние не се записват. Това се прави, защото точките не са поискали.
И така, сега ние се обръщаме към проблема, който описах в началото. Сега ние ще използваме един прост метод, и да определи координатите на горния ляв ъгъл на спрайт. За тази цел, веднага след линия

? 200 "200px ':' '+ (this.scrollHeight + 5) +' пиксела ');"> публична Texture2D spriteTexture;

(В началото на клас)

Пишем «Vector2» и добавяне на необходимото пространство от имена. Просто напишете името на позицията:

? 200 "200px ':' '+ (this.scrollHeight + 5) +' пиксела ');"> публична Vector2 spritePosition;

И сега в метода на Draw (), за да напише втория аргумент.

Това е метод Draw сега изглежда като ().

? 200 "200px ':' '+ (this.scrollHeight + 5) +' пиксела ');"> обществени невалидни Draw (SpriteBatch spriteBatch)
<
spriteBatch.Draw (spriteTexture, spritePosition, Color.White);
>

И тук е как цяла нашия клас:

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> използване на система;
използване System.Collections.Generic;
използване System.Linq;
използване System.Text;
използване Microsoft.Xna.Framework.Graphics;
използване Microsoft.Xna.Framework.Content;
използване Microsoft.Xna.Framework;

пространство от имена DrawSprite
<
клас Sprites
<
обществен Texture2D spriteTexture;
обществен Vector2 spritePosition;

обществени невалидни LoadContent (ContentManager съдържание, String текстура)
<
spriteTexture = Content.Load(Texture);
>

обществени невалидни Draw (SpriteBatch spriteBatch)
<
spriteBatch.Draw (spriteTexture, spritePosition, Color.White);
>
>
>

Редактиране на клас Game1:

Така че сега нека да редактирате Game1 клас в зависимост от класа на Sprites.

За да започнете, нека създадем Sprites обект клас. Ние го наричаме герой.

Сега Game1 конструктор инициализира обекта:

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> герои = нови Sprites ();

След LoadContent () метод за качване на изображения. папка Pre-съдържание, създайте папка текстури и добавяне на образа на героя си (всичко е описано в първата ми статия) (аз го нарича празен ход). И така, в метод LoadContent (), пише:

По този начин, ние нарича метода на «LoadContent» от клас Sprites и на нея се поставят аргументи.

Е, ние сме на "финалната права". Остава да отидете на метода на Draw () и го наричат ​​spriteBatch.Begin (). hero.Draw и spriteBatch.End (). Както сте разбрали, hero.Draw ще бъде извикан от клас Sprites. т.е. е необходимо да се регистрирате само един аргумент - spriteBatch (останалата част е регистриран в клас духове). Тук е методът на Draw (Game1 клас).

? 200 "200px": '' + (this.scrollHeight + 5) + 'пиксела'); "> защитен замяна невалидни Draw (GameTime gameTime)
<
GraphicsDevice.Clear (Color.CornflowerBlue);

spriteBatch.Begin ();
hero.Draw (spriteBatch);
spriteBatch.End ();

// TODO: Добавете рисунка код тук

Сега нека да стартирате играта (F5), и да видим какво ни е останало. Имам тази снимка:

XNA за начинаещи рисуване Sprites, анимации и работещи

Всичко работи добре, но трябва да се промени на кода. Тъй като ние не уточни мястото изрично, компилаторът определя стандарта координати за горния ляв ъгъл на спрайт. Тези стандартни координати са нула. Може да попитате защо спрайт е съставен от върха? Това е много проста. В крайна сметка, координатите са обърнати в компютърната графика. И ако в координатната равнина математика изглежда така:

XNA за начинаещи рисуване Sprites, анимации и работещи

Нещо, на екрана, както казах, координатите са разменени, т.е. координатна система има своя произход в горния ляв ъгъл:

XNA за начинаещи рисуване Sprites, анимации и работещи

Това означава, че координатите (0, 0) (X и Y) ще бъдат в горния ляв ъгъл.

Сега нека да променим нашата код и пиша за определяне на координати. Всяко деление на скалата на координатната е равна на един пиксел. Т.е. Ако имате размер на екрана 600x600 пиксела, на 300x300 е средната точка на екрана.

Така че нека да се направи спрайт в центъра на екрана. Първо, нека да преоразмерите прозореца на играта (това е описано подробно в първата ми статия). За да направите това в впише конструктор клас Game1:

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> graphics.PreferredBackBufferHeight = 600; // ширина на екрана
graphics.PreferredBackBufferWidth = 600; // Височината на екрана

Сега всички ние можем да се определят координатите. Методът Initialize (), тип:

? 200 '200px': '' + (this.scrollHeight + 5) + 'пиксела ");"> hero.spritePosition = нов Vector2 (300, 300);

По този начин, ние инициализира spritePosition обект и го определя за координиране стойности 300 на оси X и Y. на

Сега нека да стартирате играта. Аз имам това:

XNA за начинаещи рисуване Sprites, анимации и работещи

Както можете да видите, спрайт е съставен не е съвсем в центъра на екрана, но можете да бъдете сигурни, че в горния ляв ъгъл (където той е прозрачен) е съставен точно в центъра. По този начин е възможно да се експериментира и да се създаде характер точно в центъра на екрана на играта. И така, с това, аз ще приключи тази част на статията. В следващата част, ние сме с вас, ще разберете как да създадете свой спрайт анимация.