Форум 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=211027)

dubspectra 13.06.2015 09:19

Из точки "А" в точку "В"
 
Здравствуйте!

Задача:
При нажатии кнопки мыши, в точке "А" появляется объект. И начинает двигаться в ту точку где был курсор мышки во время щелчка, по прибытию удаляется.

я создал объект (класс)
поставил слушателя событий на щелчек мыши.
по щелчку объект появляется в точке

но как же наделить объект таким свойством, чтобы он летел туда куда мышка щелкнула?

Подскажите пожалуйста! Думаю для Вас, опытных флэшеров это не составит труда.

Заранее, Большое спасибо!

Zebestov 13.06.2015 11:13

А как ты делаешь? Хотя бы первые шаги до того момента, где затык.

dubspectra 13.06.2015 12:08

есть класс Rocket (extend MovieClip)

в основном классе стоит обработчик событий:

Код AS3:

var r:Rocket = new Rocket;
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, fire);
 
function fire(e:Event){
 
addChild(r);
r.x = 30;
r.y = 230;
 
}

Вопрос:

Как сделать чтобы ракета (r:Rocket) летела в точку куда щелкнула мышка?

alexandrratush 13.06.2015 14:04

stageX и stageY, только вместо Event напишите MouseEvent

ZackMercury 13.06.2015 14:13

Вложений: 2
DirectionMotionExample.swf   (18.4 Кб)


Вот.

samana 13.06.2015 14:31

У меня почти то же самое что и у ZackMercury, но вдруг пригодится.
Это класс вашей ракеты. У неё есть метод moveToTarget, который двигает ракету к заданной цели.
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.geom.Point;
 
        /**
        * ...
        * @author samana
        */

        public class Rocket extends Sprite
        {
                private var _target:Point = new Point(); //сюда запишем точку, куда нужно двигаться (клик мыши)
                private var _speedX:Number;
                private var _speedY:Number;
 
                public var speed:Number = 10; //скорость движения
 
 
                // начать движение к заданной точке
                public function moveToTarget(targetX:Number, targetY:Number):void
                {
                        _target.x = targetX;
                        _target.y = targetY;
 
                        var dx:Number = _target.x - x;
                        var dy:Number = _target.y - y;
                        var ang:Number = Math.atan2(dy, dx);
 
                        _speedX = Math.cos(ang) * speed;
                        _speedY = Math.sin(ang) * speed;
 
                        //повернуть объект в сторону движения если надо
                        rotation = ang / Math.PI * 180;
 
                        addEventListener(Event.ENTER_FRAME, enterFrame_moved);
 
                }
 
                private function enterFrame_moved(e:Event):void
                {
                        //узнаём расстояние между объектом и целью
                        var dx:Number = _target.x - x;
                        var dy:Number = _target.y - y;
                        var dist:Number = Math.sqrt(dx * dx + dy * dy);
 
                        //если расстояние между объектом и целью меньше шага скорости, то останавливаемся
                        if (dist < speed)
                        {
                                x = _target.x;
                                y = _target.y;
                                removeEventListener(Event.ENTER_FRAME, enterFrame_moved);
                                if (parent) parent.removeChild(this);
                                //trace(this, "stoped");
                        }
                        //иначе движемся к цели
                        else
                        {
                                x += _speedX;
                                y += _speedY;
                                //trace(this, "is moved");
                        }
 
                }
 
        }
 
}

Запуск по клику на сцене, примерно такой:
Код AS3:

public class Main extends Sprite 
{
 
        private var _pointA:Point;
 
        public function Main()
        {
                _pointA = new Point(50, 50);
                stage.addEventListener(MouseEvent.CLICK, stage_click);
        }
 
        private function stage_click(e:MouseEvent):void
        {
                var rocket:Rocket = new Rocket();
                rocket.x = _pointA.x;
                rocket.y = _pointA.y;
                addChild(rocket);
 
                rocket.moveToTarget(stage.mouseX, stage.mouseY);
        }
}


dubspectra 13.06.2015 14:36

2ZackMercury
2samana

Ребята, спасибо огромное!!! Сейчас буду изучать и внедрять, это именно то что нужно!!!!
Большое спасибо!

Добавлено через 1 минуту
p.s.

Загрузил картинку в профиль, еще несколько дней назад, а она не отображается,
Уже и модератору писал...не отвечает...

ZackMercury 13.06.2015 14:51

http://ipic.su/img/img7/fs/Snimok.1434192685.png

dubspectra 13.06.2015 16:38

2ZackMercury

Ахахах) Спасибо))

Zebestov 13.06.2015 17:16

Оффтоп: ава классная!


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

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