Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Flash, Flex, ActionScript > изменить содержимое вложенного спрайта


Автор: astrolit 30.04.14, 13:45
имеется
в init функции
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    for (var i:int = 1; i < 5; i++) {
    s = new Sprite();
    s.addChild(new this['bim' + i] as Bitmap);
    s.x = bgHolder.numChildren?bgHolder.width + 20:0;
    bgHolder.addChild(s);
    s.name = 'picture_' + i;
    }
    s.addEventListener(MouseEvent.MOUSE_MOVE, knmuve);

нужно при наведении на конкретный дочерний спрайт (s) подменить картинку
ну и собственно функция
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    private function knmuve(e:MouseEvent = null):void {
     
    s.parent.removeChild(s);
    s = null;
    s.addChild(new kn2() as Bitmap);
    }

но не работает

Автор: K313 30.04.14, 17:23
Цитата astrolit @
s = null;

Автор: astrolit 30.04.14, 19:37
и ...
Добавлено
Цитата K313 @

взято было из примера и работало без вложенного спрайта!
Я и без этой строчки не получал ни какого результата?!


есть идеи?

Автор: Vesper 07.05.14, 05:15
Ты бы лучше слушатель эвента на родителя повесил, было бы меньше геморроя. Если не хочешь или не можешь, добавлять надо к "s.parent" и до того, как выполнять s.parent.removeChild(s) иначе до parent'а не достанешь. Типа такого:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    private function knmuve(e:MouseEvent = null):void {
        var k:Bitmap=new kn2() as Bitmap;
        s.parent.addChild(k);
        s.parent.removeChild(s);
        s = k;
    }

Автор: astrolit 09.05.14, 20:15
ругается
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        private function knmuve(e:MouseEvent):void {
                
               var k:Bitmap=new kn2() as Bitmap;
        s.parent.addChild(k);
        s.parent.removeChild(s);
        s = k; //на переменую k
                
            }

