2015-06-28 80 views
1

我是一名編程初學者,但我正在嘗試製作一款flash RPG類型的遊戲。我在我的遊戲和行走的人(manmc)周圍有障礙。我一直在觀看關於如何製作對象障礙的視頻/閱讀文章,但我似乎無法在沒有錯誤的情況下獲得編碼權限。我試圖讓我的角色在他擊中一棵樹時停下來。該樹編碼爲(treer1_MC)。我只是試圖在下壓時對它進行編碼,但它什麼都不做,導致角色無法走回去。AS3中的對象障礙?

import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.display.Stage; 

manmc.gotoAndStop ("Stand Front Frame"); 

var rightPressed:Boolean = new Boolean(false); 
var leftPressed:Boolean = new Boolean(false); 
var upPressed:Boolean = new Boolean(false); 
var downPressed:Boolean = new Boolean(false); 
var manSpeed:Number = 3; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 
stage.addEventListener(Event.ENTER_FRAME, gameLoop); 

function keyDownHandler (keyEvent:KeyboardEvent):void 
{ 
    if(keyEvent.keyCode == Keyboard.RIGHT) 
    { 
     rightPressed = true; 
    } 
    else if(keyEvent.keyCode == Keyboard.LEFT) 
    { 
     leftPressed = true; 
    } 
    else if(keyEvent.keyCode == Keyboard.UP) 
    { 
     upPressed = true; 
    } 
    else if(keyEvent.keyCode == Keyboard.DOWN) 
    { 
     downPressed = true; 
    } 
} 

function keyUpHandler (keyEvent:KeyboardEvent):void 
{ 
    if(keyEvent.keyCode == Keyboard.RIGHT) 
    { 
     rightPressed = false; 
     manmc.gotoAndStop("Stand Right Frame"); 
    } 
    else if(keyEvent.keyCode == Keyboard.LEFT) 
    { 
     leftPressed = false; 
     manmc.gotoAndStop("Stand Left Frame"); 
    } 
    else if(keyEvent.keyCode == Keyboard.UP) 
    { 
     upPressed = false; 
     manmc.gotoAndStop("Stand Back Frame"); 
    } 
    else if(keyEvent.keyCode == Keyboard.DOWN) 
    { 
     downPressed = false; 
     manmc.gotoAndStop("Stand Front Frame"); 
    } 
} 

function gameLoop(loopEvent:Event):void 
{ 
    if(rightPressed) 
    { 
     if(manmc.x < 1050) 
     { 
      manmc.x += manSpeed; 
     } 
     manmc.gotoAndStop("Walk Right Frame"); 
    } 
    else if(leftPressed) 
    { 
     if (manmc.x > 145) 
     { 
      manmc.x -= manSpeed; 
     } 
     manmc.gotoAndStop("Walk Left Frame"); 
    } 
    else if(downPressed) 
    { 
     if(manmc.y < 780) 
     { 
     manmc.y += manSpeed; 
     } 
     manmc.gotoAndStop("Walk Front Frame"); 
    } 
     if (manmc.hitTest(treer1_MC)) 
    { 
      trace("leftHit"); 
      manmc._x += 3; 

    } 
    else if(upPressed) 
    { 
     if(manmc.y > 145) 
     { 
      manmc.y -= manSpeed; 
     } 
     manmc.gotoAndStop("Walk Back Frame"); 
    } 
} 

這是一個教程所說的使用的編碼。有什麼建議麼?

if (manmc.hitTest(treer1_MC)) 
     trace("leftHit"); 
     manmc._x += 3; 

回答

1

正是由於碰撞條件的聲明是你的 「downPress」 境外:

else if(downPressed) 
{ 
    if(manmc.y < 780) 
    { 
    manmc.y += manSpeed; 
    } 
    manmc.gotoAndStop("Walk Front Frame"); 
} 
    if (manmc.hitTest(treer1_MC)) 
{ 
     trace("leftHit"); 
     manmc._x += 3; 

} 

壓痕問題:),正確的方法應該是:

else if(downPressed) 
{ 
    if(manmc.y < 780) 
    { 
    manmc.y += manSpeed; 
    } 
    manmc.gotoAndStop("Walk Front Frame"); 

    if (manmc.hitTest(treer1_MC)) 
    { 
     trace("leftHit"); 
     manmc._x += 3; 
    } 
} 

我希望它有幫助;)

編輯:

manmc.hitTest(treer1_MC)

應該是:

manmc.hitTestObject(treer1_MC)

因爲函數:則hitTest()是一個函數AS2,AS3上有WHE :hitTestPoint()和hitTestObject();)

+0

仍然給出了一個錯誤:(「TypeError:錯誤#1006:hitTest不是一個函數。 \t在Start_fla :: MainTimeline/gameLoop()」 –

+0

哦,還有一件事情: manmc.hitTest(treer1_MC) 應該是: manmc hitTestObject(treer1_MC) –

+0

太感謝你了! –