2012-06-30 43 views
0

我的完整代碼是 import flash.events.KeyboardEvent; import flash.events.Event;addEventListener()沒有檢測到KEY_UP也沒有KEY_DOWN

//init some variables 
var speedX = 0; 
var speedY = 0; 
msg.visible = false; 
var curLevel = 2; 
var level = new Array(); 
var flagVar; 
var won = false; 

//Adding level platforms 
for(var i = 0; i < numChildren; i++) { 
    if(getChildAt(i) is platform) { 
     level.push(getChildAt(i).getRect(this)); 
    } 
    if(getChildAt(i) is flag) { flagVar = getChildAt(i).getRect(this); } 
} 

//Checking key presses 
var kUp  = false; 
var kDown = false; 
var kLeft = false; 
var kRight = false; 
var kSpace = false; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD); 
stage.addEventListener(KeyboardEvent.KEY_UP, kU); 

function kD(k:KeyboardEvent) { 
    trace("Key down - " + k.keyCode); 
    if(k.keyCode == 32) { kSpace = true; } 
    if(k.keyCode == 37) { kLeft = true; } 
    if(k.keyCode == 38) { kUp  = true; } 
    if(k.keyCode == 39) { kRight = true; } 
} 

function kU(k:KeyboardEvent) { 
    trace("Key up - " + k.keyCode); 
    if(k.keyCode == 32) { kSpace = false; } 
    if(k.keyCode == 37) { kLeft  = false; } 
    if(k.keyCode == 38) { kUp  = false; } 
    if(k.keyCode == 39) { kRight = false; } 
} 

addEventListener(Event.ENTER_FRAME, loopAround); 
function loopAround(e:Event) { 

    //horizontal movement 
    if(kLeft) { 
     speedX = -10; 
    } else if(kRight) { 
     speedX = 10; 
    } else { 
     speedX *= 0.5; 
    } 

    player.x += speedX; 

    //horizontal collision checks 
    for(var i = 0; i < level.length; i++) { 
     if(player.getRect(this).intersects(level[i])) { 
      if(speedX > 0) { 
       player.x = level[i].left - player.width; 
      } 
      if(speedX < 0) { 
       player.x = level[i].right; 
      } 

      speedX = 0; 
     } 
    } 

    //vertical movement 
    speedY += 1; 
    player.y += speedY; 
    var jumpable = false; 

    //Vertical collision 
    for(i = 0; i < level.length; i++) { 
     if(player.getRect(this).intersects(level[i])) { 
      if(speedY > 0) { 
       player.y = level[i].top - player.height; 
       speedY = 0; 
       jumpable = true; 
      } 
      if(speedY < 0) { 
       player.y = level[i].bottom; 
       speedY *= -0.5; 
      } 
     } 
    } 

    //JUMP! 
    if((kUp || kSpace) && jumpable) { 
     speedY=-20; 
    } 

    //Moving camera and other 
    this.x = -player.x + (stage.stageWidth/2); 
    this.y = -player.y + (stage.stageHeight/2); 
    msg.x = player.x - (msg.width/2); 
    msg.y = player.y - (msg.height/2); 

    //Checking win 
    if(player.getRect(this).intersects(flagVar)) { 
     msg.visible = true; 
     won = true; 
    } 

    //Check for next level request 
    if(kSpace && won) { 
     curLevel++; 
     gotoAndStop(curLevel); 
     won = false; 
    } 
} 

有問題的部分是 //檢查按鍵 變種KUP = FALSE; var kDown = false; var kLeft = false; var kRight = false; var kSpace = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD); 
stage.addEventListener(KeyboardEvent.KEY_UP, kU); 

function kD(k:KeyboardEvent) { 
    trace("Key down - " + k.keyCode); 
    if(k.keyCode == 32) { kSpace = true; } 
    if(k.keyCode == 37) { kLeft = true; } 
    if(k.keyCode == 38) { kUp  = true; } 
    if(k.keyCode == 39) { kRight = true; } 
} 

function kU(k:KeyboardEvent) { 
    trace("Key up - " + k.keyCode); 
    if(k.keyCode == 32) { kSpace = false; } 
    if(k.keyCode == 37) { kLeft  = false; } 
    if(k.keyCode == 38) { kUp  = false; } 
    if(k.keyCode == 39) { kRight = false; } 
} 

這是昨天晚上工作正常,但今天我把它移到一個新的關鍵幀,現在它不工作。我沒有得到任何錯誤(即使我調試)。它不會移動角色,甚至不會顯示在輸出中。

我對as3還很陌生,所以我不知道該怎麼做。

在此先感謝。

編輯:玩了一下之後,我發現它不工作的原因是菜單造成的。菜單有一個按鈕和兩個文本元素,這很好。我使用菜單上的代碼是這樣的:

import flash.events.MouseEvent; 

stop(); 

var format:TextFormat = new TextFormat(); 
format.size = 26; 
format.bold = true; 
playGameButton.setStyle("textFormat", format); 

stage.addEventListener(MouseEvent.CLICK, playGame); 
function playGame(e:MouseEvent) { 
    if(e.target.name == "playGameButton") { 
     gotoAndStop(2); 
    } 
} 

如果我只使用gotoAndStop(2);它工作正常,但一切只是進入到第二幀,沒有別的以後的作品。

編輯#2:我已經縮小了它甚至更遠的if語句本身。

if(e.target == playGameButton) 

if(e.target.name == "playGameButton") 

這兩個都不起作用。如果我只是一起刪除if語句,它就可以很好地工作。

回答

0

嘗試禁用您的按鈕mouseChildren。

playGameButton.mouseChildren = false; 
+0

這沒有奏效。同樣的事情發生。 – Zirenth

+0

如果你使用trace(e.target.name),你在輸出窗口中得到了什麼? – crooksy88

0

嘗試e.currentTarget而不是e.target。從documentation

currentTarget當前:對象 [只讀]​​當前正在使用事件偵聽器處理Event對象的對象。

target:Object [只讀]​​事件目標。

我不太肯定這是你的問題,但target VS currentTarget混亂,之前得到我。

1

似乎有aproblem本線

if(getChildAt(i) is platform) 

導致錯誤1067:閃光類型的值隱式強制。顯示:影片剪輯到不相關類型的類

的代碼的其餘部分似乎只是罰款