AS3没有向MovieClip添加Sprite

时间:2011-09-22 13:37:29

标签: actionscript-3

我的代码只是循环遍历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中的标志确定是否创建了页面),则其他任何页面覆盖都不起作用。

3 个答案:

答案 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花了太长时间来处理这个问题,但它确实有效!我不知道为什么它有效,而且此时我并不在意;有用!!! (对不起专业主义感到抱歉,但是我已经花了两天半的时间研究这个问题并且让它正常运行!)

如果有人想解释为什么它有效,请随意。我非常愿意了解为什么会出现这种困难而难以解决的问题。