PDA

Просмотр полной версии : проблема с hitTestPoint


random13
21.08.2009, 16:21
наверное уже обсуждалось но всё же прошу помочь разобраться с проблемой
for each(var point:MapPoint in this.points) {
if(point.hitTestPoint(mouseX, mouseY, false)) {
e.stopPropagation();
point.dispatchEvent(new GeometryEvent(GeometryEvent.POINT_MOUSE_DOWN));
return true;
}
}

и так point лежит в мувике geometry который в свою очередь еще в одном а тот уже лежит в stage

тест не проходит, где моя ошибка

Волгоградец
21.08.2009, 16:39
Перевести координаты мыши в локальные - туда, где лежат MapPoint.

random13
21.08.2009, 16:51
изменил на такой вариант:

for each(var point:MapPoint in this.points) {
var mousePoint:Point = new Point(mouseX, mouseY);
mousePoint = this.globalToLocal(mousePoint);
if(point.hitTestPoint(mousePoint.x, mousePoint.y, false)) {
// e.stopPropagation();
point.dispatchEvent(new GeometryEvent(GeometryEvent.POINT_MOUSE_DOWN));
return true;
}
else {
return false;
}
}

так как этот метод в себя как раз добавляет в себя точки то и преобразование в локальные координаты веду чере this или не верно опять

Волгоградец
21.08.2009, 17:58
Хм. Я наврал, прошу прощения, координаты переводить не обязательно. Твои оба варианта рабочие. Ошибка в другом месте.

random13
21.08.2009, 17:59
да спасибо, понял что не там

Добавлено через 65 часов 10 минут
новый баг обнаружился:
суть в том что у меня есть объект(назовём его движимым) в который я складываю движимые объекты,

я добавляю в него объекты которые хочу в последствие при попадание двигать, при этом вот какая последовательность:

- добавил объект
после этого если я нажимаю по моему объекту то он прекрасно проходит hittest но если я после добавления сдвигаю главный объект в котором содержится объект для проверки то тест не проходится, в чем причина?


public function isGeometryClick():Boolean {
if(this.points.length > 0) {
for each(var point:MapPoint in this._points) {
if(point.hitTestPoint(mouseX, mouseY, false)) {
Globals.is_block_map = true;
point.dispatchEvent(new GeometryEvent(GeometryEvent.POINT_MOUSE_DOWN));
return true;
}
}
return false;
}
else
return false;
}

Волгоградец
24.08.2009, 18:26
Из-за того, что ты двигаешь контейнер, спрайт не может перестать ловить события. В другом месте ошибка опять - либо что-то перекрывает твой объект, либо еще что-то.

random13
24.08.2009, 18:52
ну вот на самом деле не совсем понятная зависимость: если не двигал родительский контейнер то всё ок а если двигал то не канает
при этом здесь другой код то помойму ну никак не связан

Добавлено через 71 час 9 минут
подскажите, при какой ситуации может возникнуть что после драга перестает проходить hitTestPoint