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

Ролева платформена игра - Втора част

Ролева платформена игра - Втора част




Първа част

Създаване на Ролева игра базирана на платформи

трудност на урока 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 на нашия герой и добавете нов кадър със Labelattack”. Тук сложете картинката, която ще се показва ако изпълняваме атака. На най-външната точка на картинката поставете MC(точка или черта), който ще кръстим с Instance Nameattack 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 Namehealth”. Добавяме при кода ни за жълтиците и стойността на кръвта:

Код
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 и после да се изтрие

Добави коментар

Трябва да сте регистиран потребител за може да оставяте коментари! Направете своята безплатна регистрация още сега.