PDA

Просмотр полной версии : Перемещение главного окна


Godwarlock
13.06.2013, 17:49
Есть флешка. На сцене брошен большой квадрат, размером в 2000х2000(условно). В окне браузера естественно она не будет помещаться у тех, у кого монитор небольшого разрешения. Вопрос. Как сделать так, чтобы при клике мыше и держа её можно было перемещаться по этому большому квадрату. То есть если на нем брошены объекты, то просмотреть можно не только те, что помещаются в браузере, но и те что скрыты за пределом) Как я понял нужно создать событие на кнопку мыши, но как то не получается) Помогите кто может)

olexandr
14.06.2013, 00:12
самый простой пример.

target.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);

private function downHandler(e:MouseEvent):void {
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
target.startDrag(false, _bounds);
}

private function upHandler(e:MouseEvent):void {
target.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, upHandler);
}

}
}

target - объект, по которому кликаем и таскаем
bounds - границы перетаскивания

Godwarlock
14.06.2013, 01:50
\class2.as, строка 9 1013: Атрибут "private" можно использовать для определений свойств класса.
Вот такую ошибку выдает

maincode
14.06.2013, 01:52
пишите на кадрах в IDE? ай яй яй... ну что с вами поделать... убирайте private :)

Godwarlock
14.06.2013, 02:06
target.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);

function downHandler(e:MouseEvent):void {
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
target.startDrag(false, _bounds);
}

function upHandler(e:MouseEvent):void {
target.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, upHandler);
}


Теперь выдаёт
Монтажный кадр 1, слой "Слой 2", кадр 1, строка 5 1067: Неявное приведение значения типа flash.display:MovieClip к несоответствующему типу flash.geom:Rectangle.


Можете расшифровать "... на кадрах IDE"?) Как по другому нужно? Или правильнее даже

maincode
14.06.2013, 02:09
_bounds - это у вас MovieClip? а должен быть Rectangle

var _bounds:Rectangle = new Rectangle(...);


Правильнее будет писать в нормальном редакторе кода, например Adobe Flash Builder, Flash Develop и т.п.

Godwarlock
14.06.2013, 02:19
Правильнее будет писать в нормальном редакторе кода, например Adobe Flash Builder, Flash Develop и т.п.
На сколько мне известно, это аналоги реального флеша с ограниченными возможностями)

А по поводу кода, что-то не очень работает) Точнее, ошибок не выдаёт, перемещать можно, но флеш не видит границ)
_bounds - растягивается до миллионых размеров наверно

maincode
14.06.2013, 02:28
На сколько мне известно, это аналоги реального флеша с ограниченными возможностями)

Adobe Flash - это графический редактор, инструмент для рисования, создания анимации, но ни как не инструмент для написания кода. Конечно вы можете в нем писать код, но это все равно что писать Докторскую диссертацию в Фотошопе, когда есть Word для этих целей. Точно так же для написания кода существуют редакторы кода FlashBuilder, FlashDevelop и другие аналоги...


А по поводу вашего кода - наверно вы не правильно определили границы _bounds

Godwarlock
14.06.2013, 02:36
А как их определить?
var _bounds:Rectangle = new Rectangle();
Вот здесь что-то надо добавить? Или во флеше символ _bounds должен быть каким-то определенным) Или в коде нужно прописать X и Y?)

Bletraut
14.06.2013, 12:04
Godwarlock, вам надо бы конечно для начала сам as3 изучить что бы очевидные глупые вопросы не задавать.
А у var _bounds:Rectangle = new Rectangle(); в конструкторе идут парметры [x,y,width,height]. Но думаю это вам ни о чем не говорит, поэтому чтобы создать границы вам нужно сделать так.
var _bounds:Rectangle = target.getRect(target);

Godwarlock
15.06.2013, 13:56
Что-то не работает. Тоже самое. _bounds растягивается на весь экран

olexandr
15.06.2013, 14:07
Параметр, который я назвал _bounds - это прямоугольная область, в которой можно перетягивать объект.
Задается он в таком формате:
http://www.flasher.ru/forum/images/russian/style3/buttons/collapse_thead_collapsed.gif (http://www.flasher.ru/forum/#) Код AS3:
var _bounds:Rectangle = new Rectangle(x, y, width, height)
Возможно, вам нужно перетягивание вообще без ограничений? Тогда просто выкиньте этот параметр.
если нужны ограничения, то:
У каждого объекта есть позиция x и y, и размеры width и height. Допустим, нам нужно перетягивать объект target в пределах области от (0, 0) до (400, 200). в данном случае, код нужен такой
http://www.flasher.ru/forum/images/russian/style3/buttons/collapse_thead_collapsed.gif (http://www.flasher.ru/forum/#) Код AS3:
target.startDrag(false, new Rectangle(0, 0, 400 - _target.width, 200 - target.height));
Если у вас и сейчас что-то не получится, то бросайте это гиблое дело...

Godwarlock
15.06.2013, 14:27
Всё работает) Спасибо большое) Более менее разобрался)