PDA

Просмотр полной версии : Динамическое изменение MovieClip'а


NAO111
15.10.2011, 11:14
Доброго времени суток! Подскажите пожалуйста, как реализовать такую штуку:
Есть мувик с n кадравми.
Нужно при помощи ActionScript добавить в кадр m дисплейный объект Object...

spooner
15.10.2011, 11:19
Object не "дисплейный объект".
А вообще
mc.gotoAndStop(n);
mc.addChild(object);

NAO111
15.10.2011, 11:28
Object не "дисплейный объект".

m и n тоже не числа )))

К сожалению, то что пришло на ум с первого взгляда на проблему - был именно приведенный Вами код.. И опять же, к сожалению он не работает - отсюда и собсно проблема.

Vansimar
15.10.2011, 11:36
у меня этот код всегда работал..

goodguy
15.10.2011, 12:07
m и n тоже не числа )))
Тогда.
mc.gotoAndStop("n");
mc.addChild(object);
Если и это не сработает, значит нужно менять корявую архитектуру проекта.

fish_r
15.10.2011, 14:32
может так?


...
mc.addEventListener( Event.ENTER_FRAME, mcEnterFrameHandler);
...

function mcEnterFrameHandler(e:Event):void
{
if( mc.currrentFrame === n )
{
mc.addChild( object);
}

}



кстати, в кадрах или в классе пишете?

NAO111
16.10.2011, 04:21
В классе конечно! Когда я делаю как приведено выше, получается, что новый объект виден во всех кадрах мувика, а не только в том, в который я его добавил...

Cornford
16.10.2011, 09:58
помоему это естественно, ведь объект добавляется в сам мувиклип.

Добавлено через 2 минуты
мне кажется придется писать свой класс который к примеру будет отрисовывать какждый кадр в BitmapData, и там уже добавлять объект в конкретный кадр.

NAO111
16.10.2011, 11:38
Есть MovieClip с тремя кадрами. В кадрах едет квадратик при помощи MotionTween.
Для того, чтобы получить битмап каждого кадра делаю так:
Перевожу мувик на кадр1, все объекты с этого кадра addChild'ю на заранее созданный Sprite, из Sprit'а получаю BitmapData, там уже Bitmap.
Перевожу на второй кадр мувик и тут начинается проблема.. На предыдущем шаге то я все снес с этого мувика вообще путем метода addChild... так как анимация на MotionTween'е, то весь этот квадратик с его тремя кадрами благополучно перекочевал на Sprite в предыдущем шаге.....как быть?((((((

fish_r
16.10.2011, 12:34
по моему ответ очевиден: после отрисовки на спрайте addChild-ить обратно на мувик...

ЗЫ. Вы ведь понимаете, что что-то "мудрите"? Почему, например, не отрисовывать в битмапдату сам мувик?

NAO111
16.10.2011, 12:35
Обратно addChild'ить на мувик? Тогда тут другая проблема - как addChild'ить в произвольный кадр мувика..

Я это и пытаюсь сделать (перевести мувик в битмапу).. А что, есть какой то другой (отличный от моего) способ решения этой задачи?

-De-
16.10.2011, 13:08
Нельзя програмно добавить что-то не во все кадры мувика.
Не используйте кадры не как просто анимацию. Это ведёт к куче весьма противных проблем. Если, например, у вас был мувик с 3-мя кадрами, то, например, разбейте его на 3 мувика и добавляйте на сцену один, а остальные убирайте програмно.

NAO111
16.10.2011, 13:17
И снова вездесущий вопрос - как разбить на три отдельных мувика?

Inet_PC
16.10.2011, 13:28
Сделать три отдельных мувика, не?

crazyone
16.10.2011, 13:33
1) Чтобы добавить что-то только на какой-нибудь кадр, попробуйте сделать вот так:
package com.ds.test {
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.Event;

/**
* ...
* @author DoctorSTaL
*/
public class AddObjectToFrame extends MovieClip {
var object:Shape = new Shape();
var frame = 10;
public function AddObjectToFrame() {
super();
this.object.graphics.beginFill(0xff0000);
this.object.graphics.drawCircle(50, 50, 50);
this.addFrameScript(this.frame-1,this.addObject);
this.addEventListener(Event.EXIT_FRAME,this.checkObject);
}

private function addObject():void {
this.addChild(object);
}

private function checkObject(e:Event):void {
// Вот тут может понадобиться изменение - не помню точно про номер кадра, и проверить не могу.
if (this.currentFrame == n) {
this.removeChild(object);
}
}

}

}

2) Про отрисовку не совсем понятно - зачем переносить на новый спрайт. Мувик тоже можно отрисовать в битмапдату.