很想知道为什么带有捕鼠器的Createjs变慢了。 (提供jsfiddle)

时间:2014-03-28 17:23:53

标签: canvas javascript-events easeljs createjs mousetrap

所以我正在使用新的createjs,他们已经删除了flip和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密钥事件来移动我的角色,但效果是一样的。当我向左和向右移动时,角色落后是多么奇怪。

1 个答案:

答案 0 :(得分:2)

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

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


解决方案:要解决此问题,只需在某个密钥为keydown时设置一个标记,并在keyup上取消设置该标记。例如,您可以使用全局对象pressedKeys,每当按下a时,您设置pressedKeys.a = true;onkeyUp -> pressedKeys.a = false;,然后在handleTick中检查是否a }或d设置为true,如果是,则调用相应的方法moveRight/moveLeft