1

我正在使用新的 createjs,他们已经删除了翻转和 addflipframes。显然 scaleX=-1 应该更快,但现在当我想左右移动我的角色时,我得到了一个奇怪的延迟。我只是希望我的运动功能编码错误,或者只是 mousetrap.js 对 create.js 不友好

http://jsfiddle.net/w5uZF/8/这是带有测试游戏的jsFiddle。我只是在学习如何使用新系统。

这些是我的捕鼠器绑定:

Mousetrap.bind('a', function(){moveLeft();}, 'keydown');
Mousetrap.bind('d', function(){moveRight();}, 'keydown');

这些是我的运动功能:

function moveRight(){
    var speed = 20;
    sayaka.x += speed;
    sayaka.scaleX= 1;
}

function moveLeft(){
    var speed = 20;
    sayaka.x -= speed;
    sayaka.scaleX= -1;
}

我想如果我展示我是如何制作我的精灵的,它有 8 帧,那会很好。

var dataSayaka = {
    images: ["http://i.imgur.com/rxDkp2Q.png"],
    frames: {width:133, height:139, regX: 50, regY:50},
    animations: {runRight:[0,1,2,3,4,5,6,7, "runRight"]}
};

var spriteSheetSayaka = new createjs.SpriteSheet(dataSayaka);
var animationSayaka   = new createjs.Sprite(spriteSheetSayaka, "runRight");
sayaka = new createjs.Sprite(spriteSheetSayaka, animationSayaka);

我愿意接受任何建议和批评,因为我很想知道如何提高运动表现。

我尝试使用原生 Javascript 键事件来移动我的角色,但效果是一样的。当我左右移动时,角色的滞后情况很奇怪。

4

1 回答 1

2

如果您指的是scaleX=-1/1与 x-movement 之间的延迟:这与 CreateJS(或任何其他 JS 框架)无关,这是浏览器调度 keydown 事件的方式。

例如,尝试在文本输入中按下一个键,您会注意到起初您按下的字符会立即出现,但只有在几毫秒的延迟后,按下的键才会导致出现其他字符。这是为了防止系统在用户只打算输入一个字符时意外多次输入一个字符。


解决方案:要解决这个问题,只需在某个键为时设置一个标志,keydown然后取消设置标志keyup。例如,您可以使用全局对象pressedKeys,并且无论何时a按下您设置pressedKeys.a = true;onkeyUp -> pressedKeys.a = false;然后在您handleTick检查是否ad设置为true,如果是,则调用相应的方法moveRight/moveLeft

于 2014-03-29T21:34:16.070 回答