在Sprite上设置scaleX属性而不更改内部的子项

时间:2010-03-25 20:29:03

标签: flash actionscript-3

这可能吗?

我的网站分别设置了右侧和左侧的next和prev按钮,当您滚动按钮周围的任意一个点击区域时,一个Sprite淡入其中,其中包含描述下一页的TextField。所述Sprite调用StartDrag()方法,因此它在边界内跟随鼠标,这在页面的左侧都是精细和花花公子。然而,Adobe似乎忘记了动态改变Sprite,MC等注册点的方法,所以当你滚动页面右侧时,精灵从左上角显示,主要是离开舞台。

试图破解这个问题我已经尝试了很多东西(其他人编写的类,其他黑客),我发现最好的是在Sprite上使用scaleX方法,将比例改为-1。当然,这使得Sprite看起来像是从它的正常点反映出来的,这意味着它的所有孩子都向后显现。

无论如何我可以使用这个hack而不改变文本吗?

OR

有没有人知道从另一个角落展示精灵的不同方法?有什么方法可以让Sprite淡入并在鼠标指针的LEFT HAND侧按下鼠标?

非常感谢你。

以下是一个片段,可以了解正在发生的事情:

naxtPage.labelBG.scaleX = -1;
nextPage.labelBG.startDrag( true, nextHitRect );
nextPage.labelBG.x = nextPage.labelBG.parent.mouseX;
nextPage.labelBG.y = nextPage.labelBG.parent.mouseY;

干杯

1 个答案:

答案 0 :(得分:0)

通过使用ENTER_FRAME事件,您可以完全不同地执行此操作。如果您仅在用户滚动按钮时创建事件,则在事件内部触发事件,检查鼠标相对于阶段边界的位置,并确定弹出窗口相对于光标的位置。由于每个帧都会调用该函数,因此弹出窗口将跟随鼠标,始终位于正确的位置。类似的东西:

function onMouseOver(event:MouseEvent):void
{
    addEventListener(Event.ENTER_FRAME, updatePopup);
}

function updatePopup(event:Event):void
{
    if (mouseX > (stage.width - popup.width))
    {
        //Display the pop up on the left of the cursor
        popup.x = mouseX - popup.width;
    }
    else
    {
        //Display the pop up on the right of the cursor as normal
        popup.x = mouseX;
    }
}

您还需要创建一个rollOut事件,并在触发时删除ENTER_FRAME事件侦听器。我根本没有测试过这段代码,但我猜这些内容会解决你的问题。

希望有所帮助。

得不