ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

Join the forum, it's quick and easy

ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!
ИГРОДЕЛ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Урок 7 Руководство по созданию AS3 Flash игры – часть 4: очки

Перейти вниз

Урок 7 Руководство по созданию AS3 Flash игры – часть 4: очки Empty Урок 7 Руководство по созданию AS3 Flash игры – часть 4: очки

Сообщение автор Admin Вс Фев 21, 2010 3:59 am

Как обычно, я создаю новый клип, называемый score с классом score.as
Вот как выглядит score.as:

ACTIONSCRIPT:
1.package {
2. import flash.display.Sprite;
3. // look! you need text.TextField in order to make it work
4. import flash.text.TextField;
5. public class score extends Sprite {
6. public function score() {
7. // this.scoretext.text = "0" works
8. // this.scoretext.text = 0; does not work
9. this.scoretext.text = String(0);
10. }
11. public function updatescore(score) {
12. // updating the score
13. this.scoretext.text = String(score);
14. }
15. }
16.}
Посмотрите на строку 4, необходимо импортировать text.TextField, для того, чтобы получить рабочие текстовые поля (это свойство было у AS2) в 9 строке Вы увидите, что необходимо конвертировать несколько строк, прежде чем выводить данные в текстовое поле (в AS2 делать этого было не нужно).

Кроме данной детали, в классе score нет больше ничего примечательного, но более интересно, как другие классы вызывают его:

Вот новый coin.as:

ACTIONSCRIPT:
1.package {
2. import flash.display.Sprite;
3. import flash.events.Event;
4. public class coin extends Sprite {
5. // variables used in this class
6. private var dist_x:int;
7. private var dist_y:int;
8. private var distance:int;
9. // main function
10. public function coin() {
11. // calling place_coin function.
12. // this function randomly places the coin in the field
13. place_coin();
14. // checking for collisions at every frame
15. addEventListener(Event.ENTER_FRAME, check_collisions);
16. }
17. private function check_collisions(e:Event) {
18. // determining the distance between the hero and the coin
19. // notice how do I refer the hero
20. dist_x = x - as3circle(root).circle_hero.x;
21. dist_y = y - as3circle(root).circle_hero.y;
22. distance = dist_x*dist_x+dist_y*dist_y;
23. // 1809 = (hero radius + coin radius)^2
24. // this way I don't have to perform a square root to distance
25. if (distance <1089) {
26. // if the hero picks up a coin, then move it elsewhere
27. as3circle(root).add_score(1);
28. place_coin();
29. }
30. }
31. private function place_coin() {
32. x = Math.floor(Math.random()*400)+50;
33. y = Math.floor(Math.random()*300)+50;
34. }
35. }
36.}

Посмотрите на 27 строку, где я вызываю функцию add_score, добавляющую одно очко за каждую собранную монету. Где функция add_score?
Она в главном классе as3circle.as

ACTIONSCRIPT:
1.package {
2. import flash.display.Sprite;
3. import flash.events.Event;
4. public class as3circle extends Sprite {
5. public var keyboard_input:keys;
6. public var circle_hero = new circle;
7. public var your_score = new score;
8. public var level_wall = new wall;
9. public var my_score = 0;
10. public var number_of_coins = 4;
11. public function as3circle() {
12. for (var i=1; i<=number_of_coins; i++) {
13. var ingame_coin = new coin;
14. addChild(ingame_coin);
15. }
16. addChild(your_score);
17. addChild(circle_hero);
18. var keyboard_sprite = new Sprite();
19. keyboard_input = new keys(this);
20. addChild(level_wall);
21. stage.addEventListener(Event.ENTER_FRAME,on_enter_frame);
22. }
23. public function on_enter_frame(event:Event) {
24. if (keyboard_input.is_left()) {
25. circle_hero.apply_force(-1,0);
26. }
27. if (keyboard_input.is_right()) {
28. circle_hero.apply_force(1,0);
29. }
30. if (keyboard_input.is_up()) {
31. circle_hero.apply_force(0,-1);
32. }
33. if (keyboard_input.is_down()) {
34. circle_hero.apply_force(0,1);
35. }
36. }
37. public function add_score(points) {
38. my_score += points;
39. your_score.updatescore(my_score);
40. }
41. }
42.}

Сперва, в строке 7 я создаю переменную score, называемую your_score, добавляю в ступень 16 строки, и, таким образом, функция, добавляющая очки, находится в строках 37-40.

Когда я использую клип score только для того, чтобы показывать очки, тогда я сохраняю это в главном классе, благодаря переменной my_score, заданной в строке 9.

После этого, add_score обновляет очки в 38 строке и вызывает функцию, показывая обновленные очки на экране в строке 39.

Маленькое уточнение: coins.as вызывает функцию в as3circle.as, которая обновляет очки и вызывает score.as, записывающую обновления очков.

Остальные классы остаются те же!!!!
Admin
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

https://game-dll.forum2x2.ru

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения