我的代码只是循环遍历xml文件并创建“页面”(稍后设置动画)。
这一切都运行正常但现在我想在页面的整个内容中添加一个精灵,如果xml的内容包含一个URL。
在运行时,我可以看到正在正确处理对URL的检查并且正在生成叠加层,但我无法在页面上“看到”它。
以下代码位于xml文件中每个页面的for循环中:
var page:Page = new Page(); //MovieClip in my library
// ... other stuff
var textMC:FadeText = new FadeText(xml); //load the text from the xml fragment for this page
//if the text contains a URL (using RegExp)
if(textMC.hasLink())
{
var button:Sprite = new Sprite();
button.graphics.beginFill(0x000000);
button.graphics.drawRect(0, 0, 1, 1);
button.name= textMC.getLink();
button.x = button.y = button.alpha = 0;
button.width = rectangle.width;
button.height = rectangle.height;
button.buttonMode = true;
button.addEventListener(MouseEvent.CLICK, goToUrl, false, 0, true);
page.addChildAt(button, page.numChildren);
}
//... more code - such as add page to stage.
从控制台(使用FireBug和FlashBug)正在创建按钮,但是我无法在屏幕上看到它,所以我猜测addChild位是错误的。
有什么问题,我该如何解决?
[编辑] 将alpha设置为1后,我可以看到叠加 IS 被添加到页面中,但它没有更改光标或响应鼠标点击。
我现在认为XML有问题。它是正确解析的XML(否则FlashPlayer会在我的脸上抛出异常)并且看起来这个代码适用于除第二个之外的每个页面。此外,如果将第二页设置为可见(XML中的标志确定是否创建了页面),则其他任何页面覆盖都不起作用。
答案 0 :(得分:1)
很抱歉给这个帖子打了个网但我能想到的一件事是,因为你指定一个z位置来放置你的页面,可能是由(i + 1)生成的z位置不是下一个在线的。 AS3不允许将显示对象放置在“层”上,它们之间有空的“层”,这是AS2中允许的。
我的猜测是,在一个点或另一个点的循环中,循环不会生成一个留空层的页面。 stage.addChild(page)
实际工作的原因是因为它只是搜索该堆栈中的下一个空图层,因为您没有指定它。
答案 1 :(得分:0)
button.x = button.y = button.alpha = 0;
将alpha设置为1
button.alpha = 1;
并检查rectangle.width,rectangle.height
最后一件事,检查textMC.hasLink()是否为true。如果是真的,那么您的代码还有另一个与此示例代码无关的问题。
答案 2 :(得分:0)
不合逻辑的答案:
将stage.addChildAt(page,i+1);
替换为stage.addChild(page);
。
我抓着稻草。 FAR花了太长时间来处理这个问题,但它确实有效!我不知道为什么它有效,而且此时我并不在意;有用!!! (对不起专业主义感到抱歉,但是我已经花了两天半的时间研究这个问题并且让它正常运行!)
如果有人想解释为什么它有效,请随意。我非常愿意了解为什么会出现这种困难而难以解决的问题。