我正在制作Flash游戏。以下是具有不同动画的3种不同攻击(键盘绑定z,x,c)。
问题#1
例如,如果我使用attack1(通过单击“z”)它显示约100帧的动画,但如果在动画期间我单击attack2(x)它取消attack1动画并开始播放attack2动画。我需要在动画期间制作它不能通过使用其他动画来中断。
问题#2
如果我使用attack1(通过点击“z”)并按住“z”动画冻结,直到我释放“z”按钮。我需要做的是如果我点击任何攻击按钮一旦开始播放动画,它就不能通过点击相同的按钮来中断/暂停。
在最后一帧中的每个攻击MovieClip中,我添加了代码MovieClip(this.parent).gotoAndStop("stay");
,在攻击动画播放后它开始播放“停留”动画(此部分工作)。
key_down功能:
private function key_down(event:KeyboardEvent)
{
if (event.keyCode == 90)
{
attack1 = true;
}
if (event.keyCode == 88)
{
attack2 = true;
}
if (event.keyCode == 67)
{
attack3 = true;
}
}
key_up函数:
private function key_up(event:KeyboardEvent)
{
if (event.keyCode == 90)
{
attack1 = false;
}
if (event.keyCode == 88)
{
attack2 = false;
}
if (event.keyCode == 67)
{
attack3 = false;
}
}
startAttack()函数
private function startAttack() {
if (attack1)
{
Hero.gotoAndStop("attack1");
}
if (attack2)
{
Hero.gotoAndStop("attack2");
}
if (attack3)
{
Hero.gotoAndStop("attack3");
}
}
答案 0 :(得分:1)
在你的代码中,Hero可以同时以3种方式攻击,但据我所知,你不需要它。那么你为什么要制作三个独立的变量呢? 制作一个并将其命名为“攻击”。它的值将是攻击类型的数量。 您还可以创建一个将攻击号码映射到键码的数组:
var codes:Array = new Array(0, 90, 88, 67);
var attack:Number = 0;
并在key_up和key_down函数中使用它。现在,您可以添加新的攻击,而无需在函数中创建额外的ifs。
KEY_DOWN:
if(attack > 0) return; // don't interrupt other attack
for(var c in codes) {
if(codes[c] == event.keyCode) {
attack = c;
Hero.gotoAndStop("attack" + attack);
}
}
KEY_UP:
for(var c in codes) {
if(codes[c] == event.keyCode) {
if(c == attack) attack = 0;
}
}
startAttack()是多余的。
答案 1 :(得分:0)
在startAttack中,您可以检查是否有一些攻击在起作用。您可以使用状态或检查帧来确定新的攻击是否可以开始。
答案 2 :(得分:0)
不受打扰的最佳方法是在攻击发生时使用标识符。在这种情况下,最好有一个布尔inAttackMode(或任何东西)来测试并查看它是否是。这是基于你的例子
private function key_down(event:KeyboardEvent)
{
if (event.keyCode == 90)
{
attack1 = true;
inAttackMode = true;
}
if (event.keyCode == 88)
{
attack2 = true;
inAttackMode = true;
}
if (event.keyCode == 67)
{
attack3 = true;
inAttackMode = true;
}
}
private function startAttack() {
if(!inAttackMode){
if (attack1)
{
Hero.gotoAndStop("attack1");
}
if (attack2)
{
Hero.gotoAndStop("attack2");
}
if (attack3)
{
Hero.gotoAndStop("attack3");
}}
}
然后把你的
MovieClip(this.parent).gotoAndStop("stay");
inAttackMode = false;
或更好的是为每次攻击分配标识符,如inAttackMode1为真,则其他攻击无法播放。