【发布时间】: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