![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
Есть 2е картинки, мап и спрайт, нужно чтобы при нажатии на мап, двигалась сама картинка и все повешенные на нее обьекты, при этом нужно, чтобы была возможность перетаскивать эти сами обьекты.
Подскажите как. [Embed(source = "../lib/map.jpg")] var mapjpg:Class; [Embed(source = "../lib/sprit1.png")] var spr1:Class; var map: DisplayObject = new mapjpg(); var spr: DisplayObject = new spr1(); var sprite:Sprite = new Sprite(); addChild(sprite); sprite.addChild (map); spr.x = 1000; spr.y = 0; sprite.addChild(spr); sprite.addEventListener(MouseEvent.MOUSE_DOWN, on_MD); sprite.addEventListener(MouseEvent.MOUSE_UP, on_MU); spr.addEventListener(MouseEvent.MOUSE_DOWN, aa1); function aa1(e:MouseEvent):void {e.currentTarget.startDrag();} function on_MD(e:MouseEvent):void {e.currentTarget.startDrag();} function on_MU(e:MouseEvent):void {e.currentTarget.stopDrag();} |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { [Embed(source = "../lib/map.jpg")] private const mapClass:Class; [Embed(source = "../lib/sprit1.png")] private const objClass:Class; public function Main():void { var container:Sprite = new Sprite(); this.addChild(container); var mapImage:Bitmap = new mapClass(); container.addChild(mapImage); var mapObject:Sprite = new Sprite(); mapObject.addChild(new objClass()); container.addChild(mapObject); container.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); container.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } private function mouseUpHandler(event:MouseEvent):void { event.target.stopDrag(); } private function mouseDownHandler(event:MouseEvent):void { event.target.startDrag(); } } } (Битмап не генерит мышиные события. Он не наследует InteractiveObject)
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
спс.
Если не сложно объясните смысловую нагрузку этих строк зачем в принципе первая строчка? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Объясняю: (Битмап не генерит мышиные события. Он не наследует InteractiveObject)
Поэтому битмап ( new objClass() ) добавляем в интерактивный контейнер — спрайт mapObject, чтобы он мог "ловить" нажатие мыши. В вашем коде spr.addEventListener(MouseEvent.MOUSE_DOWN, aa1); не имеет смысла, потому что битмап spr никогда не пошлет событие MouseEvent.MOUSE_DOWN, соответственно обработчик аа1 никогда не будет вызван.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
Примерно понял, спс.
Еще вопрос тогда, как в вашем случае обратиться к mapObject? Хотябы посмотреть координаты. container.addEventListener(MouseEvent.MOUSE_MOVE, mouseMOVE); function mouseMOVE (event:MouseEvent):void { trace(mapObject.x); trace(container.mapObject.x); } функция незнает о таком обьекте... получается можно обратиться только к текущему? А если надо например сравнить координаты нескольких обьектов на карте? Добавлено через 27 минут Если работать только с текущим обьектом, то получается примерно так function mouseMOVE (event:MouseEvent):void { if (event.target.x < 0) {event.target.x = 0;} if (event.target.y < 0) {event.target.y = 0;} например, чтобы обьект нельзя было вытащить за пределы контейнера. МАПа точнее Последний раз редактировалось fduch; 25.09.2012 в 21:51. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
"Функция не знает" потому что переменная mapObject объявлена в другой функции — в конструкторе.
Если объявить mapObject как член класса (private var mapObject:Sprite) а не как локальную переменную конструктора, она будет видна для всех других членов класса, включая методы-обработчики. Если объектов много, можно нашпиговать ими массив и сделать его членом класса.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
глобальную переменную то я сделал, я думал, есть какойто более грамотный способ спс.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Метод startDrag вообще-то принимает параметры, в том числе прямоугольник, в котором разрешено таскать объект
![]() Другое дело, что прямоугольник надо будет пересчитывать для объектов разного размера, чтобы отделить лимитные поля справа и снизу (иначе объект будет уходить своей нижней границей ниже границы карты — прямоугольник определяет область, в которой может находиться точка (0, 0) таскаемого объекта).
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
да, я в курсе.
Тока вот тут проблема возникла, если обьявить обе переменные глобальные, то mapImage.x и y всегда равны 0, даже когда обьект двигаешь, а вот координаты mapObject имеют нормальное значение(в пределах mapImage) как мне узнать координаты mapImage? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
mapImage находится в контейнере, и относительно него никуда не смещается. Мы двигаем контейнер, в котором лежит mapImage и объекты. Координаты этого контейнера Вас и должны интересовать, а не картинки))
Добавлено через 6 минут Цитата:
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|