2014-02-25 146 views
0

我目前正在Flash中制作一个格斗游戏的小版本,但我不希望角色通过按住一个键持续点击等等,而是要按下该键每次。这是我目前有:带按钮的单击动作点击

function moveChar(event:Event):void{ 
if(rightKeyDown && !hitting && !combo){ 
    hitting = true; 
    gotoAndPlay("basic_punch"); 
    kickbag.gotoAndPlay("hit1"); 
    countHits++; 
} 
if(downKeyDown && !hitting && !combo){ 
    hitting = true; 
    gotoAndPlay("basic_kick"); 
    kickbag.gotoAndPlay("hit1"); 
    countHits++; 
} 
if(downKeyDown && combo){ 
    gotoAndPlay("kick_combo1"); 
    kickbag.gotoAndPlay("hit2"); 
    kickbag.stop(); 
} 
if(rightKeyDown && combo){ 
    gotoAndPlay("punch_combo"); 
    kickbag.gotoAndPlay("hit2"); 
    kickbag.stop(); 
} 
} 

function checkKeysDown(event:KeyboardEvent):void{ 
    if(countHits == 2) bar.gotoAndStop("bar2"); 
    if(countHits == 6) bar.gotoAndStop("bar3"); 
    if(countHits == 10) { 
     bar.gotoAndStop("bar4"); 
     combo = true; 
     gotoAndPlay("combo_stand"); 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
    } 
} 

function checkKeysUp(event:KeyboardEvent):void{ 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = false; 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = false; 
    } 
} 

但正如我所解释的,这允许按钮被按下。

回答

0

我认为@Ribs是在正确的轨道上,但给你目前的代码答案看起来很简单。

删除Event.ENTER_FRAMEmoveChar()并更改函数定义行,所以它看起来是这样的:

function moveChar():void //e:Event removed from parameters 

然后checkKeysDown函数,调用moveChar()为按下的键(您moveChar()评估无论如何布尔):

if(event.keyCode == 39 || event.keyCode == 68){ 
    rightKeyDown = true; 
    moveChar(); 
} 
else if(event.keyCode == 40 || event.keyCode == 83){ 
    downKeyDown = true; 
    moveChar(); 
} 

Now你可以改变,如果上述声明使它多一点具体的:

if (!downKeyDown && !rightKeyDown) { 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
     moveChar(); 
    } 
    else if(!downKeyDown && !rightKeyDown && (event.keyCode == 40 || event.keyCode == 83)){ 
     downKeyDown = true; 
     moveChar(); 
    } 
} 

这基本上是处理向下或向右按下键一次一个,和而那些正在运行无视一切。它也可以假设你可能不希望同时向下压,右按键做任何事情,因此你可以这样做:

function checkKeysDown(event:KeyboardEvent):void{ 
    if (downKeyDown || rightKeyDown) return; //do nothing, we are pressing a key 
    if(countHits == 2) bar.gotoAndStop("bar2"); 
    if(countHits == 6) bar.gotoAndStop("bar3");*/ 
    if(countHits == 10) { 
     bar.gotoAndStop("bar4"); 
     combo = true; 
     gotoAndPlay("combo_stand"); 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
     moveChar(); 
    } 
    else if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
     moveChar(); 
    } 
} 

这将返回在checkKeyDown功能,如果我们目前正在按向下或右键。我假设这可能是你想要的效果,所以你的计数器不会增加每个KEY_DOWN注册。正如你可以看到你有一些选择,并有多种方式来做到这一点。希望这提供了一些指导。

1

创建onKeyDown和onKeyUp监听器。在onKeyDown监听器中,关闭onKeyDown监听器,执行操作并初始化onKeyUpListener。在onKeyUp侦听器中,杀掉onKeyUp侦听器并重新初始化onKeyDown侦听器。

0

我也一直在玩平台游戏的Flash游戏,下面是我如何完成一个干净的攻击代码:声明一个“攻击”布尔值来帮助决定角色是否可以攻击。您可以通过创建一个输入框架事件侦听器来防止角色持续攻击,该侦听器可以检查角色在攻击过程中所处的角色。如果角色播放头在动画的最后一帧,而不是简单地将攻击布尔值设置为假。