Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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_Flash_Flash Cs5 - Fatal编程技术网

Actionscript 3 如何让角色跳跃?

Actionscript 3 如何让角色跳跃?,actionscript-3,flash,flash-cs5,Actionscript 3,Flash,Flash Cs5,这是我第一次需要在我的游戏中使用它。我想让角色跳跃。我已经试着得到这个结果大约一个小时了,但是没有运气=(我使用的是AS3和flash CS5.5。到目前为止,我的代码所做的只是根据键盘输入使字符向左和向右移动。有人能帮我吗 以下是我目前的代码: public class Dodgeball extends MovieClip { public var character:Character; public var rightDown:Boolean = false; p

这是我第一次需要在我的游戏中使用它。我想让角色跳跃。我已经试着得到这个结果大约一个小时了,但是没有运气=(我使用的是AS3和flash CS5.5。到目前为止,我的代码所做的只是根据键盘输入使字符向左和向右移动。有人能帮我吗

以下是我目前的代码:

public class Dodgeball extends MovieClip
{
    public var character:Character;
    public var rightDown:Boolean = false;
    public var leftDown:Boolean = false;
    public var speed:Number = 3;
    public var timer:Timer;


    public function Dodgeball()
    {

        character= new Character();
        addChild(character);

        stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
        stage.addEventListener(KeyboardEvent.KEY_UP, MyKeyUp);
        timer = new Timer(24);
        timer.addEventListener(TimerEvent.TIMER, moveClip);
        timer.start();

    }
    public function myKeyDown(event:KeyboardEvent):void
    {
        if (event.keyCode == Keyboard.RIGHT)
        {
        rightDown = true;

            if(character.currentLabel != "walkingRight")
            {
                character.gotoAndStop ("walkingRight");
            }
        }
        if (event.keyCode == Keyboard.LEFT)
        {
            leftDown = true;
                if (character.currentLabel != "backingUp")
                {
                    character.gotoAndStop("backingUp");
                }
        }
    }
    public function MyKeyUp(event:KeyboardEvent):void
    {
        if(event.keyCode == Keyboard.RIGHT)
        {
            character.gotoAndStop("standing");
            rightDown = false;
        }
        if (event.keyCode == Keyboard.LEFT)
        {
            character.gotoAndStop("standingLeft");
            leftDown = false;
        }
    }
    public function moveClip(event:TimerEvent):void
    {
        if (rightDown)
        {
            character.x += speed;
        }
        if (leftDown)
        {
            character.x -=speed;
        }
        event.updateAfterEvent();
    }
}

}

我要做的是创建一个角色跳跃的运动tween。然后在该帧上调用gotoAndPlay,在tween的最后一帧上放置一个停止,或在“静止”帧上放置一个gotoAndStop,或任何表示中性位置的帧

   if (event.keyCode == Keyboard.SHIFT)
   {
       character.gotoAndPlay("simpleJump");
       jumpDown = false;
   }
这将为您提供对外观和感觉的最佳动画控制。您也可以通过编程方式进行此操作,但就我个人而言,我建议您不要这样做。设置此操作将花费较少的时间,并且您可以稍后调整和优化跳转动画。您可以根据目标附近的对象等制作多种类型的跳转动画

我也会改变这些东西:

if(character.currentLabel != "walkingRight")
通过定义一个新函数,在该函数中,您拥有执行某些操作的时间和地点的所有规则,因此在控制逻辑中,您只需调用

if(characterCan(character,"walkright")) ...

其中characterCan(字符串)是一种检查这是否可行的方法。例如,如果你在跳跃和射击,你显然不能正确行走,因此最后,你必须开始向那些if语句中添加逻辑片段,它将变得杂乱无章。

你可以尝试的一种方法是:像你的
速度
变量,
grav
确定角色的垂直位置

var grav:Number = 10;
var jumping:Boolean = false;
var jumpPow:Number = 0;

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

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


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

        if(player_mc.y >= stage.stageHeight)
        {
            jumping = false;
            player_mc.y = stage.stageHeight;
        }
    }
}    

编辑:Jason的方法很好,但我不确定如果你计划进行某种碰撞检测,它是否有用。

一个非常简单的方法是既有垂直速度又有水平速度。 当用户按下“向上”或“跳跃”时,将y速度设置为负值,并在movieClip函数中进行更新。当角色达到一定高度时,反转速度

使用重力和加速度看起来更好,但这确实是一个很好的起点。查看运动学方程,看看如何使角色加速

public var originalY;

public function myKeyDown(event:KeyboardEvent):void
{
    if (event.keyCode == Keyboard.UP && vSpeed == 0)
    {
        originalY = character.y;
        ySpeed = -1;
    }
}


public function moveClip(event:TimerEvent):void
{
    if (vSpeed != 0)
    {
        character.y += vSpeed;

        /* make the character fall down after reaching max jump height */
        if(originalY - character.y > jumpHeight) {
            vSpeed = vSpeed * -1;
        }

        /* level the character after he's hit the ground (so he doesn't go through) */
        else if(character.y >= originalY) {
            character.y = originalY;
            vSpeed = 0;
        }
    }
}
如果需要,请尝试
if(event.keyCode==event.RIGHT)