MainMany.as(158): col: 9 Error: Implicit coercion of a value of type flash.display:Bitmap to an unrelated type flash.display:Sprite.
s = k;
отправлю более полный пример кода моего
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    public class MainMany extends Sprite {
            [Embed(source = "../../lib/1b.png")] private var kn2:Class;
            [Embed(source = "../../lib/1.png")] private var bim1:Class;
            [Embed(source = "../../lib/2.png")] private var bim2:Class;
            [Embed(source = "../../lib/3.png")] private var bim3:Class;
            [Embed(source = "../../lib/4.png")] private var bim4:Class;
            [Embed(source = "../../lib/5.png")] private var bim5:Class;
            private var water:Bitmap;//Битмап с фоткой кругов. Пользуем для "подчеркивания" объема
            private var map:BitmapData;//Сюда круги фотографируем. Карта искажений.
            private var waterHolder:Sprite;//Холдер для клипов кругов.
            
            private var rainRegime:Boolean;//"Выключатель" режима дождя или следа мышки.
            private var dmf:DisplacementMapFilter;//Фильтр искажений
            private var bgHolder:Sprite;//Общий контейнер картинок
            private var s:Sprite;//контейнер картинкi
            private var tf:TextField;
     
            
            
            public function MainMany() {
                stage?init():addEventListener(Event.ADDED_TO_STAGE, init);
                
            }
            
            /**** PUBLIC SECTION ****/
            
            /** ACCESSORS **/
            
            /**** PRIVATE SECTION ****/
            
            /**
             * Создаем "каплю" на водной поверхности из библиотечного клипа.
             * @param   dropX X координата
             * @param   dropY Y координата
             * Если параметр = 0, соответствующая координата будет случайной в пределах сцены.
             * Каждая капля, по завершении анимации "расплыва", диспатчит событие 'dropComplete'
             */
            private function createDrop(dropX:Number=0,dropY:Number=0):void {
                var w:vawe1 = new vawe1();
                w.x = dropX?dropX:20 + (stage.stageWidth) * Math.random();
                w.y = dropY?dropY:20 + (stage.stageHeight - 40) * Math.random();
                waterHolder.addChild(w);
                w.gotoAndPlay(int(1 + Math.random() * (w.totalFrames-10)*int(rainRegime)));
            }
            
        
            /**** LISTENERS SECTION ****/
            
            /**
             * Инсталяция.
             * Установим в цикле кучку картинок, каждую в свой контейнер(для идентификации кликов).
             * Контейнеры сложим в еще один контейнер и ему уже назначим обработку клика.
             * Оперируя, в обработчике, целевыми объектами, сможем выбрать с чем работать в дальнейшем.
             * Режим наложения выбран такой, чтоб чуть выделить водные круги на картинке.
             * Назначим контейнер для анимации капель(waterHolder), переключатель режима(rainRegime) и фильтр(dmf).
             * Запустим сторожей событий:
                 * 'dropComplete' - капля отработала анимацию
                 * ENTER_FRAME - анимация карты искажений
                 * CLICK - смена режимов
             * Запускаемся.
             * @param   e - Event.ADDED_TO_STAGE
             */
            
            
            private function init(e:Event = null):void {
                removeEventListener(Event.ADDED_TO_STAGE, init);
                addEventListener(Event.REMOVED_FROM_STAGE, destroyer);
                // entry point
                addChild(bgHolder = new Sprite());
                //Вставка и расстановка картинок
                s = new Sprite;
                
                
                
                
                
                var x:int = 0;
                for (var i:int = 1; i < 6; i++) {
                    s = new Sprite();
                    
                    
                    
                    
                    s.addChild(new this['bim' + i] as Bitmap);
                    
                    s.x = bgHolder.numChildren?bgHolder.width + 10:0;
                    bgHolder.addChild(s);
                    s.name = 'picture_' + i;
                    
                    
                    
                    
                }
                //Центрируем контейнер с картинками
                bgHolder.x = (stage.stageWidth - bgHolder.width) / 2;
                bgHolder.y = (stage.stageHeight - bgHolder.height) / 2;
                
                addChild(water = new Bitmap(map = new BitmapData(640, 40, false, 0x808080)));
                water.blendMode = BlendMode.OVERLAY;
                water.alpha = .5;
                water.x = bgHolder.x, water.y = bgHolder.y;
                waterHolder = new Sprite();
                rainRegime = true;
                dmf = new DisplacementMapFilter(map, new Point(), 1, 1, 15, 15, 'color');
                bgHolder.filters = [dmf];
                waterHolder.addEventListener('dropComplete', completeDrop);
                this.addEventListener(Event.ENTER_FRAME, runWaves);
                //bgHolder.addEventListener(MouseEvent.CLICK, changeRegime);
                bgHolder.addEventListener(MouseEvent.CLICK, generateWave);
                //bgHolder.addEventListener(MouseEvent.MOUSE_MOVE, knmuve);
                s.addEventListener(MouseEvent.MOUSE_OVER, knmuve);
            
                
                rainRegime = false;
                //changeRegime();
                
                
                tf = new TextField();  
                //tf.defaultTextFormat = new TextFormat("Arial", 20, 16777062, true);
                tf.autoSize = "center";
                tf.x = stage.stageWidth / 2;
                tf.y = bgHolder.y + bgHolder.height;        
                tf.text = "Выберите галерею";
                
            }
            private function knmuve(e:MouseEvent):void {
                
               var k:Bitmap=new kn2() as Bitmap;
        s.parent.addChild(k);
        s.parent.removeChild(s);
        s = k;
                
            }

Автор: Vesper 10.05.14, 04:16
Хм. Из твоего кода следует, что S это должен быть спрайт с какими-то битмапами, а ты его зачем-то хочешь весь спрятать при выполнении knmuve, и хочешь добавить некий битмап kn2. Вопрос первый - а куда ты хочешь добавить сей битмап, с какими координатами, и что планируешь сделать после того, как он окажется не нужным? И второй - сколько их тебе надо?

Автор: astrolit 10.05.14, 12:13
каждый s спрайт содержит битмап с картинками кнопок их 5 и они смещаются по горизонтали на 20 друг от друга получается меню, также добавляется имя каждому спрайту picture_1 и т.д.
суть, есть активная нарисованная кнопка и при перемещении над спрайтом хотелось бы подменять ему битмап с координатами старого, и соответственно уходя с него возвращать первый битмап

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)