Просмотр полной версии : hitTest динамически созданных мувиков
Задача в следующем: нужно распознать, когда один юнит пересекается с другим и с каким именно.
_global.cDepth = 100;
onEnterFrame = function () {
if (_global.cDepth<105) {
//unit - круг 65х65
var thisMC:MovieClip = attachMovie("unit", "unit"+_global.cDepth, _global.cDepth);
thisMC._x = Math.random()*300;
thisMC._y = Math.random()*300;
_global.cDepth++;
}
};
Так же буду рад другим вариантам того, как сделать так, что бы юниты не проходили(в данном коде не появлялись) друг на друге.
пс. через хитТест не ясно, что с чем и когда проверять на хитТест, т.к. нужно нечто вроде unit###, где ### - любое цифровое значение. Есть ли что-то подобное во флеше Оо?
Поиск по форуму, конечно же, ничего не дал oO?
угу... можно ткнуть куда-нить более конкретно? :D
Ключевое слово hitTest (http://www.flasher.ru/forum/search.php?searchid=879643&pp=25). Нашлось 20 страниц обсуждений, где упоминается хиттест.
круто, а по параметру _name - 496 страниц
И так опустив навыки работы с поиском, вернёмся к задаче, если никто не против?)
nOobCrafter
10.03.2009, 14:40
Вчера тоже задался вопросом хиттеста, и помощью поиска нашел весьма любопытный пример который оставляет кучу свободы творчеству ;). this - _root как видно перебираем обьекты в руте на предмет того соприкасаются ли они с заданным обьектом c_mc, чуть что выводится сообщение с чем мы пересеклись.
this.onMouseMove = function() {
for (var i in this) {
if (typeof (this[i]) == "movieclip") {
if (this[i] != _root.c_mc) {
if (this[i].hitTest(_root.c_mc)) {
trace("касание с "+this[i]);
t_txt.text +="касание с "+this[i]+"\n"
}
}
}
}
};
По идее надо циклом пробегать по массиву аттаченных мувиком на предмет хиттеста, если он етсь то меняем координаты еще раз. ИМХО.
З.Ы. в слуае с окружностями писали что стоит лиш проверять растояние между их центрами.. если оно меньше 2х радиусов то тогда они столкнулись если больше то ссответствено нет.
З.З.Ы. я бы скрестил аттач с этим:
function getRandomIntArray(len:Number):Array
{
var A:Array = [];
var found:Boolean = false;
var un:Number;
while (A.length != len)
{
un = myRandNumber(1, len);
found = false; // где то тут кидаем рандомные координаты
for (var i = 0; i < A.length; i++)
{
if (A[i] == un) // тут хиттест
{
found = true;// если тру, то откат и по новой
break;
}
}
if (!found) A.push(un);
}
return A;
}
только вместо массивов бы так же перебирал аттаченные обьекты на предмет хиттеста
_global.cDepth = 1;
this.onEnterFrame = function() {
if (_global.cDepth<20) {
//unit - круг 65х65
var thisMC:MovieClip = attachMovie("unit", "unit"+_global.cDepth, _global.cDepth);
thisMC._x = Math.random()*500;
thisMC._y = Math.random()*500;
_global.cDepth++;
thisMC.onMouseDown = function() {
_global.cDepth = 1;
removeMovieClip(thisMC);
};
thisMC.onEnterFrame = function() {
for (var i in _root) {
if (typeof (_root[i]) == "movieclip") {
if (_root[i]._name != thisMC._name) {
if (_root[i].hitTest(thisMC)) {
trace(thisMC._name+" касание с "+_root[i]._name);
thisMC._x = Math.random()*500;
thisMC._y = Math.random()*500;
}
}
}
}
};
}
};
Работает вроде как надо)) посмотрим как дальше себя поведёт такой код)
Спасибо nOobCrafter'y за вариант перебрать все значения в руте на предмет мувиклипности 8)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.