0

首先,我知道,我仍在使用 AS 2,我应该与时俱进,但现在我使用的是 AS2。我在另一个游戏上编写了这个程序,但由于某种原因,我无法复制结果,并且我不小心删除了另一个游戏。我的问题是我试图让玩家进行 3 次不同的攻击,每次按下“A”键时都会进行一次攻击,但它所做的只是第一次攻击。

这是我的设置。

我有一个包含 4 个关键帧的影片剪辑,一个关键帧有一个标记为“idle”的空闲播放器影片剪辑,一个带有一个标记为“walking”的步行影片剪辑,一个带有一个标记为“jumping”的跳跃播放器影片剪辑,最后一个用于攻击,你猜对了,标记为“攻击”。在我的攻击视频剪辑中,我有 3 次攻击的动画,每次攻击的最后一帧都有一个停止命令,然后检查键“A”是否被推,如果被推,则再次播放。每次攻击都重复此操作。

在我的主要播放器影片剪辑(包含所有其他影片剪辑)中,我编写了以下代码。

 onClipEvent(enterFrame){
 var walkspd = 5;
 var sprintspd = 2;
 var gravity = 5;   
 var decel = .1;

//步行

if (Key.isDown(Key.RIGHT)){
    this.gotoAndStop("walk");
    this._xscale = 100
    this._x += walkspd;
}
if (Key.isDown(Key.LEFT)){
    this.gotoAndStop("walk");
    _xscale = -100;
    _x -= walkspd;
}
else {
    if(Key.isDown(Key.RIGHT) == false && Key.isDown(Key.LEFT) == false && Key.isDown(65) == false){
        this.gotoAndStop("idle");
    }
}

//攻击

if (Key.isDown(65)){
    gotoAndStop("attack")
}

}

我怎样才能让它正常工作?

4

1 回答 1

0

如果我理解正确,您需要在每次按下“A”键时显示一个新的攻击剪辑(3 个中的 1 个)......如果这是您的情况,请查看这个工作示例(它是 CS5 .fla 文件,对不起,我无法以旧格式保存它,因为我只安装了最新版本):

http://www.4shared.com/zip/Z-Adpv_x/KeyMoveExample.html

您的代码的固定版本应如下所示:

onClipEvent (load) {
    // Constants :
    var walkspd:Number = 5;
    var sprintspd:Number = 2;
    var gravity:Number = 5;
    var decel:Number = .1;
    // Move Keys :
    var IsLeftKeydown:Boolean = false;
    var IsRightKeydown:Boolean = false;
    var IsAKeydown:Boolean = false;
    // Attack movie :
    var totalAttacks:Number = 3;
    var currentAttack:Number = 1;
    // create the keyListener Object : 
    var keyListener:Object = new Object();
    keyListener.onKeyUp = function()
    {
        //trace("UP -> Code: " + Key.getCode() + "\tASCII: " + Key.getAscii() + "\tKey: " + chr(Key.getAscii()));

        // detect when the 'A' key is released to increase current action :
        if (Key.getCode() == 65)
        {
            currentAttack++;
            if (currentAttack > totalAttacks)
            {
                currentAttack = 1;
            }
        }
    };
    Key.addListener(keyListener);
}
// --------------
onClipEvent (enterFrame) {

    IsLeftKeydown = Key.isDown(Key.LEFT);
    IsRightKeydown = Key.isDown(Key.RIGHT);
    IsAKeydown = Key.isDown(65);

    //attacking
    if (IsAKeydown)
    {
        gotoAndStop("attack");
        attack_mc.gotoAndStop(currentAttack);
    }
    else
    {
        //walking
        if (IsRightKeydown)
        {
            gotoAndStop("walk");
            _xscale = 100;
            _x += walkspd;
        }
        else if (IsLeftKeydown)
        {
            gotoAndStop("walk");
            _xscale = -100;
            _x -= walkspd;
        }
        //idle
        else
        {
            gotoAndStop("idle");
        }
    }
}

注意:我假设您的攻击影片的名称是“attack_mc”,请在前面的代码中更改它以满足您的需要。

希望对你有一点帮助。

于 2013-10-19T09:04:49.500 回答