2012-02-03 82 views
2

好吧,我在我的智慧结束,我不能让CraftyJS做一个补间。如何在CraftyJS中进行补间?

所以我想要做的是,每次蘑菇被击中,我想检查,如果蘑菇有组件“答案”。如果存在,我什么都不会做。否则,我想展示一个消失的大红色盒子。

Crafty.c("Mushroom", { 
     init: function() { 
      this.addComponent("collision"); 
      this.collision(); 
      this.onhit("bullet",function(e) { 
       this.destroy(); 
       e[0].obj.destroy(); 
       if(!this.has("Answer")) { 
        Crafty.e("2D, Tween, color, canvas") 
        .attr({alpha: 1.0, x: 170, y: 100, w:300, h:100}) 
        .color("red") 
        .bind("enterframe", function() { //How do i actually get the box to fade? 
         this.tween({alpha: 0.5, x: 170, y: 100}, 30); 
        }); 
       } 
      }); 
     } 

回答

5

您的tween代码执行绑定到EnterFrame事件,这将导致吐温开始每一帧。相反,你要简单地调用所创建的实体补间功能,像这样

Crafty.e("2D, Tween, color, canvas") 
       .attr({alpha: 1.0, x: 170, y: 100, w:300, h:100}) 
       .color("red") 
       .tween({alpha: 0.5, x: 170, y: 100}, 600); 

而且吐温功能将管理自己的EnterFrame在接下来的600毫秒(30帧),之后它会火的TweenEnd事件。

(在Crafty的旧版本中,您指定了帧的持续时间而不是ms。)

+1

从Crafty 0.6.1开始,它不是帧,而是毫秒。 – ashes999 2014-01-12 04:03:32

+0

这对于某些游戏来说确实非常棒,但是仍然可以选择使用框架吗? – 2014-01-13 20:55:33

+0

我相信毫秒会使它更加健壮。如果您的应用运行在速度更快/速度更慢的机器上,那么在按秒计时时比按帧计时动画显得更加一致。 (这对CraftyJS来说也不是唯一的。) – ashes999 2014-01-13 21:43:56

1

这更像是一元的答案:-)

首先,我建议您升级到最新版本,因为它有很多的bug修正。为了让你的代码在新版本下运行,你必须做的一些改变是将所有的组件和事件改为Pascal大小写。那是enterframe => EnterFrame,canvas =>帆布等

其次,我认为你应该把这些问题带到Crafty论坛以获得正确的观众。我发现这个问题的唯一方法是通过谷歌提醒。

获得帮助的最佳方式是使用此模板http://jsfiddle.net/mCdUX/62/创建一个jsfiddle,并带有一个运行示例,演示您无法工作的部分。

哦,欢迎社会各界狡猾:-)

+1

-1:实际上不回答用户的问题。我也不完全适合在这个网站上将用户从SO上移开。 – millimoose 2012-02-04 22:30:24

+0

1)如果SO背后的愿景是改善网络,并且我确定网络上还有另一个地方,人们更可能得到一个特定问题的良好答案(而其他人更可能受益从这个答案)我认为这是符合SO的愿景,让人们知道。 2)升级Crafty在这种情况下是正确的答案。 3)抱歉:-) – sorenbs 2012-02-29 12:30:58

+0

考虑到OP的问题并没有说清楚问题实际是什么,而且事实上你在回答中要求澄清,而且问题或答案都没有被编辑来告诉其余的这个故事,我只听到你的说法,说问题是通过升级修复的问题。虽然我没有理由不相信你,但它不会让任何在Google中发现它的人对这个问题和回答没有任何用处。 – millimoose 2012-02-29 19:02:43