FLASH: ошибка при попытке использовать setChildIndex и TweenLite для создания эффекта rollOver для кнопки

StackOverflow https://stackoverflow.com/questions/1406363

Вопрос

 alt text
(источник: flickr.com )

Привет всем снова :) Итак, сегодня я пытаюсь создать простой эффект свечения на кнопке RollOver. Я, может быть, слишком усложняю вещи, но способ, которым я собираюсь сделать это, состоит в том, чтобы иметь 2 мувиклипа (состояние по умолчанию и состояние сверх).

Сначала я добавляю состояние по умолчанию на сцену, затем я добавляю состояние rollOver на сцену, но на глубине 0 и альфа также устанавливаем на 0. Теперь я хочу, чтобы состояние rollOver меняло глубину на состояние по умолчанию, а также анимировало до полной альфы с помощью класса TweetLite, чтобы получить хороший плавный переход.

Я сейчас получаю сообщение об ошибке, но вот мой код:

import gs.TweenLite;
import fl.motion.easing.*;
import flash.display.MovieClip;


var shopButton:MovieClip;
var shopButtonRoll:MovieClip;
var maxIndex:Number = this.numChildren - 1;

// Button - places the default state onto the stage
shopButton = new ShopButton();
shopButton.name = "shopButton";
shopButton.x = 262;
shopButton.y = 207;
shopButton.stop();
thumbsMov.addChild(shopButton);

// Button Glow - places rollOver state under the default and with 0 alpha
shopButtonRoll = new ShopButtonRoll();
shopButtonRoll.name = "shopButtonRoll";
shopButtonRoll.x = 262;
shopButtonRoll.y = 207;
shopButtonRoll.alpha = 0;
thumbsMov.addChildAt(shopButtonRoll, 0);

// Listeners

shopButton.addEventListener(MouseEvent.MOUSE_UP, shopClick);
shopButton.addEventListener(MouseEvent.ROLL_OVER, sendToTop);
shopButton.addEventListener(MouseEvent.ROLL_OUT, shopOff);
shopButtonRoll.addEventListener(MouseEvent.ROLL_OVER, shopOver);

// Button Actions 
// shopOver should bring rollOver to top and animate to 100%

function shopOver(event:MouseEvent):void
{
     TweenLite.to(shopButtonRoll, 1, {alpha:1});
}
function shopOff(event:MouseEvent):void
{
     // Code to animate back to 0 then change depth of rollOver to 0
}
function shopClick(event:MouseEvent):void
}
     trace("You clicked Shop");
}

// sendToTop Function
// Sent to top - depth change
function sendToTop(e:Event):void
{
     //this.setChildIndex(ShopButton(e.target), maxIndex);
     this.setChildIndex(e.currentTarget as MovieClip, maxIndex);
}
<Ч>

Я получаю сообщение об ошибке rollOver: (

ArgumentError: Ошибка # 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне.     на flash.display :: DisplayObjectContainer / setChildIndex ()     at test_fla :: MainTimeline / sendToTop ()

Я не понимаю, что означает, что ошибка указанным DisplayObject должна быть дочерней по отношению к вызывающей стороне?

Это было полезно?

Решение

На основании того, что вы пытаетесь достичь, вам не нужно управлять глубинами. По сути, вы можете просто добавить свой эффект ролловера внутри кнопки shopButton, а затем, прокатившись по кнопке shopButton, оживить свечение. Я обновил ваш код следующим образом:

import gs.TweenLite;
import fl.motion.easing.*;
import flash.display.MovieClip;


var shopButton:MovieClip;
var shopButtonRoll:MovieClip;

// Button - places the default state onto the stage
shopButton = new ShopButton();
shopButton.name = "shopButton";
shopButton.x = 262;
shopButton.y = 207;
shopButton.stop();
thumbsMov.addChild(shopButton);

// Button Glow - places rollOver state under the default and with 0 alpha
shopButtonRoll = new ShopButtonRoll();
shopButtonRoll.name = "shopButtonRoll";
shopButtonRoll.alpha = 0;
shopButton.addChild(shopButtonRoll);


// Listeners
shopButton.buttonMode = true;
shopButton.addEventListener(MouseEvent.MOUSE_UP, shopClick);
shopButton.addEventListener(MouseEvent.ROLL_OVER, shopOver);
shopButton.addEventListener(MouseEvent.ROLL_OUT, shopOff);

// Button Actions 
// shopOver should bring rollOver to top and animate to 100%

function shopOver(event:MouseEvent):void
{
     TweenLite.to(shopButtonRoll, 1, {alpha:1});
}
function shopOff(event:MouseEvent):void
{
    TweenLite.to(shopButtonRoll, 1, {alpha:0});
     // Code to animate back to 0 then change depth of rollOver to 0
}
function shopClick(event:MouseEvent):void
}
     trace("You clicked Shop");
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top