【问题标题】:Cocos2d js touch eventsCocos2d js 触摸事件
【发布时间】:2014-08-24 18:04:25
【问题描述】:

我正在用 cocos2d-js 构建一个应用程序,但在监听键盘事件时遇到了问题。我希望存在一个名为 setKeyboardEnabled 的方法,但是当我调用它时,我得到一个错误,即 setKeyboardEnabled 不是一个函数,我错过了什么吗?

var AnimationLayer = cc.Layer.extend({
ctor : function() {
    this._super();
    this.setKeyboardEnabled(true);
},


onKeyDown : function(key) {
   cc.log("action");
}
...
...
)}

当我尝试监听触摸事件时也会发生同样的事情。

【问题讨论】:

标签: javascript ios touch cocos2d-x cocos2d-js


【解决方案1】:

在 Cocos2D v3 中,处理事件的方式发生了变化。有关整个系统的正确解释,您应该阅读New event manager in Cocos2d-Html5 v3.0。

简而言之,如果你曾经有过:

var AnimationLayer = cc.Layer.extend({
    ctor : function() {
        this._super();
        this.setKeyboardEnabled(true);
    },

    onKeyDown : function(key) {
       cc.log("action");
    }
    ...
    ...
)}

你必须把它变成这样的东西:

var AnimationLayer = cc.Layer.extend({
    ctor : function() {
        this._super();

        cc.eventManager.addListener({
            event: cc.EventListener.KEYBOARD,
            onKeyDown : function(key) {
                cc.log("action");
            }
        }, this);
    },        

    ...
    ...
)}

这听起来有点复杂,但这种新机制允​​许您将这些事件侦听器附加到任何类型的cc 节点,而不仅仅是层。因此,例如,当鼠标在 Sprite 上方时,您可以执行以下操作以使 Sprite 淡出:

var hoverHandler = cc.EventListener.create({
    event: cc.EventListener.MOUSE,
    onMouseMove: function (event) {
      var target = event.getCurrentTarget();
      var locationInNode = target.convertToNodeSpace(event.getLocation());
      var s = target.getContentSize();
      var rect = cc.rect(0, 0, s.width, s.height);

      if (cc.rectContainsPoint(rect, locationInNode)) {
        cc.log("It's hovering! x = " + locationInNode.x + ", y = " + locationInNode.y);
        target.opacity = 180;
        return true;
      } else {
        target.opacity = 255;
        return false;
      }
  }
});

var MyLayer = cc.Layer.extend({
    init: function() {
        this._super();

        var mySpriteThatFadesWhenHovered = cc.Sprite.create(...);
        this.addChild(mySpriteThatFadesWhenHovered);

        cc.eventManager.addListener(hoverHandler.clone(), mySpriteThatFadesWhenHovered );
    }
)}

【讨论】:

  • 谢谢,这种处理用户事件的方式似乎提供了更多的灵活性。
  • 是的,请注意我什至没有费心去尝试编写如何在 v2.3 中编写悬停效果,做这么简单的事情实在是太费力了。 PS:如果满意,记得把我的帖子标记为答案,方便以后的搜索者轻松找到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多