2402/094
AS3-MC的移动控制
大部分的游戏,都离不开MC的移动,下边是一个AS3的MC移动Demo:
代码部分:
//存储四个方向键是否按下的变量
var leftArrow:Boolean = false;
var rightArrow:Boolean = false;
var upArrow:Boolean = false;
var downArrow:Boolean = false;
stage.addEventListener (KeyboardEvent.KEY_DOWN, keyPressedDown);
stage.addEventListener (KeyboardEvent.KEY_UP, keyPressedUp);
stage.addEventListener (Event.ENTER_FRAME, mcMove);
stage.addEventListener (Event.DEACTIVATE, missingStage);//Flash处于非活动状态时调用
//按键时的检测,左上右下分别是37,38,39,40
function keyPressedDown (_evt:KeyboardEvent) {
if (_evt.keyCode == 37) {
leftArrow = true;
} else if (_evt.keyCode == 39) {
rightArrow = true;
} else if (_evt.keyCode == 38) {
upArrow = true;
} else if (_evt.keyCode == 40) {
downArrow = true;
}
}
//松开按键时
function keyPressedUp (_evt:KeyboardEvent) {
if (_evt.keyCode == 37) {
leftArrow = false;
} else if (_evt.keyCode == 39) {
rightArrow = false;
} else if (_evt.keyCode == 38) {
upArrow = false;
} else if (_evt.keyCode == 40) {
downArrow = false;
}
}
//MC的移动部分
function mcMove (_evt:Event) {
//移动的速度
var speed:Number = 8;
if (leftArrow) {
//MC的位置检测,下边相同
if (0<=mc.x) {
mc.x -= speed;
}
}
if (rightArrow) {
if(mc.x<=stageW-mc.width-20){
mc.x += speed;
}
}
if (upArrow) {
if(0<=mc.y){
mc.y -= speed;
}
}
if (downArrow) {
if(mc.y<=stageH-mc.height-20){
mc.y += speed;
}
}
}
//Flash处于非激活状态时
function missingStage (_evt:Event) {
leftArrow = false;
rightArrow = false;
upArrow = false;
downArrow = false;
}
May 13th, 2009 - 16:55
[Reply]
November 20th, 2009 - 23:24
ENTER_FRAME
Event.DEACTIVATE
浪费资源方法.建议换个方法实现.只用
KeyboardEvent.KEY_DOWN
KeyboardEvent.KEY_UP
[Reply]
DFdou Reply:
2009-11-21 at 3:39 pm
@, 恩,是个不错的做法,,ENTER_FRAME的确耗资源。。
[Reply]
November 7th, 2010 - 11:19
KeyboardEvent.KEY_DOWN
会造成按键延迟 mc会先动一下 根据windows自身的按键设置 再进行连续移动
ENTER_FRAME
虽然耗资源但不会延迟 不知道还有没有更好的解决办法
[Reply]