【问题标题】:Collision detection on a tweened object补间对象上的碰撞检测
【发布时间】:2014-03-09 03:40:35
【问题描述】:

我无法让它工作,似乎补间对象不会触发“已移动”事件?

我在屏幕上补间一个对象,需要检查它是否与播放器发生碰撞(通过键盘事件上下飞行)。如果我为播放器附加“已移动”的检查,它会起作用,但是如果播放器静止不动怎么办:-)

所以我需要检查补间对象何时移动(如果它击中玩家)

不触发任何事件:

        // astroid
        Crafty.e('astroid, 2D, DOM, Color, Tween, Collision')
            .attr({ x: 600, y: 550, w: 50, h: 200 })
            .color('#8e44ad')
            .tween({ x: -50 }, 4000)
            .bind('Moved', function () {

                console.log('moved');

                if (this.hit('player1')) {
                    console.log('player hit 1');
                }
            })
            .onHit('player', function () {
                console.log('player hit 2');
            });

【问题讨论】:

标签: javascript craftyjs


【解决方案1】:

更新:

我这里用的是小plugincollisions($div1, $div2)

所以,

 function interval() {

   timeout = setTimeout(function () {

        if (collisions($('.player1'), $('.astroid'))) {
           alert('true');

        }
        else{
            interval();
        }
    }, 25);

 }

 interval()

WORKING DEMO

希望对您有所帮助...

【讨论】:

  • 非常有帮助的 Ashish!谢谢!
  • 不过,这与 Crafty 的内置碰撞功能不兼容!如果你从 DOM 切换到 Canvas,我认为它也会失败。
  • 我给出了解决方案,根据上述条件,我没有在画布上测试它,可能是它在画布上失败,但它适用于 HTML 元素! @starwed
  • 当然,但是 OP 已经在使用提供此功能的game framework;他们没有理由引入不兼容的其他依赖项。 :)
  • @starwed,你说得对,但无论我知道如何完成上述任务,我只是在这里分享!,真的我对这个补间/狡猾的插件一无所知! :) 无论如何,如果你想编辑并有更好的答案,那么欢迎 :)
【解决方案2】:

“Moved”是“Multiway”等组件使用的特殊事件。

更基本的事件只是“移动”,它由2D component 直接实现——而是绑定到该事件。

许多人所做的只是使用“EnterFrame”每帧检查一次冲突。如果您需要在碰撞后直接采取行动,那么绑定到“移动”将提供这一点。

【讨论】:

  • ,请添加collision detectioncraftyJs 的任何运行示例,因为我搜索了很多但没有找到...它!
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多