EaselJS 键盘收录问题

Posted

技术标签:

【中文标题】EaselJS 键盘收录问题【英文标题】:EaselJS Keyboard Ticker Problems 【发布时间】:2014-07-06 04:39:32 【问题描述】:

我是第一次尝试使用 EaselJS,我正在尝试进行正常的方形移动。我使用 Ticker 创建了一个从屏幕左侧到右侧的正方形动画。它看起来很不稳定,所以我提高了该股票的 FPS(通过Ticker.setFPS(60))。

我的下一步是添加键盘事件以允许方块移动。我已经成功地做到了,但同样的波涛汹涌又回来了。我尝试将 Ticker 的 FPS 设置为更高的速率,但这根本无法解决我的问题。这是我的代码:

var c = document.getElementById("c");
var stage = new createjs.Stage("c");
var square = new createjs.Shape();

function init()    
    square.graphics.beginFill("#3A5FCD").drawRect(0, 0, 75, 75);
    square.x = 50;
    square.y = 50;

    stage.addChild(square);
    stage.update();

    //Update stage will render next frame
    createjs.Ticker.addEventListener("tick", stage);
    createjs.Ticker.addEventListener("tick", move);
    createjs.Ticker.setFPS(60);

    this.document.onkeydown = move;


function move(event) 
    switch(event.keyCode) 
        case 37:
            square.x -= 10;
            break;
        case 39:
            square.x += 10;
            break;
        case 38:
            square.y -= 10;
            break;
        case 40:
            square.y += 10;
            break;
    

所以,总结一下我的问题,如何在不附加到 Ticker 的情况下增加 FPS,或者更好的是,如何将键盘事件附加到 Ticker?

提前致谢。

【问题讨论】:

如果您正在处理按键输入的移动,则不需要自动收报机。 那我该怎么做才能在没有ticker的情况下增加FPS呢? 没关系。 FPS 只是自动收报机的帧速率。您是在按键输入上调用 move 方法,而不是在刻度上。 那么如何调用 Ticker 上的 Display Object 的 move 方法呢? 据我所知,您甚至没有在代码中调用 handleTick。什么是显示对象?你似乎没有定义它。 【参考方案1】:

由于您直接在 onkeydown 处理程序中修改形状位置,因此“断断续续”可能只是正常的键盘事件行为 - 我认为每秒字符速率取决于操作系统,通常在 30 Hz 上最快的设置。

您可能应该将输入处理与移动逻辑分离:在键盘事件处理程序中,只需注册当前按下的键,并相应地在周期性“tick”函数中操作对象。类似这样的事情:

var stage;
var square;
var keys = ;

function init() 
    stage = new createjs.Stage("c");
    square = new createjs.Shape();
    square.graphics.beginFill("#3A5FCD").drawRect(0, 0, 75, 75);
    square.x = 50;
    square.y = 50;
    stage.addChild(square);

    createjs.Ticker.addEventListener("tick", tick);
    createjs.Ticker.setFPS(60);

    this.document.onkeydown = keydown;
    this.document.onkeyup = keyup;


function keydown(event) 
    keys[event.keyCode] = true;


function keyup(event) 
    delete keys[event.keyCode];


function tick() 
    if (keys[37]) square.x -= 10;
    if (keys[38]) square.y -= 10;
    if (keys[39]) square.x += 10;
    if (keys[40]) square.y += 10;
    stage.update();

【讨论】:

谢谢。我几天前解决了,但无论如何我都会接受。 :)

以上是关于EaselJS 键盘收录问题的主要内容,如果未能解决你的问题,请参考以下文章

画布高度由 EaselJS 更改。如何避免这种情况?

Easeljs 使用 mousemove 旋转对象

在 EaselJS 中为 spritesheet 设置动画时遇到问题

EaselJS 拖放:获取抓取位置

easelJS 初始入门

Easeljs 可滚动容器