2011-12-30 13 views
1

私はフラッシュを使ったプロジェクトに取り組んでいる学生です。私は単にAdobe Flash CS5でActionscript 3を使ってフラッシュゲームを作ろうとしています。すべてがうまく動いている、私は歩くとジャンプすることができますが、メインキャラクターがオブジェクトに触れ、(ピットのスパイクのように)死ぬと、ゲームを再開したい。私はフレーム1のメインメニューとフレーム2の最初のレベルを持っています。メインキャラクターは "player_mc"と呼ばれ、彼を殺すオブジェクトは "ダイ"と呼ばれています。ヘルプとヒントは非常に高く評価されています。オブジェクトを私のゲームにリセットする方法は?

コード:

//The Code For The Character (Player_mc) 
import flash.events.KeyboardEvent; 
import flash.events.Event; 

var KeyThatIsPressed:uint; 
var rightKeyIsDown:Boolean = false; 
var leftKeyIsDown:Boolean = false; 
var upKeyIsDown:Boolean = false; 
var downKeyIsDown:Boolean = false; 

var playerSpeed:Number = 20; 
var gravity:Number = 1; 
var yVelocity:Number = 0; 
var canJump:Boolean = false; 
var canDoubleJump:Boolean = false; 

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


//This two functions cllapsed is the keybindings that the game uses 
function PressAKey(event:KeyboardEvent):void 
{ 
    if(event.keyCode == Keyboard.D) 
    { 
     rightKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.A) 
    { 
     leftKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.SPACE) 
    { 
     upKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.S) 
    { 
     downKeyIsDown = true; 
    } 
} 

function ReleaseAKey(event:KeyboardEvent):void 
{ 
    if(event.keyCode == Keyboard.D) 
    { 
     rightKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.A) 
    { 
     leftKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.SPACE) 
    { 
     upKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.S) 
    { 
     downKeyIsDown = false; 
    } 
} 

//Player animations 
player_mc.addEventListener(Event.ENTER_FRAME, moveThePlayer); 

function moveThePlayer(event:Event):void 
{ 
    if(!canJump || rightKeyIsDown && !canJump || leftKeyIsDown && !canJump) 
    { 
     player_mc.gotoAndStop(3); 
    } 
    if(!upKeyIsDown && !rightKeyIsDown && !leftKeyIsDown && canJump) 
    { 
     player_mc.gotoAndStop(1); 
    } 
    if(rightKeyIsDown && canJump || leftKeyIsDown && canJump) 
    { 
     player_mc.gotoAndStop(2); 
    } 
    //Animation stops here 

    if(rightKeyIsDown) 
    { 
     floor_mc.x -= playerSpeed; 
     dies.x -= playerSpeed; 
     player_mc.scaleX = 0.3; 
    } 
    if(leftKeyIsDown) 
    { 
     floor_mc.x += playerSpeed; 
     dies.x += playerSpeed; 
     player_mc.scaleX = -0.3; 
    } 
    if(upKeyIsDown && canJump) 
    { 
     yVelocity = -18; 
     canJump = false; 
     canDoubleJump = true; 
    } 
    if(upKeyIsDown && canDoubleJump && yVelocity > -2) 
    { 
     yVelocity =-13; 
     canDoubleJump = false; 
    } 
    if(!rightKeyIsDown && !leftKeyIsDown && !upKeyIsDown) 
    { 
     player_mc.gotoAndStop(1); 
    } 
    yVelocity +=gravity 

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

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

あなたは 'player_mc'と' dies'の衝突をどうやって判断するのか、ゲーム変数などをリセットする方法は? – Marty

+0

これは、大胆なロッタコードです。あなたはそれを必要な部分だけにトリミングしても構いませんか?また、@ MartyWallaceさんが言ったことにより明確にしてください –

答えて

0

私はあなたが死ぬこの権利を、理解していれば、あなたはレベルを再起動します。これを行うには、配列内のプレーヤーの位置、床の位置などのすべての初期変数を保存し、死んだときに、それらの変数を対応するオブジェクトに復元することができます。しかし、あなたがもっと複​​雑になり、たくさんのオブジェクトを持っていると、それはやりにくくなる可能性があります。

もっと簡単な解決策は、ダイオブジェクトを叩いたときに別のフレーム(フレーム3と呼ぶこともあります)にある種のデススクリーンを表示し、再起動ボタンを押すか、フレーム2に戻り、レベルを再開します。

例:

があなたのmoveThePlayer機能でこれを入れて:あなたはまた、上の変数を格納ような何かを行うことができ

import flash.events.MouseEvent; 

retry_button.addEventListener(MouseEvent.CLICK, retry); 

function retry(e:MouseEvent) { 
    retry_button.removeEventListener(MouseEvent.CLICK, retry); 

    // back to the level 
    gotoAndStop(2); 
} 

if(dies.hitTestPoint(player_mc.x, player_mc.y, true)) 
{ 
    // remove all the event listeners 
    player_mc.removeEventListener(Event.ENTER_FRAME, moveThePlayer); 
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey); 
    stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey); 

    gotoAndStop(3); // this has your "dead" screen on it. 
} 

そして、フレーム3上には、のようなものを持っていますどのフレームを元に戻したいのですか。ただ1つの再試行フレームがあり、直前のどのレベルにでも戻ることができます。

+0

はい、助けてくれてありがとう!これはまさに私が探していたものでした、私はコードを間違って書いていました、そして、それは私のためにうんざりしました。ありがとう! – JohnD

0

あなたが開発しなければならない良い習慣は、ゲームで作業するときに更新するendGame()または同様の方法です。例えば

function endGame():void 
{ 
    // nothing here yet 
} 

は今、あなたはプレーヤーを作成すると言うことができます。プレイヤーは最初にこのように設定されています

player.health = 100; 
player.dead = false; 

あなたはこれを反映するためにあなたのendGame()方法を更新したいと思うでしょう。

function endGame():void 
{ 
    player.health = 100; 
    player.dead = false; 
} 

ゲームエンジン自体に関連する変数がいくつかありますか?

var score:int = 0; 
var lives:int = 3; 

あまりにもそれらを追加します。今すぐ

function endGame():void 
{ 
    player.health = 100; 
    player.dead = false; 

    score = 0; 
    lives = 3; 
} 

endGame()は元の状態にゲームをリセットする必要があります。最後まで残しておき、すべてをカバーしているかどうかを確認するのではなく、このように(ゲームをコーディングするときに)簡単に作業できます。これはほとんどありません。

+0

私はあなたが何を参照して、フィードバックに感謝します – JohnD

関連する問題