Преглед на урок

Ролева платформена игра - Втора част
11 Януари 2012, 11:55 | 8467 преглеждания | 6 коментарa
Категория: Програмиране » ActionScript
Оценка:
(1 гласувал)
3 добавяния към любими
Първа част
Създаване на Ролева игра базирана на платформи
трудност на урока 4/5
!! ВНИМАНИЕ !! Този урок НЕ е за начинаещи, прилагам скрийнове само на най-необходимото. Предполага се, че сте креативни и ще измислите сами останалата графична част.
Платформените игри са изключително популярна форма на online забавление. Този урок ще ви помогне да създадете своя собствена такава правейки я по най-лесния възможен начин.

Получения резултат
*CTRL - атакува
*ARROWS - движение
*SPACE - стрелба (ако има оръжие)
@@ Това е най-простия възможен графичен вид на играта. Вие може да и придадете по-естетическа завършеност. Ще се радвам, който изпълни урока да покаже резултата @@
Враговете
Враговете са съществено важни за една добра игра. Затова нека направим един. Първо ще ни е нужна картинка, която ще преобразуваме в MC (F8 ). Следват няколко кода, които ще задвижат врага. Долният код ще накара противника/врага ни да се движи хоризонтално – на ляво и на дясно.
onClipEvent (load) {
enemyspeed = 2;
//това е скоростта на придвижване на врага
enemystepsright = 0;
//на какво разстояние в дясно ще се движи
enemystepsleft = 0;
//на какво разстояние в ляво ще се движи
enemydir = "left";
//посоката му
}
onClipEvent (enterFrame) {
if (!dead) {
//ако е жив
if (enemydir == "right") {
//ако се движи на дясно
enemystepsright += 1;
this._xscale = -100;
//това помага на героя да не се сплесква като обръща посоката
this._x += enemyspeed;
} else if (enemydir == "left") {
//ако се движи на ляво
enemystepsleft += 1;
this._xscale = 100;
this._x -= enemyspeed;
}
if (enemystepsright == 100) {
//това е на какво разстояние да се отдалечи и да смени скоростта си
enemystepsright = 0;
enemydir = "left";
//смяна на посоката
} else if (enemystepsleft == 100) {
//отново за обратната посока
enemystepsleft = 0;
enemydir = "right";
//смяна на посоката
}
}
}
Атакуването
Какво ще са враговете без възможност за премахването им? Няма да е забавно да ни се пречкат постоянно. Затова върнете се в MC на нашия герой и добавете нов кадър със Label ”attack”. Тук сложете картинката, която ще се показва ако изпълняваме атака. На най-външната точка на картинката поставете MC(точка или черта), който ще кръстим с Instance Name ”attack point”. Добавете и нов кадър ”dead”. Остана да добавим още няколко елемента. Вмъкнете следният код за героя:
} else if (Key.isDown(Key.RIGHT)) {
if (speed<maxmove) {
speed++;
}
//при задържане на стрелка НАДЯСНО нашият герой ще се затича
dir = "right";
this._xscale = 100;
this.gotoAndStop("run");
} else if (Key.isDown(Key.CONTROL)) {
//при натискане на CNTRL героят ни ще атакува
this.gotoAndStop("attack");
attacking = true;
speed = 0;
}
Ако героят ни намали скоростта си, е редно да виждаме картинката му в покой, затова потърсете съответствия на долния код и го допълнете в основната си сцена.
} else if (speed<1 && speed>-1 && !attacking) {
speed = 0;
this.gotoAndStop("idle");
}
Следващият код е за вашият враг, кода проверява дали врагът ви е докоснал или сте го атакували и го убива. Затова добавете и в неговият MC кадър ”dead”.
onClipEvent (enterFrame) {
if (this.hitTest(_root.char.attackpoint)) {
enemyspeed = 0;
enemystepsright = 0;
enemystepsleft = 0;
dead = true;
this.gotoAndStop("dead");
}
if (this.hitTest(_root.char) && !dead) {
_root.char.jumping = false;
_root.dead = true;
}
Допълнете кода, за да спрем атаката, ако пуснем CTRL клавиша
if (_root.ground.hitTest(this._x, this._y, true) && falling) {
jump = 12;
jumping = false;
falling = false;
}
}
}
onClipEvent (keyUp) {
// отпускаме
if (Key.getCode() == Key.CONTROL) {
// не държим клавиша
attacking = false;
// спри атаката
}
}
Препядствията
Най-лесно изпълнимите препятствия са шиповете. Затова с този код няма да убием нашият герой, а ще намалим точките му здраве, които ще зададем по-късно и ще го върнем малко назад. Всичко необходимо е да нарисувате шоповете/скалите си, да ги превърнете в MC (F8 ) и да им поставите следния код:
onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
_root._x = 0;
_root.char._x = _root.char.startX;
_root.char._y = _root.char.startY;
// това ще върне героя ни в стартовата точка
_root.char._y = _root.char.startY+Stage.height/2;
_root.char.speed = 0;
}
}
Допълваме и основния код:
onClipEvent (load) {
jumping = true;
speed = 0;
maxmove = 15;
Ypos = this._y;
jump = 0;
}
Точки здраве
За да зададем кръв или здраве трябва да направим няколко неща. Първо създаваме ново Dynamic text поле с Instance Name ”health”. Добавяме при кода ни за жълтиците и стойността на кръвта:
score.text=0;
health.text=100;
Сега на препядствията да зададем код, който кара кръвта ни да намалява при всеки допир с тях:onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
if (_root.health.text<=0) {
_root.dead = true;
}
if (!_root.dead) {
_root.health.text -= 5;
_root._x = 0;
…
…
_root.char.speed = 0;
}
}
}
И както си спомняме за полето със жълтици – и това поле с кръвта трябва да стои неподвижно спрямо героя.
Допълваме основната сцена:
if (dir == "right" && !_root.leftblock.hitTest(this._x+20, this._y, true)) {
_root.health._x += speed;
_root.score._x += speed;
this._x += speed;
_root._x -= speed;
}
if (dir == "left" && !_root.rightblock.hitTest(this._x-20, this._y, true)) {
_root.health._x += speed;
_root.score._x += speed;
this._x += speed;
_root._x -= speed;
}
Ако искаме кръвта ни да се повишава ако взимаме монети (или може да си измислите друг предмет) е редно да добавим този код на монетата.
onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
_root.health.text += 1;
unloadMovie(this);
}
}
Въоръжение и стреляне
Сега – това е вече най-трудната част. Тя не е задължителна. Вече сме задали, че може да се атакува с CTRL, така, че ако я пропуснете – не е фатално.
Ако все пак решите да я изпълните, нека започнем с намирането на картинката на нашето оръжие и превръщането му в MC. Слагаме код, подобен на жълтиците, но тук задаваме, че носим оръжие.
onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
_root.gotgun = true;
unloadMovie(this);
}
}
Добавяме и кадър в MC на героя ни ”shoot” с картинка на героя – докато стреля. След това допълваме кодовете:
onClipEvent (load) {
jumping = true;
speed = 0;
maxmove = 15;
jump = 0;
_root.maxshoottime = 100;
}
onClipEvent (enterFrame) {
if (!_root.ground.hitTest(this._x, this._y, true) && !jumping) {
this._y += 6;
jump = 0;
jumping = true;
}
if (!_root.shooting) {
_root.timer = 0;
_root.mvsp = _xscale/20;
}
…
} else if (Key.isDown(Key.CONTROL)) {
this.gotoAndStop("attack");
attacking = true;
speed = 0;
} else if (Key.isDown(Key.SPACE)) {
if (_root.gotgun == true && !_root.shooting) {
_root.attachMovie("bullet", "bulleter", 1, {_x:_root.char._x, _y:_root.char._y-25});
_root.shooting = true;
with (_root.bulleter) {
onEnterFrame = function () {
if (_root.timer>_root.maxshoottime) {
_root.shooting = false;
unloadMovie(this);
}
_root.timer++;
_x += _root.mvsp;
};
}
speed = 0;
this.gotoAndStop("shoot");
}
} else if (speed<1 && speed>-1 && !attacking) {
…
Бъдете много внимателни кое ще замените всеки код!
Знаете, че е редно да нарисуваме и куршумите. Затова си направете някаква форма и после (F8 ). Отваряте Library-то CTRL+L и правим нашият куршум Linkage с десен бутон. Задаваме му име ”bullet”.
След време ще забележите, че всичките ви обекти се местят в нежелана посока докато играем, затова нека оправим това.
onClipEvent (load) {
jumping = false;
speed = 0;
maxmove = 15;
healthX = _root.health._x;
scoreX = _root.score._x;
Xpos = this._x;
Ypos = this._y;
_root.maxshoottime = 100;
}
...
onClipEvent (enterFrame) {
_x = Xpos-_root._x;
_root.score._x = scoreX-_root._x;
_root.health._x = healthX-_root._x;
if (!_root.ground.hitTest(this._x, this._y, true) && !jumping) {
Това беше основното! Приятно творене!
Превел урока: AxllRose
Източник: www.kirupa.com
Ако урокът ви допада, споделете го в Twitter и Facebook или го запазете в Delicious.
Урокът е добавен от: AxllRose
Коментари
Zymen
Защо не сложиш и едно демо ?
mgmitko
не е правил а само е превел урока...Тук не съм видял някои да покаже нещо да може да прави,а само да копира...
Unununium
не стига че им превеждат и улесняват уроците .. ами и все недоволни
xman
Не виждате ли, че е даден линк към работен файл?
pacheto94
как мога да направя екрана да следи топчето и на горе
archbg
много бъгаво, но е мега яко :) примерно героя отскача от въздуха, когато пада след като свърши земята, врага може да изчезва ако е мъртъв примерно като помига малко със смяна на алфата, после обекта да се изтрие или просто да избледнее до 0 и после да се изтрие
Добави коментар