Вы можете выбрать символ вы хотите, чтобы сделать дубликат в Library Panel, перейдите к Symbol Properties (щелкнув правой кнопкой мыши значок и выберите Свойства ) и включите Экспорт для ActionSc НИИЮ
В качестве примера символа, я создал символ плюс и названный символ Plus.
После того, как вы сделали это, вы можете легко создать новый экземпляр этого символа:
addChild(new Plus());
Обратите внимание, что Plus
то же самое вы дали символ в символ свойства, так что если вы называете ваш символ MovieClip_1 в библиотеке, и она экспортируется в ActionScript код будет выглядеть следующим образом:
addChild(new MovieClip_1());
Если вы сделаете это, вы заметите, что символ будет помещен на 0,0, так что следующее, что нужно сделать, это установить x, y положение нового inst Анс. Прежде всего, необходимо создать переменную, которую можно повторно использовать для этого экземпляра:
var newPlus:MovieClip = new Plus();
Тогда вы можете получить доступ к его x
и y
свойства, так же как и любой другой MovieClip.
Поскольку вы используете MOUSE_DOWN
событие, чтобы создать дубликат, вы можете использовать MouseEvent's stageX and stageY свойства:
function fl_ClickToDrag_2(event:MouseEvent):void
{
var newPlus:MovieClip = new Plus();
newPlus.x = event.stageX;
newPlus.y = event.stageY;
addChild(newPlus);
}
Просто нужно, чтобы начать перетаскивание:
function fl_ClickToDrag_2(event:MouseEvent):void
{
var newPlus:MovieClip = new Plus();
newPlus.x = event.stageX;
newPlus.y = event.stageY;
addChild(newPlus);
newPlus.startDrag();
}
Конечно, нужно слушать этап MOUSE_UP
событие, чтобы остановить перетаскивание. Для этого мы можем сделать переменную, хранящую ссылку на последний дублированный клип вне обработчика MOUSE_DOWN
. Таким образом, всякий раз, когда добавляется новый клип, он будет доступен/видим из обработчика MOUSE_UP
, поэтому перетаскивание может остановиться. Уловка заключается в проверке того, был ли первый клип взят первым, потому что пользователь может щелкнуть по сцене без создания дубликата.
Вот прокомментировал фрагмент:
import flash.display.MovieClip;
//a reference to the latest/most recently cloned movie clip
var latestClone:MovieClip;
plus.addEventListener(MouseEvent.MOUSE_DOWN, onPlusPressed);
function onPlusPressed(event:MouseEvent):void
{
//make a new instance using the linkage/Export for ActionScript name
latestClone = new Plus();
//copy mouse position to movie clip position
latestClone.x = event.stageX;
latestClone.y = event.stageY;
//add it to the stage
addChild(latestClone);
//start dragging it, instead of the symbol manually placed on stage
latestClone.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, onStageReleased);
function onStageReleased(event:MouseEvent):void
{
//if there was a clone already made/dragged
if(latestClone != null){
//then release it
latestClone.stopDrag();
}
}
Обратите внимание, что я назвал один символ плюс помещается вручную на этапе plus
. Так экземпляр на сцене plus
, то/имя класса символ Plus
:
Вы можете запустить эту here и скачать zipped xfl Flash source here
Update на Основываясь на ваш комментарий сильфона, оказывается, это не так сложно сделать дублированные экземпляры перетаскиваемыми. Это можно установить в 3 этапа:
- Добавить обработчик события
MOUSE_DOWN
для клонированного экземпляра. Теоретически вы можете повторно использовать существующий обработчик, но вам нужно будет иметь способ дифференцировать источник клонирования мувиклипа и клонированные экземпляры. Это будет чище иметь отдельный обработчик, используемый только клонированные экземплярами
- Установите
latestClone
ссылки на данный момент щелкнули клонированные например: таким образом onStageReleased
обработчика может быть повторно использован также прекратить перетаскивание клонированных экземпляров
- перетаскивайте
Основываясь на предыдущем примере кода, используя символ Plus, обновленный фрагмент кода выглядит следующим образом:
import flash.display.MovieClip;
import flash.events.MouseEvent;
//a reference to the latest/most recently cloned movie clip
var latestClone:MovieClip;
plus.addEventListener(MouseEvent.MOUSE_DOWN, onPlusPressed);
function onPlusPressed(event:MouseEvent):void
{
//make a new instance using the linkage/Export for ActionScript name
latestClone = new Plus();
//copy mouse position to movie clip position
latestClone.x = event.stageX;
latestClone.y = event.stageY;
//add it to the stage
addChild(latestClone);
//start dragging it, instead of the symbol manually placed on stage
latestClone.startDrag();
//add a separate MOUSE_DOWN event handler for the cloned instance
latestClone.addEventListener(MouseEvent.MOUSE_DOWN,onClonedPlusPressed);
}
//event handler for a cloned instance
function onClonedPlusPressed(event:MouseEvent):void{
//set the latest clone to be what's currently clicked (MouseEvent's current target)
//for more details on target/currentTarget and event bubbling see http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html
latestClone = MovieClip(event.currentTarget);//event.currentTarget return an Object and latestClone is a MovieClip, therefore we cast the currentTarget Object to a MovieClip type
//start dragging
latestClone.startDrag();
}
stage.addEventListener(MouseEvent.MOUSE_UP, onStageReleased);
function onStageReleased(event:MouseEvent):void
{
//if there was a clone already made/dragged
if(latestClone != null){
//then release it
latestClone.stopDrag();
}
}
Вы можете включить экспорт для Actionscript опции контекстного меню на символе библиотеки используется movieClip_1. Как только вы это сделаете, вы можете легко создать новый экземпляр и скопировать координаты x, y. ... –
После того, как вы экспортируете movieClip_1 для actionscript как MovieClip_1 (соглашение заключается в использовании первой буквы в начале имени класса), вы можете сделать что-то вроде этого в '' 'fl_ReleaseToDrop_2''':' '' movieClip_1.stopDrag() ; // создаем новый экземпляр символа библиотеки - предполагается, что вы установили ссылку/Export для имени ActionScript как MovieClip_1 (смотрите M) var duplicate: MovieClip = new MovieClip_1(); // копирует координаты мыши -> это глобальные координаты этапа duplicate.x = event.stageX; duplicate.y = event.stageY; // добавить мувиклип на главную сцену addChild (duplicate); '' ' –
Использовать ООП, и делать это будет легко. Время развиваться. – BotMaster