【问题标题】:How to make character sprint AS3如何制作角色冲刺AS3
【发布时间】:2014-04-16 11:23:22
【问题描述】:

代码用于冲刺一个字符。如果用户在第一次点击后 x 刻度内按下右箭头,它将使对象移动得更快。

用户再次按下的时间有限。当时间用完时,它应该重置。

通过按下右箭头键,计时器开始计时,即使没有按下任何键,它也会继续计时(如果用户在此时间内再次按下,对象将移动得更快) - 到 0 时,如果没有按下,它应该将布尔变量重置为 false,但它没有这样做。

在onKeyUp函数中,下面的if应该为真

所以,点击一次然后离开:

function onKeyUp ... //no key being pressed
//leave it until timer reaches 0.
if (timer <= 0) {
TimerCounter = false;
condition1 = false;
condition2 = false;
timer = 5;

复制并粘贴下面的代码,运行它并查看跟踪。如果您点击一次向右箭头并释放,即使计时器变为 0,它也会显示

定时器:0; 条件一:真; 条件二:真;

什么时候不应该。

package 
{

(...)

public class Main extends Sprite 
{

var player:Sprite = new Sprite();
var keys:Array = [];
var sprint:Boolean = false;
var condition1:Boolean = false;
var condition2:Boolean = false;
var TimerCounter:Boolean = false;
var timer:int = 7;

public function Main():void 
{

player.graphics.beginFill(0x000000);
player.graphics.drawCircle(0, 0, 25);
player.graphics.endFill;

addChild(player);
player.x = 100;
player.y = 100;

player.addEventListener(Event.ENTER_FRAME, update);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
}

function getBack (e:Event) {
player.x = 100;
}

function update(e:Event) {
  trace("Timer: ",timer);
  trace("Condition 1: ", condition1);
  trace("Condition 2: ", condition2);
  if ((TimerCounter)&&(timer > 0)) {
    timer --;
    condition1 = true;
  }

if (keys[Keyboard.RIGHT]) {
  TimerCounter = true;

  if ((condition1)&&(condition2)) {
    sprint = true;
  }

  if (sprint) {
    player.x += 7;
  } else player.x += 1;
}

function onKeyDown(e:KeyboardEvent):void {
  keys[e.keyCode] = true;
}

function onKeyUp(e:KeyboardEvent):void {
keys[e.keyCode] = false;

if ((condition1)&&(timer>0)) {
  condition2 = true;                
}

if (sprint) {
  TimerCounter = false;
  condition1 = false;
  condition2 = false;
  sprint = false;
  timer = 7;
}

if (timer <= 0) {
  TimerCounter = false;
  condition1 = false;
  condition2 = false;
  timer = 7;
}
} //onKeyUp function end.
} // Class end.
} // package end.

【问题讨论】:

    标签: debugging keyboard key delay conditional-statements


    【解决方案1】:

    你的问题是onKeyUp 意味着没有按下键。这只会在释放密钥时触发一次,而不是像您的问题所暗示的那样不断触发。您需要签入不同的函数。

    function onKeyUp ... //key is released
    //leave it until timer reaches 0.
    if (timer <= 0) {
    TimerCounter = false;
    condition1 = false;
    condition2 = false;
    timer = 5;
    

    选项:

    • 您可以改为在update 函数中检查它,然后在onKeyUp/onKeyDown 中添加一个额外的布尔值以查看该键是否被实际按下(判断是否增加计时器)。李>
    • 您也可以只使用keys[e.keyCode] 事件来检查键/哪个键是否按下。这里的关键是您不能在onKeyUp 事件中保留计时器检查,因为每次按键向上/向下只会调用一次,不会在按键向上时调用。

    【讨论】:

    • 谢谢! - 这是其中的一部分,但是,我宁愿用毫秒来处理这种时间,因为我打算做的涉及很多组合键和时间,(“第二个键必须在第一个键后的 x 秒内按下“类型的东西)...我应该使用延迟的东西吗?
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2014-11-22
    • 2020-02-04
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多