2012-01-13 7 views
1

イム内のブロックの上に実行中... 私は、最初のゲームをexplaingます:あなたは一瞬の文字(黒です四角形)、落下しているブロックを飛び越えてできるだけ高くする必要があります。私が現時点でできることは、ジャンプしてブロック(左 - 右)と衝突し、ブロックにジャンプすることです。フラッシュAS3:、フラッシュのActionScript 3でゲームを作るほぼ完了が、私はいくつかの問題を持っている私のゲーム

2つのブロックがちょうど隣り合っているとき(ブロックAがブロックBの隣にあるとき)、ブロックAにジャンプしてブロックBにジャンプしたい(ジャンプしないで実行する)非常に奇妙な何か、私はブロック上を歩くことができません: 私は1週間以上を探していますが、まだ進歩はありません。だから私はここで何か助けを得ることができることを望む。ビジュアライゼーションなしで問題を説明するのは非常に難しいので、ファイルをアップロードして自分でテストできるようにしました。 ダウンロードリンク:http://www.megaupload.com/?d=JT4158KA

イムまだ初心者なので、ビット助けを得ることは素晴らしいことだ。..イムは、一週間以上のために、この時に立ち往生: ね私も先生に尋ね、彼はそれを解決することができませんでした。だから私はあなたたちは

役立つことを願っしかし、あなたは私の説明を理解し、および/または怠惰にされている場合は、私のファイル(17キロバイトの大:p)をダウンロードするにはここでの問題はあるべきコードがある

package Classes 

{ import flash.events。*; import flash.display.MovieClip; import flash.display.Stage; import flash.ui.Keyboard; import Classes.KeyObject;

public class Player extends MovieClip 
{ 
    var isJumping:Boolean = false; 
    var jumpPower:int = 0; 
    var ground:int; 
    var stageRef:Stage; 
    var key:KeyObject; 
    var isDead:Boolean = false; 
    var allBlocks:Array; 
    var blockX:int; 
    var blockY:int; 
    var blockWidth:int; 
    var blockHeight:int; 
    var steps:int = 10; 
    var upPressed:Boolean = false; 
    public function Player(stageReff:Stage,allBlocks:Array) 
    { 

     stageRef = stageReff; 
     key = new KeyObject(stageRef); 
     this.allBlocks = allBlocks; 
     ground = stageRef.stageHeight; 
     addEventListener(Event.ENTER_FRAME,update); 
     //addEventListener(KeyboardEvent.KEY_UP, keyReleased); 
    } 

    function isHit() 
    { 
     for (var j = 0; j < allBlocks.length; j++) 
     { 
      if (this.hitTestObject(allBlocks[j]) && allBlocks[j] != isOnTopOf()) 
      { 
       blockX = allBlocks[j].x; 
       blockY = allBlocks[j].y; 
       blockWidth = allBlocks[j].width; 
       blockHeight = allBlocks[j].height; 
       return true; 
      } 
     } 
     return false; 
    } 

    function isHitTop() 
    { 
     for (var j = 0; j < allBlocks.length; j++) 
     { 
      if (this.PlayerBottom.hitTestObject(allBlocks[j].hitBoxTop)) 
      { 
       jumpPower = 0; 
       isJumping = false; 
       this.y = allBlocks[j].y - allBlocks[j].height; 
       return true; 
      } 
     } 
     return false; 
    } 

    function isHitBottom() 
    { 
     for (var j = 0; j<allBlocks.length; j++) 
     { 
      if (this.hitTestObject(allBlocks[j].hitBoxBottom)) 
      { 
       if (isJumping) 
       { 
        this.y = allBlocks[j].y + this.height; 
        jumpPower=0; 
        isJumping = false; 
        isDead = false; 
        trace(isDead); 
       } 


       else 
       { 

        isDead = true; 
        trace(isDead); 
       } 
      } 
     } 
    } 

    function isOnTopOf() 
    { 
     for (var j = 0; j < allBlocks.length; j++) 
     { 
      if (this.PlayerBottom.hitTestObject(allBlocks[j].hitBoxTop)) 
      { 
       trace("is WEL onTopOf"); 
       return allBlocks[j]; 
      } 
     } 
     trace("is NIET onTopOf"); 
     return null; 
    } 


    function update(evt:Event):void 
    { 
     if (!isDead) 
     { 
      isHitTop(); 
      isHitBottom(); 
      if (key.isDown(Keyboard.UP)) 
      { 
       //Voorkomen dat hij 2x springt 
       if (! isJumping) 
       { 
        jumpPower = 12; 
        isJumping = true; 
       } 
      } 

      if (key.isDown(Keyboard.LEFT)) 
      { 
       if (this.x > stageRef.stageWidth - stageRef.stageWidth) 
       { 
        this.x -= steps; 
        if (isHit() == true) 
        { 
         this.x = blockX + blockWidth + 1; 
         //trace("is gehit maar staat er niet op"); 
        } 

       } 
      } 
      else if (key.isDown(Keyboard.RIGHT)) 
      { 
       if (this.x < stageRef.stageWidth - this.width) 
       { 
        this.x += steps; 
        if (isHit() == true) 
        { 
         this.x = blockX - this.width - 1; 
         this.y = blockY; 
        } 
       } 
      } 


      if (isJumping) 
      { 
       this.y -= jumpPower; 
       jumpPower -= 2; 
       isHitTop(); 
       isHitBottom(); 
      } 


      if (! isJumping && ! isHitTop()) 
      { 
       this.y += 7; 
      } 


      if (this.y > ground) 
      { 
       this.y = ground; 
       isJumping = false; 
      } 
     } 
     else 
     { 
      removeEventListener(Event.ENTER_FRAME,update); 
     } 
    } 
} 

}

答えて

0

問題はここにある:あなたがブロックにジャンプ

if (isHit() == true) 
{ 
    this.x = blockX - this.width - 1; 
    this.y = blockY; 
} 

。次に、右矢印を押して右に進みます(この行はelse if (key.isDown(Keyboard.RIGHT))になります)。このコードでは、衝突があるかどうかを確認します。そうです、彼らはブロックにとどまっているからです。だからあなたのキャラクターは、この座標を取得: - this.width -

this.x = blockX 1。 this.y = blockY;

しかしblockX、ブロック状とthis.widthが固定されています。あなたの性格は固定されています。

0

私は問題を解決してきました。関数に問題がありましたisHit() メニュー、スコア、twitterフィードのような新しい機能も追加しました。

は、私はほとんどのゲームで行われています。ラウンドアップするもう一つのこと、私が自分のキャラクターで十分に高くなったら、ある時点で私は自分のシーンのトップに達したので、私はそれ以上高くなることはできません。私は例えばしたいです。私の性格は、シーンが「上がる」になる私のsceneheightの50%である場合にはそのように私は私のゲームで無限大まで行くと、私のキャラクターは私のシーンのトップに到達することはありませんことを好むことができます。どうやってやるの?ここで

は、新しい機能とアップデートゲームです:) http://www.megaupload.com/?d=TGGTKF5N

ヒント/トリックまたは改善やフィードバックは常に歓迎されている=)

関連する問題