|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
hitTestPoint для вложеных клипов проблема
Совершенно на ровном месте завис и не могу понять причину проблемы.
Есть clip(movieClip), в нем obj(MovieClip), и отдельный от всех клип point(красный кружок) Функция выполняет такое: нужно переместить obj в случайное место -> затем создаются случайные координаты по x и y -> и проверить clip(его родителя) на hitTestPoint с этими случайными координатами -> если хит-тест выдает "сталкивается", то нужно вызывать эту функцию до тех пор пока хит-тест не выдаст "не сталкивается" и поместить point(красный кружок) в эти координаты.То есть я хочу что бы point(красный круг) всегда был вне клипа clip Всё так просто, а не работает, рано или поздно всё равно point оказывается поверх клипа clip. function hit() { //случайные координаты var xrand=Math.random()*550; var yrand=Math.random()*400; //проверка на столкновения if (clip.hitTestPoint(xrand,yrand,true)) { //если сталкивается то перезапускаю функцию hit(); } else { //если не сталкивается то помещаю точку в это место point.x=xrand; point.y=yrand; } } stage.addEventListener(MouseEvent.CLICK,cl); function cl(e:MouseEvent) { //случайные координаты для объекта в клипе clip.obj.x=Math.random()*550; clip.obj.y=Math.random()*400; //проверка на столкновение hit(); } |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Вы назвали рекурсию "перезапуском" в своём коде.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
Ага, я понял, но если через цикл, то та же проблема осталась
Что же делать, неужели нет выхода... function hit() { //случайные координаты var xrand=Math.random()*550; var yrand=Math.random()*400; //проверка на столкновения while (clip.hitTestPoint(xrand,yrand,true)) { //если сталкивается то перезапускаю функцию xrand=Math.random()*550; yrand=Math.random()*400; } //если не сталкивается то помещаю точку в это место point.x=xrand; point.y=yrand; } stage.addEventListener(MouseEvent.CLICK,cl); function cl(e:MouseEvent) { //случайные координаты для объекта в клипе clip.obj.x=Math.random()*550; clip.obj.y=Math.random()*400; //проверка на столкновение hit(); } Последний раз редактировалось samana; 08.08.2010 в 17:07. |
|
|||||
Регистрация: Jan 2010
Сообщений: 17
|
function hit() { //случайные координаты var xrand=Math.random()*550; var yrand=Math.random()*400; //проверка на столкновения if (clip.obj.hitTestPoint(xrand,yrand)) { //если сталкивается то перезапускаю функцию hit(); } else { //если не сталкивается то помещаю точку в это место point.x=xrand; point.y=yrand; } } Ты сделал проверку коллизии не с obj, а clip. Поэтому если заметил у тебя за границы синей рамки точка не заходит. Но вот если делать if (clip.obj.hitTestPoint(xrand,yrand,true)) то все равно точка накладывается на круг. |
Часовой пояс GMT +4, время: 18:54. |
|
« Предыдущая тема | Следующая тема » |
|
|