famo.us scale和rescale,将比例数据从事件保存到事件

时间:2014-12-01 14:05:48

标签: famo.us

我遇到了一个简单的问题。我想在ImageSurface上实现ScaleSync。每当我结束缩放操作时,数据值将重置为1,如果我执行另一个缩放,则ImageSurfaces将从1开始转换。

define(function(require, exports, module) {
    var Engine = require('famous/core/Engine');
    var Modifier = require('famous/core/Modifier');
    var Transform = require('famous/core/Transform');
    var ImageSurface = require('famous/surfaces/ImageSurface');
    var Surface = require('famous/core/Surface');
    var ScaleSync = require("famous/inputs/ScaleSync");

    var mainContext = Engine.createContext();

    var start = 1;
    var update = 0;
    var end = 0;
    var growShrink = "";

    var objectScale = 1;

    var scaleSync = new ScaleSync();

    var logo = new ImageSurface({
        size: [200, 200],
        content: '/content/images/famous_logo.png',
        classes: ['backfaceVisibility']
    });

    var centerModifier = new Modifier({
        align: [0.5, 0.5],
        origin: [0.5, 0.5]
    });

    logo.pipe(scaleSync);

    scaleSync.on("update", function(data) {
        objectScale = data.scale
        centerModifier.setTransform(
            Transform.scale( objectScale, objectScale, 1)
        );
    });

    scaleSync.on("start", function(){
        start ++;
    });
    scaleSync.on("end", function() {
        end++;
    });

    mainContext.add(centerModifier).add(logo);
});

我尝试使用累加器来实现这一点,但我认为这是出于不同的目的。我想我必须以某种方式改变on.update回调中的数据,但不知道如何做到这一点。 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。希望这可以帮助任何有类似问题的人。修饰符应该有一个比例变量,引用如下:

    var scale = 1;

    var centerModifier = new Modifier({
        align: [0.5, 0.5],
        origin: [0.5, 0.5],
        transform: function(){
             return Transform.scale(scale, scale, 1);
        }
    });

在事件更新时更改变量的状态(我将data.delta除以10以规范化值):

scaleSync.on("update", function(data) {
    scale += data.delta / 10;
});