按钮仅在可见时可单击

时间:2013-12-03 20:37:11

标签: actionscript-3 flash

好的,我希望我的按钮只有在被视觉时才会被点击,直到你赢得游戏才会被看不见(1分pong) 这就是我所拥有的

var buttonsStates:Object = {
    "scoreBoard_W" : false
};

function checkVisibility () {
    for (var scoreBoard_W:String in buttonsStates) {
        if(visible == true)
        {
            scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3);
            function goto3(Event:MouseEvent)
            {
                gotoAndStop(1,"Menu");
            }

这是错误:Pong, Layer 'Pong', Frame 2, Line 129 1061: Call to a possibly undefined method addEventListener through a reference with static type String.

我不确定这意味着什么,或者如果我在正确的轨道上,任何帮助都是合适的 这是所有代码

stop();
var buttonsStates:Object = {
    "scoreBoard_W" : false
};

var ballSpeedX:int = -3;
var ballSpeedY:int = -2;
var cpuPaddleSpeed:int = 3;
var playerScore:int = 0;
var cpuScore:int = 0;
scoreBoard_W.visible = false;
scoreBoard_L.visible = false;
init();

function init():void
{
    stage.addEventListener(Event.ENTER_FRAME, loop);
}

function calculateBallAngle(paddleY:Number, ballY:Number):Number
{
    var ySpeed:Number = 5 * ((ballY - paddleY) / 25);
    return ySpeed;
}

function updateTextFields():void
{
    playerScoreText.text = ("Player Score: " + playerScore);
    cpuScoreText.text = ("CPU Score: " + cpuScore);
}

function loop(e:Event):void
{
    if (playerPaddle.hitTestObject(ball) == true)
    {
        if (ballSpeedX < 0)
        {
            ballSpeedX *=  -1;
            ballSpeedY = calculateBallAngle(playerPaddle.y, ball.y);
        }
    }
    else if (cpuPaddle.hitTestObject(ball) == true )
    {
        if (ballSpeedX > 0)
        {
            ballSpeedX *=  -1;
            ballSpeedY = calculateBallAngle(cpuPaddle.y, ball.y);
        }
    }

    if (cpuPaddle.y < ball.y - 10)
    {
        cpuPaddle.y +=  cpuPaddleSpeed;
    }
    else if (cpuPaddle.y > ball.y + 10)
    {
        cpuPaddle.y -=  cpuPaddleSpeed;
    }

    playerPaddle.y = mouseY;

    if (playerPaddle.y - playerPaddle.height / 2 < 0)
    {
        playerPaddle.y = playerPaddle.height / 2;
    }
    else if (playerPaddle.y + playerPaddle.height/2 > stage.stageHeight)
    {
        playerPaddle.y = stage.stageHeight - playerPaddle.height / 2;
    }

    ball.x +=  ballSpeedX;
    ball.y +=  ballSpeedY;



    if (ball.x <= ball.width / 2)
    {
        ball.x = ball.width / 2;
        ballSpeedX *=  -1;
        cpuScore++;
        updateTextFields();
    }
    else if (ball.x >= stage.stageWidth-ball.width/2)
    {
        ball.x = stage.stageWidth - ball.width / 2;
        ballSpeedX *=  -1;
        playerScore++;
        updateTextFields();
    }


    if (ball.y <= ball.height / 2)
    {
        ball.y = ball.height / 2;
        ballSpeedY *=  -1;
    }
    else if (ball.y >= stage.stageHeight-ball.height/2)
    {
        ball.y = stage.stageHeight - ball.height / 2;
        ballSpeedY *=  -1;
    }

    if (playerScore >= 1)
    {
        stage.removeEventListener(Event.ENTER_FRAME, loop);
        scoreBoard_W.visible = true;
    }
    if (cpuScore >= 1)
    {
        stage.removeEventListener(Event.ENTER_FRAME, loop);
        scoreBoard_L.visible = true;
    }
}

Mouse.hide();
mywelcome.text = "Good Luck, " + myName;
function checkVisibility () {
    for (var scoreBoard_W:String in buttonsStates) {
        if(visible == true)
        {
            scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3);
            function goto3(Event:MouseEvent)
            {
                gotoAndStop(1,"Menu");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题出在这一行

scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3);

当您在函数for (var scoreBoard_W:String in buttonsStates){...}的内部定义中使用function checkVisibility () {...}时,您声明了本地String类型变量,该变量阻止您对具有相同名称的按钮的访问。 改变

scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3);

this.scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3);

会做到这一点。