2016-04-04 4 views
0

Я пытаюсь создать взаимодействие drag and drop в анимационном CC, используя символ мувиклипа. Цель состоит в том, чтобы он оживлялся, когда он был сброшен в зону падения. Я видел, но для этого не использовал лист спрайтов, но это кажется хорошей идеей.Как заставить Animate CC распознавать капли в моем перетаскивании?

Однако мой вопрос основан скорее на том, чтобы распознать падение, когда это произойдет. Я не могу проверить идею листа спрайта, пока не получу это. Я смотрел кучу учебников, подобных этому, here, который только что редактировал this one для обработки символов в Animate CC или других объектах. Мне это очень понравилось, но он не слишком хорошо справляется с капельками. Я могу подобрать перетаскиваемый просто отлично, но я не могу заставить его выйти из мышки, даже когда я отпущу мышь.

dragger - символ в анимации, который я пытаюсь перетащить (на всякий случай это было не очевидно).

dragger.on("pressmove", function(evt){ 
    evt.currentTarget.x = evt.stageX; 
    evt.currentTarget.y = evt.stageY; 
    stage.update(evt); 
}); 

Эта часть является то, что дает мне проблемы, я думаю:

//refuses to release. doesn't recognize it. 
dragger.on("pressup", function(evt){  
    //lock position of thermometer and play stabby animation 
    dragger.x = dragger.x; 
    dragger.y = dragger.y; 

    if(intersect(evt.currentTarget, this.targetRight)){ //Intersection testing for good 
     alert("YAY you're right AND it works!"); 

    }else if(intersect(evt.currentTarget, this.targetWrong)){ //intersection Testing for bad 
     alert("BOO its wrong, but YAY it works"); 
    } 
    stage.update(evt); 
}); 

, а затем мой код пересекается (для проверки, если она по площади падения):

function intersect(obj1, obj2){ 
    var objBounds1 = obj1.getBounds().clone(); 
    var objBounds2 = obj2.nominalBounds.clone(); // <-----Changed this line 

    var pt = obj1.globalToLocal(objBounds2.x, objBounds2.y); 

    var h1 = -(objBounds1.height/2 + objBounds2.height); 
    var h2 = objBounds2.height/2; 
    var w1 = -(objBounds1.width/2 + objBounds2.width); 
    var w2 = objBounds2.width/2; 


    if(pt.x > w2 || pt.x < w1) return false; 
    if(pt.y > h2 || pt.y < h1) return false; 

    return true; 
} 
+0

У вас есть возможность опубликовать демо? Ваш код _looks_ отлично, но трудно сказать, не видя, что еще происходит. – Lanny

+0

Конечно, просто дай мне секунду, чтобы подтянуть ссылку для него. – Mike

+0

@ Lanny Я поставлю ссылку здесь: http://apersonnamedmike.github.io/drag-n-drop-demo/ Когда вы отпустите мышь, и это над одним из синих квадратов на цыпленке, это должно дать вам одно из предупреждений, включенных в код, но это, похоже, не нравится. – Mike

ответ

1

Покидает демонстрация включена, и я получаю немедленную ошибку, когда я начинаю перетаскивать (обратите внимание, что я всегда включаю переключатель «break on error» в Chrome, когда инспектор открыт).

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

var objBounds2 = obj2.getBounds().clone(); // Error! 

Вы можете легко исправить это путем пропускания сферы методу on(). Это гарантирует, что this относится к текущему объему.

dragger.on("pressup", function(evt){ //this function will be very custom, always 
    //lock position of thermometer and play stabby animation 
    dragger.x = dragger.x; 
    dragger.y = dragger.y; 

    if(intersect(evt.currentTarget, this.targetRight)){ //Intersection testing for good 
     alert("YAY you're right AND it works!"); 

    }else if(intersect(evt.currentTarget, this.targetWrong)){ //intersection Testing for bad 
     alert("BOO its wrong, but YAY it works"); 
    } 
    stage.update(evt); 

}, this); // <-------------------- Only thing I changed 

Я добавил 3-ий параметр для метода on(), чтобы передать объем. Это должно решить эту ошибку и может даже решить вашу проблему.

Cheers,

+0

Спасибо, я думаю, что это помогло, но теперь это говорит мне конкретно, что geBounds() не работает на obj2, потому что он не указан. Я предполагаю, потому что, когда я получаю this.targetRight, он не признает это как экземпляр в моем проекте? – Mike

+0

Что такое 'targetRight'? Если это форма, она может не иметь границ. – Lanny

+0

Да, это форма, превращенная в клип. в демо, это один из синих квадратов. targetWrong - это та же самая сделка. – Mike