我正在使用ActionScript 2在ADOBE FLASH CS6上制作我的第一个平台游戏。 当我按 W + ↓时,我的角色会做一个短划线攻击动画。
我的问题是
如果我不持有 W + ↓,则动画会剪切。如果我坚持下去,我的角色就会不断前进。
我想要的是,
当我按住 W + ↓时,我希望我的角色只破解一次并执行完整的动画。当动画完成时,如果我仍然保持正确的输入,我希望我的角色执行我之前描述的内容。
我设法正确地进行了双跳,但我想不出解决当前问题的方法。任何解决方案?
这是我演示的链接(有背景音乐):http://www.fastswf.com/tLr3bCA
输入:
以下是我的角色MovieClip中的ActionScript的一部分(不在帧时间轴上):
{
//GENJI COMMANDS
if (Key.isDown(Key.RIGHT) && !Key.isDown(81))
{
_x += speed;
this.gotoAndStop("genjirun");
this._xscale = 100;
}
else if (Key.isDown(Key.RIGHT) && Key.isDown(81))
{
_x += speed + 5;
this.gotoAndStop("genjirunfast");
this._xscale = 100;
}
else if (Key.isDown(Key.LEFT) && !Key.isDown(81))
{
_x -= speed;
this.gotoAndStop("genjirun");
this._xscale = -100;
}
else if (Key.isDown(Key.LEFT) && Key.isDown(81))
{
_x -= speed + 5;
this.gotoAndStop("genjirunfast");
this._xscale = -100;
}
else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && !Key.isDown(87))
{
this.gotoAndStop("genjicrouch");
}
else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && Key.isDown(87) && _xscale == 100)
{
this.gotoAndStop("genjislash");
_x += 5;
}
else if (Key.isDown(Key.DOWN) && touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && Key.isDown(87) && _xscale == -100)
{
this.gotoAndStop("genjislash");
_x += -5;
}
if (Key.isDown(Key.UP) && touchingGround)
{
grav = maxJump;
}
else if (!touchingGround && Key.isDown(32) && DJcancel == 0)
{
grav = -19;
DJcancel = 3;
}
else if (!touchingGround or !Doublejumping == 3)
{
this.gotoAndStop("genjijump");
}
else if (touchingGround && !Key.isDown(Key.RIGHT) && !Key.isDown(Key.LEFT) && !Key.isDown(Key.DOWN))
{
this.gotoAndStop(1);
DJcancel = 0;
}
if (touchingGround)
{
DJcancel = 0;
}
有什么建议吗?此外,这种方法是好还是我应该改变它?
答案 0 :(得分:0)
首先,我建议您切换到AS3,因为AS2已经过时了10年,这并非没有道理。它很慢,非常不直观,并且给你很多错误的想法。另外,AS3没有什么可以用AS3做的,但事实并非相反:AS3中有很多东西你不能用AS2做。
此外,我怀疑是否有任何人可以专业地帮助您使用AS2,因为它已过时10年并且仅由于向后兼容原因而受Adobe支持。
然后,您可以通过一些逻辑轻松解决您的问题。您需要finite-state machine模型。让我们定义两个状态变量:
EidResolver resolver = getEidResolverForGoogleOAuthToken(googleOAuthToken);
String beaconName = resolver.resolve(ephemeralId);
变量 dashKeys 应代表↓ + W 按下状态。我相信你会毫无问题地管理它。变量 dashState 应该采用3个不同的值(好吧,状态):“破折号”,同时播放破折号动画,“在之后”如果破折号动画是完成并且“ none ”如果它们都不是。它显然以“ none ”开头。
现在,逻辑。
var dashKeys:Boolean = false;
var dashState:String = "none";
现在只剩下两件事。
答案 1 :(得分:0)
使用AS2,为您的MovieClip定义.onKeyDown
,如下所示:
yourMC.onKeyDown = function(e) {
// Now test e
};
按下该键时,它只会处理一次,但如果按住该键,则不会重复处理。