Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамическое изменение MovieClip'а (http://www.flasher.ru/forum/showthread.php?t=169949)

NAO111 15.10.2011 11:14

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

spooner 15.10.2011 11:19

Object не "дисплейный объект".
А вообще
Код AS3:

mc.gotoAndStop(n);
mc.addChild(object);


NAO111 15.10.2011 11:28

Цитата:

Сообщение от spooner (Сообщение 1039341)
Object не "дисплейный объект".

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

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

Vansimar 15.10.2011 11:36

у меня этот код всегда работал..

goodguy 15.10.2011 12:07

Цитата:

m и n тоже не числа )))
Тогда.
Код AS3:

mc.gotoAndStop("n");
mc.addChild(object);

Если и это не сработает, значит нужно менять корявую архитектуру проекта.

fish_r 15.10.2011 14:32

может так?

Код AS3:

...
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) Чтобы добавить что-то только на какой-нибудь кадр, попробуйте сделать вот так:
Код AS3:

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) Про отрисовку не совсем понятно - зачем переносить на новый спрайт. Мувик тоже можно отрисовать в битмапдату.


Часовой пояс GMT +4, время: 03:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.