Actionscript 3 在AS3中移动角色时遇到问题
所以我对ActionScript3有点陌生,如果我错过了解决问题的关键,请告诉我,我会发布它,但无论如何 所以我有两层。顶层是内容,底层是as3(用于actionscript)。在我的内容中,我有一个大约在舞台中央的蓝色小球。在我的as3层中,我有以下代码:Actionscript 3 在AS3中移动角色时遇到问题,actionscript-3,Actionscript 3,所以我对ActionScript3有点陌生,如果我错过了解决问题的关键,请告诉我,我会发布它,但无论如何 所以我有两层。顶层是内容,底层是as3(用于actionscript)。在我的内容中,我有一个大约在舞台中央的蓝色小球。在我的as3层中,我有以下代码: //Add the event listeners... stage.addEventListener(Event.ENTER_FRAME, moveBall); stage.addEventListener(KeyboardEvent.K
//Add the event listeners...
stage.addEventListener(Event.ENTER_FRAME, moveBall);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keypress);
stage.addEventListener(KeyboardEvent.KEY_UP, keyrelease);
//Movement variables...
var velY;
var velX;
var power = 5;
var friction = 0.95;
//Key variables...
var right;
var left;
var up;
var down;
function keyrelease(event:KeyboardEvent) {
right = false;
left = false;
down = false;
up = false;
}
function keypress(event:KeyboardEvent) {
if (event.keyCode == 39) {
right = true;
}
if (event.keyCode == 37) {
left = true;
}
if (event.keyCode == 38) {
up = true;
}
if (event.keyCode == 40) {
down = true;
}
}
function moveBall(event:Event) {
if (right == true) {
velX += power;
}
if (left == true) {
velX -= power;
}
if (up == true) {
velY += power;
}
if (down == true) {
velY -= power;
}
character.x += velX;
character.y += velY;
velY *= friction;
velX *= friction;
}
基本上,我所做的是检查是否按下了一个键,如果是这样,我使velY或velX的功率相等,这将以某种方式增加小蓝球,并且velY和velX将继续减小,直到(由于舍入误差)它变为零,蓝球停止。但是,按键没有任何作用,出于某种原因,我的蓝色小圆圈位于屏幕的左上角。这是因为您没有初始化速度变量。这些是非类型化的,因此它们的初始值是
未定义的
在这些行中,它们会自动升级为Number
character.x += velX;
character.y += velY;
将未定义
强制为数字
时,它将变为NaN
(不是数字)。因此,得到的坐标是NaN
。FlashPlayer对此的响应是将DisplayObject
设置为0
另外,我建议使用flash.geom.Point
(很好地操纵坐标)、flash.ui.Keyboard
(可读性更好)和flash.utils.Dictionary
(而不是使用许多标志和ifs,构建查找图)
由于未定义velY和velX,因此当您尝试从中添加或减去时,会产生意外的结果。首先使用 废话
//Add the event listeners...
stage.addEventListener(Event.ENTER_FRAME, moveBall);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keypress);
stage.addEventListener(KeyboardEvent.KEY_UP, keyrelease);
//Movement variables...
const power:Number = 5;
const friction:Number = 0.95;
var velocity:Point = new Point();
var map:Dictionary = new Dictionary();
map[Keyboard.LEFT] = new Point(-power, 0);
map[Keyboard.UP] = new Point(0, -power);
map[Keyboard.RIGHT] = new Point(power, 0);
map[Keyboard.DOWN] = new Point(0, -power);
var acceleration:Dictionary = new Dictionary();
function keyrelease(event:KeyboardEvent):void {
delete acceleration[map[event.keyCode]];
}
function keypress(event:KeyboardEvent):void {
var p:Point = map[event.keyCode];
if (p) acceleration[p] = p;
}
function moveBall(event:Event):void {
for each (var p:Point in acceleration) velocity = velocity.add(p);
character.x += velocity.x;
character.y += velosity.y;
velocity.normalize(velocity.length * friction);
}