#actionscript-3 #flash #resize
#actionscript-3 #flash #изменение размера
Вопрос:
У меня есть пара изображений, которые я хочу использовать в игре с перетаскиванием. Я добился этого с помощью фрагментов кода actionscript, но мне также нужно, чтобы эти изображения можно было изменять путем перетаскивания стрелки или чего-то подобного в нижнем углу. Я могу либо заставить перетаскивание работать, не включая код изменения размера, и наоборот.
this.addEventListener(MouseEvent.MOUSE_MOVE, resize);
this.addEventListener(MouseEvent.MOUSE_UP, stopDragging, true);
this.addEventListener(MouseEvent.MOUSE_DOWN, startDragging, true);
function startDragging(E:MouseEvent):void {
resize1.startDrag();
}
function stopDragging(E:MouseEvent):void {
resize1.stopDrag();
}
function resize(E:MouseEvent):void {
item1_mc.width = resize1.x - item1_mc.x;
item1_mc.height = resize1.y - item1_mc.y;
}
У кого-нибудь есть идеи, как это исправить? Я знаю, что мой код изменения размера изображения на данный момент примитивен, но его можно изменить на масштабирование достаточно скоро.
Комментарии:
1. Есть ли причина, по которой для параметра capture установлено значение true?
Ответ №1:
Вы должны разделить свой видеоролик с изображением (или что у вас там есть) на две части — одну перетаскиваемую, а другую изменяемую таким образом
myImageWidget (this is your parent movicelip)
|
|- imageMC (this will hold the image and will be the draggable object)
|- arrowMC (this is your arrow that will be OVER your image and will be used to resize)
Затем В ВАШЕМ «myImageWidget» вам нужно что-то вроде этого (избавьтесь от всего «этого»., это не имеет смысла 🙂
// image MC will listen for clicks and start dragging
imageMC.addEventListener(MouseEvent.MOUSE_UP, stopDragging, true);
imageMC.addEventListener(MouseEvent.MOUSE_DOWN, startDragging, true);
// arrow MC will listen for clicks and start resizing
arrowMC.addEventListener(MouseEvent.MOUSE_UP, stopResizing, true);
arrowMC.addEventListener(MouseEvent.MOUSE_DOWN, startResizing, true);
function startDragging(E:MouseEvent):void
{
startDrag();
}
function stopDragging(E:MouseEvent):void
{
stopDrag();
}
function startResizing(E:MouseEvent):void
{
addEventListener(MouseEvent.MOUSE_MOVE, resize);
}
function stopResizing(E:MouseEvent):void
{
removeEventListener(MouseEvent.MOUSE_MOVE, resize);
}
function resize(E:MouseEvent):void
{
// you will adjust this to local coordinates since you are inside of the imageWidget
width = mouseX;
height = mouseY;
}
Комментарии:
1. Спасибо за помощь! Похоже, что это имеет смысл, и теперь это позволяет перетаскивать его туда, куда мне нужно. Единственная проблема сейчас заключается в том, что перетаскивание стрелки, которая представляет собой отдельный видеоролик, размещенный рядом с видеороликом, размер которого я хочу изменить, ничего не делает. Нет перемещения и нет изменения размера. Есть идеи, почему?
2. Вы поместили видеоролик со стрелкой внутрь виджета, верно? Вы говорите, что это отдельно …?
3. Возможно, вам потребуется выполнить
stopPropagation()
вызов, чтобы предотвратить вызов событий, которые были добавлены позже. Я не могу объяснить все это в комментарии, но вы можете погуглить это. В основном это зависит от того, перекрываются ли стрелка и изображение вообще4. Какая у вас стрелка? Это видеоролик? И да, это должно быть ВНУТРИ «ImageWidget», вы все еще хотите перетаскивать его с помощью вашего ImageWidget, верно?
5. Стрелка, которую я получил, — это видеоролик. Я новичок в ActionScript, поэтому не совсем уверен, что вы подразумеваете под виджетом. Я немного погуглил, но там нет тонны четкой информации о том, что на самом деле означает виджет.