我还在学习flash和actionscript 3,我遇到了变量和对象名称的问题。我需要能够将变量名称组合在一起(就像php可以通过var1.var2结合起来一样)。
我的swf包含4个加载器( image1_loader,image2_loader等.. ),它们是( image1_content,image2_content等... ...的孩子) 然后我有4个按钮将图像加载到加载器中,同时这样做它们定义了当前活动的加载器。 最后我有4个控制按钮 - 按比例向上/向下和顺时针/逆时针旋转,这应该只控制当前活动的加载器(由上面的按钮设置)
所以我的按钮以及加载图像都有事件监听器:
image1_btn.addEventListener(MouseEvent.CLICK, setCurrentSelection);
image2_btn.addEventListener(MouseEvent.CLICK, setCurrentSelection);
(等等......)
function setCurrentSelection(e:MouseEvent):void {
if (e.currentTarget===image1_btn){activeLoader='image1';}
if (e.currentTarget===image2_btn){activeLoader='image2';}
if (e.currentTarget===image3_btn){activeLoader='image3';}
if (e.currentTarget===image4_btn){activeLoader='image4';}
}
因此,在将activeLoader设置为字符串'imageX'后,我有一个控制功能,如旋转一个:
rotateClock_btn.addEventListener(MouseEvent.MOUSE_DOWN, rotateClockwise);
rotateAnti_btn.addEventListener(MouseEvent.MOUSE_DOWN, rotateAntiClockwise);
function rotateClockwise(event:Event):void {
rotateAroundCenter(imageX_content, 10, ptR);
}
function rotateAntiClockwise(event:Event):void {
rotateAroundCenter(imageX_content, -10, ptR);
}
所以在rotateClockwise和rotateAntiClockwise函数中,我需要能够识别哪个是当前活动的加载器并且具有该数字而不是X - 所以如果它是image1_loader - 它需要是image1_content,如果4 - image4_content ... 我试图这样做,但它不喜欢它是一个字符串:
rotateAroundCenter((activeLoader+'_content'), 10, ptR);
请任何人帮助我理解如何解决(对不起,如果我没有清楚地解释它!)并且请放轻松我 - 我正在学习,因为我自己去了
劳伦:)答案 0 :(得分:0)
如果您有一对一的内容DisplayObjects to Loaders,您可以将内容保存在变量中。
function setCurrentSelection(e:MouseEvent):void {
if (e.currentTarget===image1_btn){activeContent=image1_content;}
if (e.currentTarget===image2_btn){activeContent=image2_content;}
if (e.currentTarget===image3_btn){activeContent=image3_content;}
if (e.currentTarget===image4_btn){activeContent=image4_content;}
}
function rotateClockwise(event:Event):void {
rotateAroundCenter(image4_content, 10, ptR);
}
如果由于某种原因你需要存储加载器的字符串名称,你可以这样做
function rotateClockwise(event:Event):void {
rotateAroundCenter(getChildByName(activeLoader+"_content"), 10, ptR);
}
如果image1_loader和其他人在舞台上。
更好的是,您可以使用冒泡并执行此操作(假设您的图像和内容DisplayObjects在同一范围内)。
addEventListener(MouseEvent.CLICK, setCurrentSelection);
function setCurrentSelection(e:MouseEvent):void {
var name:String = e.target.name;
var index:int = name.indexOf("_btn");
if (index == -1) return;
activeLoader = name.substr(0, index);
}
function rotateClockwise(event:Event):void {
rotateAroundCenter(getChildByName(activeLoader+"_content"), 10, ptR);
}
答案 1 :(得分:0)
我认为这就是你要做的......
rotateAroundCenter(getChildByName([activeLoader+"_content"]), 10, ptR);
答案 2 :(得分:0)
您可以将与一个项目相关的所有元素存储在自定义对象中,并使用这些对象的数组来存储它们。这样,你a)避免繁琐地比较名称字符串,b)创建一个可能接受gzillion加载器的解决方案,如果需要的话;)
var numLoaders : int = 4;
var items : Array = [];
var activeItem : Object = null;
init();
function init() : void {
var i: int = -1;
while (++i < numLoaders) {
var item : Object = {
btn: getChildByName ("image"+i+"_btn"),
image: getChildByName ("image"+i+"_content")
};
item.btn.addEventListener (MouseEvent.CLICK, setSelection);
items.push ( item );
}
}
function setSelection (e:Event) : void {
var i:int = -1;
while (++i < items.length) {
if (e.currentTarget == items[i].btn) activeItem = item; // compare by reference, not by name!
break;
}
}
function rotateClockwise(event:Event):void {
if (activeItem) rotateAroundCenter(activeItem, 10, ptR);
}
我选择了getChildByName()
,因为我假设你已经在舞台上拥有这些元素 - 你也可以在创建循环中分配这些元素。
另外,我按惯例使用了基于0的索引号。如果您的商品从“image1”开始,请使用
var i : int = 0;
while (++i <= numLoaders)
在第一个循环中。