Actionscript 3 在AS3游戏中使用按钮更改光标

Actionscript 3 在AS3游戏中使用按钮更改光标,actionscript-3,flash,Actionscript 3,Flash,当按下按钮时,我试图使我的游戏改变光标。但是,按下其中一个按钮后,我无法再次更改它(似乎光标挡住了我的去路)。我认为设置mouseCursor.mouseEnabled=false; 我会修好的,但看起来好像没修好。 这是我的密码,有人能告诉我我做错了什么吗 package { import flash.display.MovieClip; import flash.events.*; import flash.geom.*; import flash.text

当按下按钮时,我试图使我的游戏改变光标。但是,按下其中一个按钮后,我无法再次更改它(似乎光标挡住了我的去路)。我认为设置
mouseCursor.mouseEnabled=false;
我会修好的,但看起来好像没修好。 这是我的密码,有人能告诉我我做错了什么吗

package
{
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.geom.*;
    import flash.text.*;
    import flash.utils.*;
    import flash.ui.*;

import Game.*;

public class GameController extends MovieClip
{
    private var mouseCursor:MovieClip;

    public function GameController()
    {

    }

    private function followMouse(evt:Event)
    {
        mouseCursor.x = mouseX;
        mouseCursor.y = mouseY;
    }

    public function startGame()
    {   
        needleOn = false;

        mcGameUI.btnMixBlue.addEventListener(
                MouseEvent.CLICK, mixBlue);

        mcGameUI.btnMixRed.addEventListener(
                MouseEvent.CLICK, mixRed);

        mcGameUI.btnMixYellow.addEventListener(
                MouseEvent.CLICK, mixYellow);

        mcGameUI.btnNeedle.addEventListener(
                MouseEvent.CLICK, activateNeedle);


        mcGameUI.mouseEnabled = false;
    }       

    private function mixBlue(evt:MouseEvent)
    {
        if (mouseCursor != null)
        {
            removeChild(mouseCursor);
            mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);         
            mouseCursor = null;
        }
            mouseCursor = new BlueBubble(mouseX,mouseY);
            mouseCursor.gotoAndPlay("idle");
            mouseCursor.mouseEnabled = false;
            mouseCursor.addEventListener(Event.ENTER_FRAME,followMouse);            
            addChild(mouseCursor);
    }
    private function mixRed(evt:MouseEvent)
    {
        if (mouseCursor != null)
        {
            removeChild(mouseCursor);
            mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);         
            mouseCursor = null;
        }
            mouseCursor = new RedBubble(mouseX,mouseY);
            mouseCursor.gotoAndPlay("idle");
            mouseCursor.mouseEnabled = false;
            mouseCursor.addEventListener(Event.ENTER_FRAME,followMouse);            
            addChild(mouseCursor);
    }
    private function mixYellow(evt:MouseEvent)
    {
        if (mouseCursor != null)
        {
            removeChild(mouseCursor);
            mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);         
            mouseCursor = null;
        }
            mouseCursor = new YellowBubble(mouseX,mouseY);
            mouseCursor.gotoAndPlay("idle");
            mouseCursor.mouseEnabled = false;
            mouseCursor.addEventListener(Event.ENTER_FRAME,followMouse);            
            addChild(mouseCursor);
    }

    private function activateNeedle(evt:MouseEvent)
    {
        if (mouseCursor != null)
        {
            removeChild(mouseCursor);
            mouseCursor = null;
            mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);         
        }
        mouseCursor = new Needle();
        mouseCursor.mouseEnabled = false;
        addChild(mouseCursor);
        mouseCursor.addEventListener(Event.ENTER_FRAME,followMouse);            

    }


}   
}
您应该设置:

mouseCursor.mouseEnabled = false;
mouseCursor.mouseChildren = false;
mouseEnabled仅关闭容器
mouseCursor
,但在此剪辑中,您仍然可以拥有mouseEnabled元素,因此
mouseChildren
也应关闭

mouseChildren是在DisplayObjectContainer中定义的,这意味着由形状或位图组成的游标将不具有此属性,因此您需要首先测试它是否存在

if(mouseCursor is DisplayObjectContainer){
{
    mouseCursor.mouseChildren = false;
}

这是因为光标剪辑是鼠标启用的,这意味着它捕获任何鼠标点击,我认为鼠标启用是不够的。你能展示你的mouseCursor相关代码吗(例如,mouseCursor的类)?下面是这些类的代码,它们基本上是一样的,没有任何说明:)set
mouseCursor.mouseChildren=false并测试它。谢谢,这部分修复了问题,但现在当我从前三个游标之一转到第四个游标时,
Needle()
它崩溃了。。。编辑:Needle()类是一个默认类(由构造函数创建的类)ten add crashlog,这样我们就可以看到它被破坏的位置:)可能您的光标不是一个容器,因此它上不存在鼠标儿童。
TypeError:Error#1009:无法访问null对象引用的属性或方法。在GameController/activateNeedle()
附加信息:当我注释掉这部分时,`mouseCursor.removeEventListener(Event.ENTER_FRAME,followMouse);`在activatenedle()上,它停止崩溃。。。不知道为什么,看看你在做什么,你将mouseCursor设置为null,然后尝试访问它。