【发布时间】:2012-05-10 21:40:48
【问题描述】:
目前我正在尝试使用 mouseover 事件更改加载到 sprite 中的图像,并使用 mouseout 将其更改回来。但它不能正常工作,我错过了什么吗?
public class Tab extends Sprite
{
var imageLoader:Loader = new Loader();
var TabSprite:Sprite = new Sprite();
var SkinImages:Array = [Skin.TAB_ACTIVE,Skin.TAB_DISABLED,Skin.TAB_HOVER,Skin.TAB_VIEW];
public function Tab()
{
for each (var Image:String in SkinImages){
imageLoader.load(new URLRequest(Image));
}
TabSprite.buttonMode = true;
addChild(TabSprite);
TabSprite.addChild(imageLoader);
TabSprite.addEventListener(MouseEvent.MOUSE_OVER, onTabHover);
}
private function onTabHover(e:MouseEvent){
trace("HOVER");
TabSprite.removeEventListener(MouseEvent.MOUSE_OVER, onTabHover);
imageLoader.load(new URLRequest(Skin.TAB_HOVER));
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{
TabSprite.addEventListener(MouseEvent.MOUSE_OUT, onTabOut);
});
}
private function onTabOut(e:MouseEvent){
trace("OUT");
TabSprite.removeEventListener(MouseEvent.MOUSE_OUT, onTabOut);
imageLoader.load(new URLRequest(Skin.TAB_VIEW));
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,function(e:Event):void{
TabSprite.addEventListener(MouseEvent.MOUSE_OVER, onTabHover);
});
}
}
【问题讨论】:
-
我认为你真的应该预先加载两个图像并切换每个图像的可见性。此外,您似乎没有将加载的图像添加到精灵中。
-
关于切换可见性(而不是切换子级)的注意事项,如果两个对象具有相同(显示)的父级,并且可见性不同,则父级尺寸将受到不可见子级的影响。只要两个孩子的大小相同,这不是问题,但如果他们不这样做,这可能会导致许多父精灵定位的“wtf”时刻。这就是为什么在我的回答中我使用 addChild 和 removeChild 而不是切换“可见”参数。它不会创建隐藏的依赖项。
标签: actionscript-3 flash actionscript mouseover