2013-12-17 60 views
0

我的遊戲從開始幀開始。點擊遊戲按鈕。如果我碰到一個物體,我會在屏幕上游戲。每次我點擊屏幕上的遊戲按鈕時,我的角色控件都會變得更快。我沒有設置速度的變量,只是「mc_guy.x + = 3」或.y等。如果我不得不說速度提高了兩倍,我會說速度要快多少。角色越來越快每次我從遊戲畫面中重置我的遊戲在動作腳本3

import flash.events.Event; 
import flash.ui.Keyboard; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.display.MovieClip; 


//prevent game loop 
stop(); 

// event listeners for movement 
mc_Guy.addEventListener(Event.ENTER_FRAME, update); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownGuy); 
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpGuy); 


// this array holds references to all the keys 
var keys:Array = []; 



//initiate default values 
fuelGauge.height = 100; 




//Gravity 
addEventListener(Event.ENTER_FRAME,Gravity) 

var GyAmt:Number = 5; 


function Gravity(e:Event){ 
mc_Guy.y += GyAmt; 

if (gameFloor.hitTestObject(mc_Guy)){ 
    mc_Guy.y = gameFloor.y;} 
else if (gameFloor2.hitTestObject(mc_Guy)){ 
    mc_Guy.y = gameFloor2.y;} 
else if (gameFloor3.hitTestObject(mc_Guy)){ 
    mc_Guy.y = gameFloor3.y;}} 



// the event listeners 
function update(e:Event):void 
{ 
    if (keys[Keyboard.RIGHT]) 
    { 
     mc_Guy.x += 3; 
    } 

    if (keys[Keyboard.LEFT]) 
    { 
     mc_Guy.x -= 3; 
    } 
    if (keys[Keyboard.SPACE]){ 
     mc_Guy.y -= 10; 
        //drain fuel 
        fuelGauge.height -= 1; 
        gaugePercent.text = String(fuelGauge.height) 
        if (fuelGauge.height == 0){ 
         nextFrame();}} 
} 

function onKeyDownGuy(e:KeyboardEvent):void 
{ 
    keys[e.keyCode] = true; 
} 

function onKeyUpGuy(e:KeyboardEvent):void 
{ 
    keys[e.keyCode] = false; 

} 






//Array storing each wall 
var MC_wall:Array = new Array(mc_Wall,mc_Wall2,mc_Wall5, 
mc_Wall6,mc_Wall7,mc_Wall8,mc_Wall9,mc_Wall10,mc_Wall11,mc_Wall12, mc_Wall13) 




//Collision Detection 
addEventListener(Event.ENTER_FRAME,loop); 
function loop(e:Event){ 
     var i:Number = 0; 
    do { 
     if (MC_wall[i].hitTestObject(mc_Guy)){ 
      nextFrame();} 
    i++; 
    } while (i < MC_wall.length); 


    /* for (var i:Number = 0; i < MC_wall.length; i++){ 
     if (MC_wall[i].hitTestObject(mc_Guy)){ 
      nextFrame();} 
      }*/ 

    if(mc_Guy.hitTestPoint(mc_WallRun.x, mc_WallRun.y, false)){ 
      nextFrame();} 
    else if(mc_Guy.hitTestObject(fuelPowerup)){ 
      removeChild(fuelPowerup); 
      fuelGauge.height = 100; 
      gaugePercent.text = String(fuelGauge.height)} 
    else if(mc_Guy.hitTestObject(doorKey)){ 
     removeChild(doorKey) 
       //open door 
      mc_Wall13.height -=20 
      mc_Wall13.y -= 10 
      } 

} 

//Object Movement 
addEventListener(Event.ENTER_FRAME, onEnterFrame); 
var spinSpeed:Number=6; 
var axisMove:Number = 90; 
var axisMovement:Number = 3; 

function onEnterFrame(event:Event):void 
{ 
mc_WallRun.rotation+=spinSpeed; 
     //count the movement on axis and move 
     axisMove -= 3; 
     mc_Wall9.x += axisMovement; 
     gameFloor3.x += axisMovement * .9; 
     if(axisMove <= 0){ 
     axisMove += 90 
     axisMovement = axisMovement*-1 
     } 
} 

GAMEOVER框架:

import flash.events.MouseEvent; 

stop(); 

restartGame.addEventListener(MouseEvent.MOUSE_DOWN, playAgain); 
function playAgain(event:MouseEvent):void{ 
    prevFrame(); 
} 

回答

4

這聽起來當您重新啓動遊戲

mc_Guy.addEventListener(Event.ENTER_FRAME, update); 

被再次調用,而不刪除先前添加的監聽器等。

因此,現在在Event.ENTER_FRAME上調用兩次更新,然後每幀重置一次,然後再一次更新,導致該人移動得更快。

+0

非常感謝你,我在編程方面仍然處於初級水平,並且不知道我必須刪除一個監聽器。我用於Visual Basic,其中很多可能只需要幾條線路工作,而不是閃光燈,這需要幾行才能完成相同的工作。 –

+0

@SorceressStabberThomas很高興我可以有一些幫助:-) – Farce