2015-04-21 116 views
1

我目前正在嘗試爲Android編程Flash遊戲。重力/速度與跳躍問題(AS3,平臺遊戲)

我有或多或少的工作重力&速度和命中測試 - 所以我不通過我的平臺。

現在的問題是,只要我點擊「跳躍」,命中測試就停止工作,我會穿過平臺。如果我把我的角色設置到另一個更高的位置,我甚至不會掉下來。

誰能幫我想出解決辦法?

這裏是我的代碼:

import flash.events.MouseEvent; 
import flash.events.Event; 


var gravity:Number = 2; 
var velocity:Number = 1.1; 
var jumpPower:Number = 0; 
var isJumping:Boolean = false; 


stage.addEventListener(Event.ENTER_FRAME, touchPlatform); 
player.addEventListener(Event.ENTER_FRAME, appeal); 

function touchPlatform(e:Event):void 
    { 
     if(kurz.hitTestObject(player)) 
      { 
       hitPlatform = true; 
       } 

     else if(kurz2.hitTestObject(player)) 
      { 
       hitPlatform = true; 
       } 

     } 

function appeal(e:Event):void        
    { 
     gravity *= velocity;  
     player.y += gravity;         

     if(hitPlatform == true) 
     { 
      velocity = 0; 
      } 

    } 


jump.addEventListener(MouseEvent.CLICK, doJump); 
stage.addEventListener(Event.ENTER_FRAME, update); 
function doJump(e:MouseEvent):void 
{ 
    if(!isJumping) 
    { 
     jumpPower = 30; 
     isJumping = true; 
     } 
    } 

function update(e:Event):void 
    { 
     if(isJumping) 
     { 
      player.y -= jumpPower; 
      jumpPower -= 2; 

      } 

     else 
     { 
      isJumping = false; 
      } 
     } 

回答

1

你的問題是,一旦你開始跳,你永遠不會停止!沒有哪裏(可以達到)你是否設置isJumping爲false。此外,你的跳躍價值和你的引力目前一起運行,你只需要一個或另一個影響你的球員在任何給定的時間。

嘗試這樣的事情(見代碼註釋爲解釋相關)

import flash.events.MouseEvent; 
import flash.events.Event; 


var gravity:Number = 2; 
var velocity:Number = 1.1; 
var jumpPower:Number = 0; 
var isJumping:Boolean = false; 

jump.addEventListener(MouseEvent.CLICK, doJump); 
function doJump(e:MouseEvent):void { 
    if(!isJumping){ 
     jumpPower = 30; 
     isJumping = true; 
    } 
} 


//Just one ENTER_FRAME handler is better, 
//then you have more control over the order in which code gets run 
//I've combined your three into one and called it gameLoop 
stage.addEventListener(Event.ENTER_FRAME, gameLoop); 

function gameLoop(e:Event):void { 
    //this is the same, I just combined your 2 if's into one. 
    if(kurz.hitTestObject(player) || kurz2.hitTestObject(player)){ 
     hitPlatform = true; 
    }        

    //you should set the velocity before assigning it to the player 
    if(hitPlatform == true){ 
     velocity = 0; 
     gravity = 2; //you probably want to reset gravity to default too 
     isJumping = false; //SET isJumping to false now that you've hit a platform! <------------- 
    }else{ 
     velocity = 1.1; //you need to reset velocity when not on a platform 
    } 


    //Now that we've determined the velocity and if we're jumping, let's move the player the appropriate amount 

    if(isJumping){ 
     //Since we're currently jumping, use the jumpPower instead of gravity 
     player.y -= jumpPower; 
     jumpPower -= 2; 
    }else{ 
     if(!hitPlatform){ 
      //Since we're NOT JUMPING, and not on a platform, use gravity. 
      gravity *= velocity;  
      player.y += gravity; 
     } 
    } 
} 
+0

哦..是啊,這是有道理的! 謝謝,我能解決它! :) – Nighthawk