在按键进行移动一个固定步长时,也可以在这个步长内,让移动的主体平滑的移动,这里的解决方案就是,开始移动时先去除掉键盘侦听,之后使用移动公式进行移动,移动结束后,恢复键盘侦听,接受下一次的键盘控制。
代码如下:
//基准步长, 单位: 30像素
var stepLength = 30;
//
//建立一个表示方向的全局变量
var dir:String;
//
//建立键盘侦听,接收键盘消息
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.getCode() == Key.UP) {
dir = "Up";
} else if (Key.getCode() == Key.RIGHT) {
dir = "Right";
} else if (Key.getCode() == Key.DOWN) {
dir = "Down";
} else if (Key.getCode() == Key.LEFT) {
dir = "Left";
}
moveBox();
};
Key.addListener(keyListener);
//
//根据键盘消息进行单个箱子的位置移动
function moveBox() {
Key.removeListener(keyListener);
var temp = stepLength;
var short = 3; //平滑移动的最小单位,
switch (dir) {
case "Up" :
onEnterFrame = function () {
if (temp - short > 0) {
box_mc._y -= short;
temp -= short;
} else {
box_mc._y -= temp;
Key.addListener(keyListener);
delete this.onEnterFrame;
}
};
break;
case "Right" :
onEnterFrame = function () {
if (temp - short > 0) {
box_mc._x += short;
temp -= short;
} else {
box_mc._x += temp;
Key.addListener(keyListener);
delete this.onEnterFrame;
}
};
break;
case "Down" :
onEnterFrame = function () {
if (temp - short > 0) {
box_mc._y += short;
temp -= short;
} else {
box_mc._y += temp;
Key.addListener(keyListener);
delete this.onEnterFrame;
}
};
break;
case "Left" :
onEnterFrame = function () {
if (temp - short > 0) {
box_mc._x -= short;
temp -= short;
} else {
box_mc._x -= temp;
Key.addListener(keyListener);
delete this.onEnterFrame;
}
};
break;
default :
trace("something wrong here!");
}
}
相关文章:
鼠标点击配对模式游戏:
挑战记忆力游戏
配对游戏的流程分析
连连看 效果测试 源码下载
《推箱子》系列教程:
原创教程《推箱子游戏的分析》
《推箱子游戏的分析》续
推箱子游戏关卡数据的可视化设计
电击方块游戏的分析
围墙块连接效果的编码处理
按键平滑移动的代码方案。