|
|
|||||
Регистрация: Sep 2005
Сообщений: 106
|
Проверка на столкновение
Не могу сделать проверку на столкновение с не прямоугольным объектом. Столкновение должно быть упругое. Помогите плиз
|
|
|||||
стандартными средствами флэш это практически не возможно.
hitTest() проверяет столкновение двух объектов по boundin box, то есть по описывающим их прямоугольникам. Возможна проверка hitTest() и по области формы, поставив true соответствующему свойству функции, но эт будет работать при столкновении точки и формы, никак не двух форм. Вообщем задача достаточно трудная, как мне кажется, на лету не сделать. Как вариант - это трудоемкий процесс hitTest() обоих форм поточкам и посчет возможного столкновения. |
|
|||||
вариант решения :
создаем массив критичных/выпирающих точек 'кривого' объекта в цикле смотрим hittext(x,y,true) c этими точками.. зы: если объект не прямоугольный, но круглый - можно расстояние с радиусом сравнивать, здесь есть пример для шариков (упругое столкновение).. зыы: здесь ,collision_resolve пример для всяких объектов (не смотрел как сделано) Последний раз редактировалось silin; 29.01.2006 в 20:54. |
|
|||||
если имеешь дело с многогранными объектами-препятствиями, то их проще всего описывать векторами - и рассчитывать векторные пересечения. как это сделать - смотрим тут http://www.tonypa.pri.ee/
|
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
код для препядствия
hero - управляемый нами элемент. onClipEvent (enterFrame) { with (_root.hero) { if (this.hitTest(getBounds(_root).xMax, _y, true)) { _x-=10; } if (this.hitTest(getBounds(_root).xMin, _y, true)) { _x+=10; } if (this.hitTest(_x, getBounds(_root).yMax, true)) { _y-=10; } if (this.hitTest(_x, getBounds(_root).yMin, true)) { _y+=10; } } } ============ код для управляемого нами элемента onClipEvent (load) { moveSpeed = 10; // скорость движения в пикселях } onClipEvent (enterFrame) { if (Key.isDown (Key.RIGHT)) { this._x += moveSpeed; } else if (Key.isDown (Key.UP)) { this._y -= moveSpeed; } else if (Key.isDown (Key.DOWN)) { this._y += moveSpeed; } else if (Key.isDown (Key.LEFT)) { this._x -= moveSpeed; } } |
|
|||||
=)
NoCD, НЕ ПРЯМОУГОЛЬНЫЙ ОБЪЕКТ. |
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
а ты начерти произвольный рисунок там, хоть зигзагом, хоть ромашкой, хоть замкнутый круг с препятствиями, то бишь можешь рисовать препятствия кистью, а не прямоугольниками завтавлять всю карту.
В сам мувик с препятствием кидаешь указанный выше код, и вуаля, дальше все зависит от фантазии. Только единственное, что этот код нужно доработь еще, пару скриптов туда черкануть. Вот и все!!!! |
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
Вот даже исходник покажу, многим пригодится.
|
|
|||||
NoCD,
вводишь людей в заблуждение, товарищъ |
Часовой пояс GMT +4, время: 10:45. |
|
« Предыдущая тема | Следующая тема » |
|
|