![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2009
Сообщений: 57
|
Здравствуйте, делаю игрушку небольшую, сюжет простой. Пытаюсь победить одну траблу.
В общем, в верху рандомно появляются танки, но иногда бывает, что танки появляются друг на дружке, я пытаюсь сделать эту проверку, for (i = 0; i < tankContainer.numChildren; i++) { var movingTankA:tankMc = tankContainer.getChildAt(i) as tankMc; for (j = 0; j < tankContainer.numChildren; j++) { var movingTankB:tankMc = tankContainer.getChildAt(j) as tankMc; if (movingTankA.hitTestPoint(movingTankB.x,movingTankB.y,true)) { movingTankA.y += 24; } break;//завершаем цикл } } но в место этого, я получаю скорость в 24 пикселя, и танк просто проносится по экрану.. не могу понять, почему условие не становится в false? Прошу помощи.. |
|
|||||
|
strange mood
|
У вас внутренний цикл идет по всем танкам, на одной из его итераций tankB == tankA, и танк проверяется на пересечение с самим собой. В итоге гарантированно сдвигаются все танки.
Поменяйте начальное значение j c 0 на i + 1.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
На первой итерации внешнего цикла переменной movingTankA становиться танк с индексом 0. Во вложенном цикле, на первой же итерации, переменной movingTankB становиться танк с индексом 0, то есть тот же самый, на который ссылается и movingTankA. Разумеется при проверке столкновения танка с его же координатами мы будем получать true.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 57
|
ага, ясно, спасибо
![]() А объясните мне еще такую вещь, как лучше проверять спрайты на столкновения, т. е. проверить не наложился ли спрайт на спрайт? hitTestPoint или hitTestObject? GAIKER, кстати, поменял, все равно некоторые танки налазят друг на друга ![]() Последний раз редактировалось TexHuK; 18.02.2011 в 13:44. Причина: сделал проверку |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 57
|
Извините, что поднимаю эту тему, но всетеки объясните пожалуйста в чем причина?
Делаю маленькую игру, и не могу понять почему столкновения так некорректно работают вот пример работы игры, нужно щелкнуть мышкой в любом месте, и уведите результат. Проблема следующая, шары не долетают друг до друга, и срабатывает столкновение. http://webexpa.co.cc/ballc.swf Не могу понять, как организовываются правильно столкновения?? вот примерный код энтерфрейма если flagColl становится труе, то идет увеличение шара private function onEnterFrame(e:Event):void { for (var i:int = 0; i < continers.numChildren; i++) { var chas:Chastica = continers.getChildAt(i) as Chastica; chas.x += chas.dx; chas.y += chas.dy; if (chas.x + ballRadius > rightWall) { overshot = (chas.x + ballRadius) - rightWall; chas.x -= overshot * 2; if (chas.rightWallF) { chas.dx = Math.random() * 3; chas.rightWallF = false; } chas.dx *= -1; } if (chas.x - ballRadius < leftWall) { overshot = leftWall - (chas.x - ballRadius); chas.x += overshot * 2; if (chas.leftWallF) { chas.dx = Math.random() * 3; chas.leftWallF = false; } chas.dx *= -1; } if (chas.y + ballRadius > downWall) { overshot = (chas.y + ballRadius) - downWall; chas.y -= overshot * 2; if (chas.downWallF) { chas.dy = Math.random() * 3; chas.downWallF = false; } chas.dy *= -1; } if (chas.y - ballRadius < upWall) { overshot = upWall - (chas.y - ballRadius); chas.y += overshot * 2; if (chas.upWallF) { chas.dy = Math.random() * 3; chas.upWallF = false; } chas.dy *= -1; } for (var j:int = 0; j < continersP.numChildren; j++) { var posBall:Chastica = continersP.getChildAt(j) as Chastica; if (posBall.hitTestObject(chas)) { chas.flagColl = true; } } for (var k:int = i+1; k < continers.numChildren; k++) { var chas2:Chastica = continers.getChildAt(k) as Chastica; if (chas2.hitTestObject(chas) && chas.flagColl) { chas2.flagColl = true; } } } if (!flagPos) { chasP.flagColl = true; } } |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 174
|
Скорее всего дело в hitTestObject
|
|
|||||
|
столкновение кругов просто проверить без hitTest'а - вычислив расстояние от центра одного до центра другого. Если оно меньше суммы радиусов - круги столкнулись.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 05:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|