Обнаружение столкновений на анимированном объекте

Я не могу заставить его работать, кажется, что анимированные объекты не запускают событие «Перемещено»?

Я анимирую объект на экране, и мне нужно проверить, не столкнулся ли он с игроком (который летает вверх и вниз по событиям клавиатуры). Это работает, если я добавляю галочку «Перемещено» для игрока, но что, если игрок стоит на месте :-)

Поэтому мне нужно проверить, когда движутся анимированные объекты, если они попали в игрока.

Не запускает ни одно из событий:

        // 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');
            });

person Jason94    schedule 06.03.2014    source источник
comment
Можете ли вы предоставить свой jsfiddle.net   -  person ashbuilds    schedule 06.03.2014
comment
Ашиш Мишра да :-) jsfiddle.net/6RDYw   -  person Jason94    schedule 06.03.2014


Ответы (2)


Обновлено:

Я использую немного plugin Здесь, collisions($div1, $div2):

So,

 function interval() {

   timeout = setTimeout(function () {

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

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

 }

 interval()

РАБОЧАЯ ДЕМО

Пусть это было полезно...

person ashbuilds    schedule 06.03.2014
comment
Очень помог Ашиш! Спасибо! - person Jason94; 06.03.2014
comment
Однако это не будет совместимо со встроенными средствами Crafty для столкновений! Я предполагаю, что это также потерпит неудачу, если вы переключитесь с DOM на Canvas. - person starwed; 08.03.2014
comment
Я даю решение в соответствии с приведенным выше условием, и я не проверяю его для холста, может быть, он не работает на холсте, но он работает для элемента HTML! @звездная свадьба - person ashbuilds; 08.03.2014
comment
Конечно, но OP уже использует игровой фреймворк, который обеспечивает эту функциональность; у них нет причин использовать дополнительные несовместимые зависимости. :) - person starwed; 08.03.2014
comment
@starwed, да, вы правы, но все, что я знаю для достижения вышеуказанной задачи, я просто поделился здесь! И действительно, я ничего не знаю об этом твиновом / хитром плагине! :) в любом случае, если вы хотите отредактировать и получить лучший ответ, добро пожаловать :) - person ashbuilds; 08.03.2014

«Перемещено» — это специальное событие, которое используют такие компоненты, как «Multiway».

Более фундаментальным событием является просто «Перемещение», которое реализуется непосредственно 2D-компонентом -- bind к этому событию вместо этого.

Многие люди просто проверяют коллизии один раз за кадр, используя «EnterFrame». Если вам нужно действовать непосредственно после столкновения, привязка к «Move» обеспечит это.

person starwed    schedule 08.03.2014
comment
Пожалуйста, добавьте любой работающий пример collision detection с craftyJs, потому что я много искал, но ничего не нашел... это! - person ashbuilds; 09.03.2014