2013-12-03 2 views
0

Ok я хочу, чтобы моя кнопка будет clickabe только один раз это visibe, он невидим, а пока вы выиграете игру (1 балл понг) вот что у меня естьКнопка активна только когда видна

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.

им не уверен, что это значит, или если им на правильном пути любой помощи apperciaed Вот весь код

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

Причина, по которой вы получаете сообщение об ошибке, заключается в том, что вы пытаетесь добавить прослушиватель событий к строке ('scoreBoard_W'). – Marcela

ответ

1

Проблема заключается в этой строке

scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3); 

Как вы используете for (var scoreBoard_W:String in buttonsStates){...} внутри определения функции function checkVisibility() {...} объявляется локальная переменная строка типа, который блокирует ваш доступ к кнопке с таким же именем. Изменение

scoreBoard_W.addEventListener(MouseEvent.CLICK, goto3); 

в

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

будет делать трюк.

Смежные вопросы