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