【问题标题】:AS3: change handcursor graphic on buttonsAS3:更改按钮上的手形光标图形
【发布时间】:2012-03-16 21:07:17
【问题描述】:

我想将鼠标悬停在 buttonMode=true 的动画剪辑上时出现的小手光标替换为自定义图形。

有没有办法为我的整个应用程序全局执行此操作,或者我是否必须转到每个按钮,添加 MOUSE_OVER、MOUSE_OUT 和 MOUSE_MOVE 处理程序,这些处理程序将隐藏和显示鼠标光标以及将手形图形放在它上面并定位正确吗?

看起来很乏味...

【问题讨论】:

    标签: actionscript-3 mouseover


    【解决方案1】:

    似乎有办法改变原生光标; http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ui/Mouse.html#registerCursor()

    但您必须只针对 Flash Player 10.2+...

    【讨论】:

    • 如果我没记错的话,registerCursor 不允许您为不同的状态指定不同的游标,因此您仍然必须为每个对象添加 MOUSE_OVER 和 MOUSE_OUT 侦听器并改为调用 registerCursorunregisterCursor。当然,您将不再需要 MOUSE_MOVE 处理程序。
    • 我只有CS5,所以无法测试。但是 registerCursor 为光标取一个名字,所以如果你发送它“MouseCursor.HAND”,它应该“替换”手形光标“系统范围”。同样,我还没有对其进行测试,但这就是我将如何解释文档。
    • 我可以确认这是可行的。在 10.2+ 中,您可以使用 Mouse.registerCursor(MouseCursor.BUTTON, cursorData) 在整个应用程序中更改 buttonMode=true 手形光标。
    • 对不起,我错了——它不起作用。 Mouse.cursor 始终设置为 MouseCursor.AUTO,无论它看起来像箭头还是手。除非您的代码将 Mouse.cursor 显式设置为它们,否则覆盖 BUTTON 或 HAND 不会执行任何操作。您可以使用 registerCursor 覆盖 AUTO,但它将是静态的,除非您可以修改 MouseCursorData 以按照 AUTO 的方式行事。
    【解决方案2】:

    您可以编写一组 MOUSE_OVER、MOUSE_MOVE 和 MOUSE_OUT 处理程序,按照您的描述进行替换和定位,然后将侦听器添加到指向这些处理程序的所有按钮。请记住,相同的处理程序可以用于多个对象。

    或者,假设您的“按钮”是 MovieClip,您可以编写一个自定义 ActionScript 类来扩展 MovieClip,定义此默认功能,然后让您的所有按钮实例都使用该类作为基础。见下文:

        public class ButtonMovieClip extends MovieClip {
    
            public function ButtonMovieClip() {
                addEventListener(MouseEvent.MOUSE_OVER, buttonOver);
                addEventListener(MouseEvent.MOUSE_OUT, buttonOut);
                addEventListener(MouseEvent.MOUSE_MOVE, buttonMove);
            }
    
            public function buttonOver(event:MouseEvent) {
                //Hide mouse and add replacement graphic
            }
    
            public function buttonOut(event:MouseEvent) {
                //Show mouse and remove graphic
            }
    
            public function buttonMove(event:MouseEvent) {
                //Position graphic where mouse should be
            }
        }
    

    然后,关键是确保您的所有按钮都是从此类创建的(通过代码或从 Flash IDE 中创建)。

    【讨论】:

    • 我喜欢你的 BaseClass 想法 - 这会成功的 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多