【问题标题】:Tweening Functions in CreateJSCreateJS 中的补间函数
【发布时间】:2017-08-17 15:16:41
【问题描述】:

我正在开发一个 createjs 游戏,其中图像保存在容器内。我想将图像补间到屏幕上的某个位置并将图像切换到另一个图像。几秒钟后,我想从画布/屏幕中删除新图像。

目前,我正在将 (evt) 传递给函数,但其​​他游戏/示例都不会打扰这部分?

它在第一个 .call 函数中有效,但我在 .wait 和第二个 .call 之后注释掉的部分不起作用。突然,TheThingBeingTweened 变成了undefined

任何正确方向的提示都会有所帮助。

createjs.Tween
        .get(inkContainer, {onChange: onInkContainerTweenChange})
        .to({
                 y: playerContainer.y + (Math.random() * 200 - 100),
                 x: playerContainer.x + (Math.random() * 200)
            }, 8000)
        .call(function (evt) {
    var theThingBeingTweened = evt.target;

    //self.stage.removeChild(theThingBeingTweened);

    var theContainer = theThingBeingTweened.parent;
    theContainer.removeChild(theThingBeingTweened);

    splatContainer = new createjs.Container();
    splat = new 
    createjs.Bitmap(queue.getResult("splat"));
    splatContainer.addChild(splat);
    splatContainer.x = theThingBeingTweened.x;
    splatContainer.y = theThingBeingTweened.y;
    theContainer.addChild(splatContainer);
});

//.wait(3000)
//.call(function (evt) {
//    var theThingBeingTweened = evt.target;
//    self.stage.removeChild(theThingBeingTweened);
//});

【问题讨论】:

    标签: javascript createjs tween


    【解决方案1】:

    您还可以通过覆盖或添加属性来扩展您的对象

    例如:

    // It coud be instance or singleton it can knows everything to handle your issue
    var imageHandler = new ImageHandlerClass();
    
    Object.defineProperty(inkContainer, "imageHandler", { value:imageHandler , configurable: true, writable: true, enumerable: true });
    
    createjs.Tween
            .get(inkContainer)
            .to({
                     y: playerContainer.y + (Math.random() * 200 - 100),
                     x: playerContainer.x + (Math.random() * 200)
                }, 8000)
            .call(function (evt) {
                 var linkToImageHandler = evt.target.imageHandler;
                // Do something with image using imageHandler defined erlier
                //...
    
            });
    

    当你有一个事件控制器来处理许多重复的情况时,它非常有用。

    【讨论】:

      【解决方案2】:

      虽然 theThingBeingTweenedundefined 的确切原因尚不清楚,但您可以通过在调用链范围之外声明 theThingBeingTweened 轻松绕过此限制,然后不要使用undefined 第二次调用中的值。

      var theThingBeingTweened;
      
      createjs.Tween
              .get(inkContainer, {onChange: onInkContainerTweenChange})
              .to({
                       y: playerContainer.y + (Math.random() * 200 - 100),
                       x: playerContainer.x + (Math.random() * 200)
                  }, 8000)
              .call(function (evt) {
          theThingBeingTweened = evt.target;
      
          //self.stage.removeChild(theThingBeingTweened);
      
          var theContainer = theThingBeingTweened.parent;
          theContainer.removeChild(theThingBeingTweened);
      
          splatContainer = new createjs.Container();
          splat = new 
          createjs.Bitmap(queue.getResult("splat"));
          splatContainer.addChild(splat);
          splatContainer.x = theThingBeingTweened.x;
          splatContainer.y = theThingBeingTweened.y;
          theContainer.addChild(splatContainer);
      }).wait(3000).call(function (evt) {
          self.stage.removeChild(theThingBeingTweened);
      });
      

      【讨论】:

        【解决方案3】:

        call 方法不会导致调度事件。没有event 参数,所以没有event.target

        相反,您可以将参数传递给调用方法(第二个参数)。

        createjs.Tween
            .get(inkContainer, {onChange: onInkContainerTweenChange})
            .to({
                     y: playerContainer.y + (Math.random() * 200 - 100),
                     x: playerContainer.x + (Math.random() * 200)
                }, 8000)
            .call(function (thing) {
                // The thing being tweened is the first argument
            }, [inkContainer, otherArg], optionalScope);
        

        请注意,如果它一个事件,那么目标将是补间实例,而不是补间对象的目标。当您将addEventListeneron 用于Tweens 支持的事件(这只是“更改”)时就是这种情况。 http://www.createjs.com/docs/tweenjs/classes/Tween.html#event_change

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-19
          • 2016-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多