我按照这个例子

http://famo.us/university/famous-102/input/5/

它没有示例提到多点触控


  Famo.us还支持多点触控手势,例如旋转,
  捏和缩放。要熟悉这些内容,请访问
  [链接到Examples.GIT]


有什么简单的例子可以通过数组或类似的东西进行触摸?我认为这与TouchTracker https://famo.us/docs/0.2.0/inputs/TouchTracker有关?

最佳答案

这花了我一段时间。

首先是一个错误。

在第84行的TouchSync.js中:

payload.touch = data.identifier;


应该..

payload.touch = data.touch.identifier;


接下来,如果要跟踪所有事件,则可以通过TouchSyncs的每个开始,更新和结束事件来手动进行。 TouchSync仅使用TouchTracker来管理多点触摸,但这是您无需自己使用的类。

这是我跟踪多个触摸输入的示例。注意,我需要在数据对象进入事件处理程序时对其进行克隆,以保持对其的正确引用。还花了一段时间才能弄清楚。希望这对您有所帮助!

var Engine    = require("famous/core/Engine");
var TouchSync = require("famous/inputs/TouchSync");
var Surface   = require("famous/core/Surface");

var mainContext = Engine.createContext();

var touches = {};

var touchSync = new TouchSync(function() { return position; });

Engine.pipe(touchSync);

var contentTemplate = function() {

    var string = "Touches:<br/>";

    for (var key in touches ) {
      var touch = touches[key];
      var x     = touch.clientX ? touch.clientX : "" ;
      var y     = touch.clientY ? touch.clientY : "" ;
      string += "key: "+key+", x: "+ x+", y: "+ y +"<br/>";
    }

    return string;
};

var surface = new Surface({
    size: [undefined, undefined],
    classes: ['grey-bg'],
    content: contentTemplate(),
    properties: {
      padding:'10px'
    }
});

var clone = function(obj){
  var newObj = {};
  for ( var key in obj ) { newObj[key] = obj[key]; }
  return newObj;
}

touchSync.on("start", function(data) {
    touches[data.touch] = clone(data);
    surface.setContent(contentTemplate());
});

touchSync.on("update", function(data) {
    touches[data.touch] = clone(data);
    surface.setContent(contentTemplate());
});

touchSync.on("end", function(data) {
    delete touches[data.touch];
    surface.setContent(contentTemplate());
});

mainContext.add(surface);

10-02 01:40