Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание выстрела (http://www.flasher.ru/forum/showthread.php?t=173639)

startup 07.01.2012 22:57

Создание выстрела
 
Добрый вечер.
Пытаюсь разобраться с Flash и ActionScript 3 в частности, на примере простой игрушки.
Есть шарик, которым управляю стрелками на клавиатуре, необходимо научить его стрелять.

Имеется класс:

Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.events.MouseEvent;
 
        public class Hero extends MovieClip
        {
 
                var speedX:Number = 0;
                var speedY:Number = 0;
                var power:Number = 1;
                var friction:Number = 0.95;
 
                var left:Boolean = false;
                var up:Boolean = false;
                var right:Boolean = false;
                var down:Boolean = false;
 
                public function Hero(){
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
                        stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);
                        stage.addEventListener(Event.ENTER_FRAME, HeroMotion);
                        stage.addEventListener(MouseEvent.CLICK, Bullet);
                }
 
                public function KeyDown(e:KeyboardEvent):void
                {
                        switch(e.keyCode){
                                case 37: left = true; break;
                                case 38: up = true; break;
                                case 39: right = true; break;
                                case 40: down = true; break;
                        }
                }
 
                public function KeyUp(e:KeyboardEvent):void
                {
                        switch(e.keyCode){
                                case 37: left = false; break;
                                case 38: up = false; break;
                                case 39: right = false; break;
                                case 40: down = false; break;
                        }
                }
 
                public function HeroMotion(e:Event):void
                {
                                if(left == true){speedX -= power;}
                                if(right == true){speedX += power;}
                                if(up == true){speedY -= power;}
                                if(down == true){speedY += power;}
                                speedY *= friction;
                                speedX *= friction;
                                this.x += speedX;
                                this.y += speedY;
                }
                public function Bullet(e:Event):void
                {
                        // Здесь должен быть выстрел
                }
        }
}

По щелчку мышки выполняется функция Bullet(), которая должна реализовать выстрел.
Подскажите, пожалуйста, как это сделать? Можно просто движение пули по оси X.

Vektor 08.01.2012 02:15

Создать пулю(MovieClip).
Код AS3:

public function Bullet(e:Event):void
{
пуля.addEventListener(Event.ENTER_FRAME,fEnterFrame)
пуля.x =this.x;
пуля.y=this.y
}
public function fEnterFrame(e:Event):void
{
пуля.x += 10;
//Если, пуля попала в цель или вышла за экран.
пуля.removeEventListener(Event.ENTER_FRAME,fEnterFrame)
}

Приблизительно так.

startup 08.01.2012 03:01

Спасибо, но у меня есть загвоздка непосредственно с доступом из класса.

1. Нарисовал пулю
2. Выделил, нажал F8, ввел название mcBullet

Что сделать дальше, как сделать этот MovieClip доступным из класса Hero?

Flashrunner 08.01.2012 03:17

Код AS3:

var bullet:MovieClip = new mcBullet();


startup 08.01.2012 03:31

Flashrunner, спасибо. Вставил, получил следующее:

Код AS3:

                public function Bullet(e:Event):void
                {
                        var bullet:MovieClip = new mcBullet();
                        bullet.addEventListener(Event.ENTER_FRAME,BulletMovie);
                        bullet.x = this.x;
                        bullet.y = this.y;
                }
                public function BulletMovie(e:Event):void
                {
                        bullet.x += 10;
                }

Но, ничего не происходит. Пуля не летит.

Vektor 08.01.2012 03:53

Код AS3:

public function Bullet(e:Event):void
                {
                        var bullet:mcBullet = new mcBullet();
 
                        addChild(bullet);
 
                      bullet.addEventListener(Event.ENTER_FRAME,BulletMovie);
                        bullet.x = this.x;
                        bullet.y = this.y;
                }
                public function BulletMovie(e:Event):void
                {
                        bullet.x += 10;
                }


startup 08.01.2012 04:03

Vektor, спасибо большое, теперь полетело, правда немного изменил код.
Вынес переменную за пределы функции, а

Код AS3:

addChild(bullet);

заменил на

Код AS3:

stage.addChild(bullet);


ProxyGreen 08.01.2012 04:58

Почему бы просто не сделать массив пуль, и по таймеру обходя этот массив сдвигать все пули. В любом случае, потом понадобиться проверять пули на столкновение с другими объектами. Или например поставить игру на паузу.


Часовой пояс GMT +4, время: 21:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.