Это выглядит довольно хорошо. Есть несколько методов, которые больше не могут использоваться (в основном к лучшему) в AS3. Я объясню это ниже.
duplicateMovieClip
осуждается в AS3. В AS3 нет простого «дублирующего» метода, но там есть несколько способов сделать несколько копий мувиклипа (mc).
4as, блог, посвященный Flash-программированию, дает действительно хорошие примеры/учебники для реализации нескольких этих методов, но мой любимый (и я считаю, самый простой) заключается в том, чтобы просто создать пользовательский класс из mc you будут использоваться не один раз («дублирование»).
Начните с перехода в mc в своей библиотеке и щелкните правой кнопкой мыши, чтобы открыть параметр свойств. Когда откроется окно свойств Symbol, установите флажок «Экспорт для ActionScript» и запомните текст, который находится в текстовом поле «Класс». * Если вы не видите эти параметры в окне свойств Symbol, убедитесь, что ваши расширенные параметры видны.
Теперь, когда вы создали класс для МЦ, в вашем коде вы можете легко создать дубликат MC, когда вы хотите, написав:
//this creates a new movieclip called mc that is a
//duplicate of the movieclip class you created.
//replace className with the text from the "Class"
//textbox in the symbol properties window
var mc:MovieClip = new className();
Для того, чтобы поставить этот дублированный тс на этап, вызовите addChild()
или addChildAt()
метод:
//adds a movieclip to the stage
addChild(mc);
//adds a movieclip to the stage at a certain depth
addChildAt(mc,0);
_rotation
больше не используется в AS3. Вместо этого используйте rotation
без подчеркивания.
//rotate movieclip by a certain amount
mc.rotation=180;
totalFrames
на самом деле технически AS3 (_totalFrames
в AS2). Однако, как вы его назвали, это было неправильно. Вместо того, чтобы говорить mc.MovieClip.totalFrames
, который запрашивает общее количество кадров из мувиклипа под названием MovieClip внутри мувиклипа под названием mc, вам просто нужно сказать mc.totalFrames
. Это запрашивает общее количество кадров внутри мувиклипа mc, которое в этом случае является тем, что мы хотим.
Вот ваш код переписан в as3, принимая эти изменения во внимание (и с небольшим количеством поправок на забытую скобку и странное расстояние):
//create the invisible starting mc **Not actually necessary**
/*
var start_mc:MovieClip = new part();
addChild(start_mc).visible = false;
*/
//initialize i
var i:Number = 0;
//initialize total
var total:Number = 100;
//loop i to total
for(;i<total;i++){
//Create a new mc
var mc:MovieClip = new part();
//Add that mc to the stage and name it "mc" followed by the number "i"
addChildAt(mc,i).name="mc"+i;
//rotate mc random number of degrees 0-359
mc.rotation=(Math.floor(Math.random() * 360));
//gotoAndPlay (do you really mean play?) random frame
mc.gotoAndPlay(Math.floor(Math.random()*mc.totalFrames)+1);
}
Вы можете заметить, что я не используя this["mc"+i]
, чтобы изменить мувиклип после его создания. В as3 вы можете ссылаться на вновь созданный мувиклип переменной, которую вы использовали для ее создания. В этом случае mc
. Однако, если вы не доверяете этому методу или вам нужно изменить каждый из них отдельно, вы можете использовать метод getChildByName()
.
this.getChildByName("mc"+i).rotation=180;
Надеюсь, это поможет!
редактировать:
Working example
Я добавил случайное масштабирование, чтобы сделать его красивее.
Попробуйте загрузить .fla, чтобы узнать, как структурированы код и мувиклипы.
Я ценю это, большое спасибо. Я снова буду здесь, инфакт, это мой дом сейчас! Не уставайте от меня – Guyz
Если это вам помогло, обязательно ответьте, нажав галочку слева. – Enigmadan
Enigmadan, это очень помогло, спасибо. Моя маленькая проблема, хотя это частицы/звезды, которые я собираюсь, больше не рождаются, не излучают и не летают из символа источника mc, а вместо этого, mc, который я поддерживал внутри mc, перемещается вправо как единый объект. Как исправить это? – Guyz