2017-02-10 20 views
-1

Я не хочу накладывать друг на друга объекты. Также я хочу сохранить объекты в пределе сцены. Кнопки должны уходить, когда попадают друг в друга. Я пробовал hitTestObject, но кнопки перемещаются так ,Перемещение объекта при ударе друг друга

Пример кода шаг для рыбы 2 * UPDATE

var fish2x:Number=10; 
var fish2y:Number=14; 
  
stage.addEventListener(Event.ENTER_FRAME,h42); 
function h42(s:Event = null) { 
fish2.x+=fish2x; 
fish2.y+=fish2y; 
if ((fish2.x>=stage.stageWidth-fish2.width/2)|| (fish2.x <= fish2.width/2)) { 
    fish2x*=-1; 
} 
if ((fish2.y>=stage.stageHeight-fish2.height/2)|| (fish2.y <= fish2.height/2)) { 
    fish2y*=-1; 
} 

if (fish2.hitTestObject(fish3)){ 
fish2y *= -1; 
fish3y *= -1; 
h42(); 
} 
} 

Также я пытался в diffrent функции

stage.addEventListener(Event.ENTER_FRAME,crash); 
function crash(s:Event) { 
  
if (fish2.hitTestObject(fish || fish3)) { 

fish2y*=-1; 
message.text="crash"; 
} 
} 

Для более 2 рыбы не работают. Я установил null fish2 и fish 3, чем я использую этот код.

if (fish2.hitTestObject(fish3 || fish4)){ 
fish2y *= -1; 
fish2x *= -1; 
h42(); 
} 

Я изменил hittestoject все, что у них есть. Все функции меняются, но это не работает.

Update 2

Теперь это не ошибка, но не происходит, когда fish3 ударил каждый other.I удален «нулевой» рыба и рыба 3 используется только для рыб 2.

 if (fish2.hitTestObject(fish || fsih3)){ 
fish2y *= -1; 
fish2x *= -1; 
fishy*=-1; 
fishx*=-1; 
fish3y*=-1; 
fish3x*=-1; 
} 
} 
+0

«Move как сумасшедший» не помогает нам визуализировать то, что на самом деле происходит. –

+0

Я не знаю, можете ли вы сделать hittestobject, как это (x || b). Я думаю, вам может понадобиться hittestobject (x) || hittestobject (b) –

+0

Hittestobject работает правильно. Я вижу текст сообщения при попадании друг в друга. Я использовал «| |». Я получил 7 объектов на сцене, просто проверил для 2 рыб. Если рыба 2 ударила по рыбе или рыбе3 направление. Моя проблема заключается в том, как перемещать объект в обратном направлении при ударе друг друга. – KucuKeko

ответ

1

Я думаю, что это потому что они оба движутся. Когда вы проверяете столкновения между A и B Fishes, если столкновение истинно, не просто изменяйте их скорость на * = - 1. Вместо этого также перемещайте их один раз.

if (A.hitTestObject(B)){ 
    Ay *= -1; 
    Ax *= -1; 
    By *= -1; 
    Bx *= -1; 
    h42(); 
} 

и добавьте null к вашему значению по умолчанию, как это:

function h42(s:Event = null) { 
+0

Я меняю функцию на null и добавляю функцию h42 к вашему коду. Но это перемещение застряло снова. Что вы предлагаете? Спасибо – KucuKeko

+0

Хорошо, теперь не застрял, но он прыгнул еще на другую позицию. Вот что такое gif http://keko11.byethost24.com/bandituruk.gif – KucuKeko

+0

Можете ли вы вставить код в свой исходный пост, как сейчас? –