Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在actionscript 3.0中,速度保持堆叠_Actionscript 3 - Fatal编程技术网

Actionscript 3 在actionscript 3.0中,速度保持堆叠

Actionscript 3 在actionscript 3.0中,速度保持堆叠,actionscript-3,Actionscript 3,我们一直在为我们的职业CPT制作这个游戏,你作为一个角色来玩,试图通过这些关卡,但问题是,每次你死后再回到这个关卡,速度会叠加在之前的速度之上,以至于游戏不再可以玩了。我们尝试过重置它并将其设置回0,但似乎没有任何效果。我们也尝试过对其进行编码,使其速度超过21,它将重置回20(我们的理想速度)。我们还尝试移除可能堆积在另一个之上的额外事件侦听器。如果你碰巧死了,但到达下一帧,该帧的速度会回到20。但如果你在该帧上死了,该帧的速度也会加倍。我们的代码是: import flash.events.

我们一直在为我们的职业CPT制作这个游戏,你作为一个角色来玩,试图通过这些关卡,但问题是,每次你死后再回到这个关卡,速度会叠加在之前的速度之上,以至于游戏不再可以玩了。我们尝试过重置它并将其设置回0,但似乎没有任何效果。我们也尝试过对其进行编码,使其速度超过21,它将重置回20(我们的理想速度)。我们还尝试移除可能堆积在另一个之上的额外事件侦听器。如果你碰巧死了,但到达下一帧,该帧的速度会回到20。但如果你在该帧上死了,该帧的速度也会加倍。我们的代码是:

import flash.events.Event;
import flash.display.MovieClip;



//makes the character jump
var grav:Number = 10;
var jumping:Boolean = false;
var jumpPow:Number = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN, whenKeyPressed);
stage.addEventListener(Event.ENTER_FRAME, update);

function whenKeyPressed(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.UP)
{
    if(jumping != true)
    {
        jumpPow = -50;
        jumping = true;
    }
}   
}


function update(event:Event):void
{
if(jumping)
{
    player_mc.y += jumpPow;
    jumpPow += grav;

    if(player_mc.y >= stage.stageHeight)
    {
        jumping = false;
        player_mc.y = stage.stageHeight;
    }
    }
    //when the character makes it to the other side of the screen, the frame 
    changes
    if (player_mc.hitTestObject(frameChanger1))
    {
    gotoAndStop(91);
    }
    //end the game when the character touches the penguin
    if (player_mc.hitTestObject(penguin1))
   {
    gotoAndStop(89);
   }
   } 

   //makes the character move left and right
   var leftPressed:Boolean = false;
   var rightPressed:Boolean = false;

   player_mc.addEventListener(Event.ENTER_FRAME, moveInDirectionOfKey);
   stage.addEventListener(KeyboardEvent.KEY_DOWN, setKeyPressed);
   stage.addEventListener(KeyboardEvent.KEY_UP, unsetKeyPressed);

    function moveInDirectionOfKey(event:Event)
  {
   if (leftPressed)
  {
    player_mc.x -= 20;
  }
   if (rightPressed)
  {
    player_mc.x += 20;
  }
  }

   function setKeyPressed(event:KeyboardEvent):void
  {
   switch (event.keyCode)
  {
    case Keyboard.LEFT:
    {
        leftPressed = true;
        break;
    }
    case Keyboard.RIGHT:
    {
        rightPressed = true;
        break;
    }
    }
   }

     function unsetKeyPressed(event:KeyboardEvent):void
    {
        switch (event.keyCode)
    {
    case Keyboard.LEFT:
    {
        leftPressed = false;
        break;
    }
    case Keyboard.RIGHT:
    {
        rightPressed = false;
        break;
    }
    }
   //when the character makes it to the other side of the screen, the frame 
   changes
   if (player_mc.hitTestObject(frameChanger1))
  {
    gotoAndStop(91);
  }
    //end the game when the character touches the penguin
    if (player_mc.hitTestObject(penguin1))
  {
    gotoAndStop(89);
  }
  }
您是否尝试过:

if(!stage.hasEventListener(Event.ENTER_FRAME)){
    stage.addEventListener(Event.ENTER_FRAME, update);
}
if(!stage.hasEventListener(KeyboardEvent.KEY_DOWN)){
    stage.addEventListener(KeyboardEvent.KEY_DOWN, setKeyPressed);
}
if(!stage.hasEventListener(KeyboardEvent.KEY_UP)){
    stage.addEventListener(KeyboardEvent.KEY_UP, unsetKeyPressed);
}
if(!player_mc.hasEventListener(Event.ENTER_FRAME)){
    player_mc.addEventListener(Event.ENTER_FRAME, moveInDirectionOfKey);
}
等等

否则,您将多次注册事件。。。 这可能就是问题所在。 我不确定,我避免在多个帧上编码


您也可以在此处使用@Philarmon的答案

@kaylee clarke:如果此代码解决了您的问题,请将答案标记为正确