2011-12-30 55 views
1

我是一名使用flash开发项目的学生。我只是试图在Adobe Flash CS5中使用Actionscript 3制作Flash游戏。一切工作正常,我可以走路和跳跃,但如果主要角色接触一个物体并死亡(如坑中的尖刺),我希望游戏重新开始。我在第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 2011-12-30 01:57:14

+0

这是一个helluva lotta代码。你介意修剪它只有必要的部分?另外,请根据@MartyWallace所说的说明 – 2011-12-30 05:33:27

回答

0

如果我没有理解这个权利,当你死了,你要重新启动的水平。要做到这一点,你可以将所有的初始变量保存在数组中,比如玩家的位置,落地位置等,然后在死亡时将这些变量恢复到相应的对象。但是,当你变得更加复杂并且有很多很多的对象时,它可能会变得棘手。

一个更简单的解决方案是,当你按下重启按钮或在一定的时间延迟之后,当你点击死亡对象时在死亡屏幕上显示某种死亡屏幕(让我们称它为框架3) ,然后回到第2帧并重新开始关卡。

例子:

在moveThePlayer功能将这个:

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,有类似:

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); 
} 

你也可以做类似的存储变量你想回到哪个框架,所以你有一个单一的重试框架,可以达到你刚才的任何级别。

+0

是的,谢谢你的帮助!这正是我一直在寻找的,我写错了代码,它让我感到困惑。谢谢! – JohnD 2012-01-02 22:55:05

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 2012-01-02 22:55:48