Руководство по созданию AS3 Flash игры – часть 4: очки
В Руководство по созданию AS3 Flash игры – часть 3: стены я рассказал о
некоторых объектах, которые которые уничтожают шар, теперь я расскажу
как создать функцию набора очков, когда собираются монеты.
Как обычно, я создаю новый клип, называемый score с классом score.as Вот как выглядит score.as:
ACTIONSCRIPT:
package {
import flash.display.Sprite;
// look! you need text.TextField in order to make it work
import flash.text.TextField;
publicclass score extends Sprite {
publicfunction score(){
// this.scoretext.text = "0" works
// this.scoretext.text = 0; does not work
this.scoretext.text = String(0);
}
publicfunction updatescore(score){
// updating the score
this.scoretext.text = String(score);
}
}
}
Посмотрите на строку 4, необходимо импортировать text.TextField,
для того, чтобы получить рабочие текстовые поля (это свойство было у
AS2) в 9 строке Вы увидите, что необходимо конвертировать несколько
строк, прежде чем выводить данные в текстовое поле (в AS2 делать этого
было не нужно).
Кроме данной детали, в классе score нет больше ничего примечательного, но более интересно, как другие классы вызывают его:
Вот новый coin.as:
ACTIONSCRIPT:
package {
import flash.display.Sprite;
import flash.events.Event;
publicclass coin extends Sprite {
// variables used in this class
privatevar dist_x:int;
privatevar dist_y:int;
privatevar distance:int;
// main function
publicfunction coin(){
// calling place_coin function.
// this function randomly places the coin in the field
// determining the distance between the hero and the coin
// notice how do I refer the hero
dist_x = x - as3circle(root).circle_hero.x;
dist_y = y - as3circle(root).circle_hero.y;
distance = dist_x*dist_x+dist_y*dist_y;
// 1809 = (hero radius + coin radius)^2
// this way I don't have to perform a square root to distance
if(distance <1089){
// if the hero picks up a coin, then move it elsewhere
as3circle(root).add_score(1);
place_coin();
}
}
privatefunction place_coin(){
x = Math.floor(Math.random()*400)+50;
y = Math.floor(Math.random()*300)+50;
}
}
}
Посмотрите на 27 строку, где я вызываю функцию add_score, добавляющую одно очко за каждую собранную монету. Где функция add_score? Она в главном классе as3circle.as
Сперва, в строке 7 я создаю переменную score, называемую your_score, добавляю в ступень 16 строки, и, таким образом, функция, добавляющая очки, находится в строках 37-40.
Когда
я использую клип score только для того, чтобы показывать очки, тогда я
сохраняю это в главном классе, благодаря переменной my_score, заданной в строке 9.
После этого, add_score обновляет очки в 38 строке и вызывает функцию, показывая обновленные очки на экране в строке 39.
Маленькое уточнение: coins.as вызывает функцию в as3circle.as, которая обновляет очки и вызывает score.as, записывающую обновления очков.