2012-05-31 58 views
0

我嘗試在ActionScript 3中創建一個平臺遊戲。我已經有了一些用於移動和動畫角色的代碼,以及一個簡單的平臺樣式,但是我想讓角色撞牆或者撞到底部的平臺。在這個時候,我有這樣的:我曾經在YouTube上找到任何東西,或谷歌4天如何在AS3平臺遊戲中創建平臺?

import flash.events.KeyboardEvent; 
import flash.events.Event; 

var KeyThatIsPressed:uint; 
var rightKeyDown:Boolean = false; 
var leftKeyDown:Boolean = false; 
var upKeyDown:Boolean = false; 
var downKeyDown:Boolean = false; 

var gravity:Number = 1; 
var yVelocity:Number = 0; 
var canJump:Boolean = false; 
var playerSpeed:Number = 7; 
var crouchSpeed:Number = -4; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, PressAKey); 
stage.addEventListener(KeyboardEvent.KEY_UP, ReleaseAKey); 

function PressAKey(event:KeyboardEvent):void{ 
    if(event.keyCode == 37 || event.keyCode == 65){ 
     leftKeyDown = true; 
    } 
    if(event.keyCode == 38 || event.keyCode == 87){ 
     upKeyDown = true; 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
    } 
    if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
    } 
} 

function ReleaseAKey(event:KeyboardEvent):void{ 
    if(event.keyCode == 37 || event.keyCode == 65){ 
     leftKeyDown = false; 
    } 
    if(event.keyCode == 38 || event.keyCode == 87){ 
     upKeyDown = false; 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = false; 
    } 
    if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = false; 
    } 
} 

char_mc.addEventListener(Event.ENTER_FRAME, moveChar); 

function moveChar(event:Event):void{ 
    if(rightKeyDown){ 
     char_mc.x += playerSpeed; 
     char_mc.scaleX = 1; 
    } 
    if(rightKeyDown && !downKeyDown && canJump == true){ 
     char_mc.gotoAndStop(2); 
    } 
    if(leftKeyDown){ 
     char_mc.x -=playerSpeed; 
     char_mc.scaleX = -1; 
    } 
    if(leftKeyDown && !downKeyDown && canJump == true){ 
     char_mc.gotoAndStop(2); 
    } 
    if(upKeyDown && canJump){ 
     yVelocity = -10; 
     canJump = false; 
     char_mc.gotoAndStop(3); 
    } 
    if(downKeyDown && !rightKeyDown && !leftKeyDown){ 
     char_mc.gotoAndStop(4); 
    } 
    if(downKeyDown && rightKeyDown && canJump == true){ 
     char_mc.x +=crouchSpeed; 
     char_mc.gotoAndStop(5); 
    } 
    if(downKeyDown && leftKeyDown && canJump == true){ 
     char_mc.x -=crouchSpeed; 
     char_mc.gotoAndStop(5); 
    } 
    if(upKeyDown && canJump && rightKeyDown){ 
     canJump = false; 
     char_mc.gotoAndStop(3); 
    } 
    if(upKeyDown && canJump && leftKeyDown){ 
     canJump = false; 
     char_mc.gotoAndStop(3); 
    } 

    if(!rightKeyDown && !leftKeyDown && !upKeyDown && !downKeyDown){ 
     char_mc.gotoAndStop(1); 
    } 
    if(yVelocity >0){ 
     canJump = false; 
    } 
    if (canJump == false){ 
     char_mc.gotoAndStop(3); 
    } 

    yVelocity +=gravity; 

    if(! floor_mc.hitTestPoint(char_mc.x, char_mc.y,true)){ 
     char_mc.y+=yVelocity; 
    } 
    if(yVelocity > 20){ 
     yVelocity = 20; 
    } 

    for(var i:int=0;i<10;i++){ 
     if(floor_mc.hitTestPoint(char_mc.x,char_mc.y,true)){ 
      char_mc.y--; 
      yVelocity=0; 
      canJump=true; 
     } 
    } 

    if (char_mc.hitTestObject(fallBox)){ 
     char_mc.x = 20; 
     char_mc.y = 300; 
    } 
} 

後或任何地方,我來到了這裏。我希望你能幫忙。謝謝!

回答

1

我建議使用像http://citrusengine.com/或其他引擎或http://www.box2dflash.org/這樣的東西,這將使您的生活變得輕鬆,而不是試圖重新發明輪子。

+0

這些看起來不錯,但仍然不是我所搜索的。我已經買了citrusengine,而且我沒有錢,而Box2D太難了。我需要一個簡單的解決方案來解決這個問題,比如'使用hitTest和怎麼樣'或者其他一些變量... – user1429524

+0

建議一個框架並不能回答這個問題,最好的學習工具就是DIY。 –