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

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

Перейти вниз

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

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

Продолжаем объектно-ориентированное программирование, новый объект под названием стена, имеет класс, закодированный в файле с именем wall.as, и сохраненный в той же ветви, что и предыдущие объекты.
Вот как можно создать объект «стена» в главном файле 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 level_wall = new wall;
8. public var number_of_coins = 4;
9. public function as3circle() {
10. for (var i=1; i<=number_of_coins; i++) {
11. var ingame_coin = new coin;
12. addChild(ingame_coin);
13. }
14. addChild(circle_hero);
15. var keyboard_sprite = new Sprite();
16. keyboard_input = new keys(this);
17. addChild(level_wall);
18. stage.addEventListener(Event.ENTER_FRAME,on_enter_frame);
19. }
20. public function on_enter_frame(event:Event) {
21. if (keyboard_input.is_left()) {
22. circle_hero.apply_force(-1,0);
23. }
24. if (keyboard_input.is_right()) {
25. circle_hero.apply_force(1,0);
26. }
27. if (keyboard_input.is_up()) {
28. circle_hero.apply_force(0,-1);
29. }
30. if (keyboard_input.is_down()) {
31. circle_hero.apply_force(0,1);
32. }
33. }
34. }
35.}
Переменная level_wall записана в 7 строке, после этого я просто помещаю объект «стена» в игру в 17 строку.
Это все, что касается главного файла. Обратите внимание, как стройно все выглядит, не смотря на изобилие нововведенных деталей.
В этом вся прелесть классов. Помните.
Что касается wall.as файла, здесь все полностью расписано:

ACTIONSCRIPT:
1.package {
2. import flash.display.Sprite;
3. import flash.events.Event;
4. public class wall extends Sprite {
5. // variables used in this class
6. private var point_x:int;
7. private var point_y:int;
8. // precision is the number of points I am going to calculate
9. // on hero's circumference
10. private var precision:int = 36;
11. // calculating once for all 2*PI
12. private var twopi: Number = Math.PI*2;
13. // main function
14. public function wall() {
15. place_wall();
16. // checking for collisions at every frame
17. addEventListener(Event.ENTER_FRAME, check_collisions);
18. }
19. private function check_collisions(e:Event) {
20. for (var i=0; i<precision; i++) {
21. // checking for collisions between the hero and the wall
22. point_x = as3circle(root).circle_hero.x + 25 * Math.cos(twopi*i/precision);
23. point_y = as3circle(root).circle_hero.y - 25 * Math.sin(twopi*i/precision);
24. if (this.hitTestPoint(point_x, point_y, true)) {
25. // in case of collision, reset the hero
26. as3circle(root).circle_hero.init();
27. }
28. }
29. }
30. private function place_wall() {
31. x=0;
32. y=175;
33. }
34. }
35.}
Чтобы проверить столкновение героя и стены, я пользуюсь законами тригонометрии, потому что в данном случае эти расчеты гораздо более точны, чем hitTestObject().
avatar
Admin
Admin

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

Посмотреть профиль http://game-dll.mirbb.net

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

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

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

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