Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 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 и т.д. суть, есть активная нарисованная кнопка и при перемещении над спрайтом хотелось бы подменять ему битмап с координатами старого, и соответственно уходя с него возвращать первый битмап |