Показать сообщение отдельно
Старый 13.06.2013, 19:39
funkypanky вне форума Посмотреть профиль Отправить личное сообщение для funkypanky Найти все сообщения от funkypanky
  № 5  
Ответить с цитированием
funkypanky

Регистрация: Jun 2013
Сообщений: 22
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Проще всего наверное будет поседеть немного за изучением алгоритмов пересечений...что то типа вот этого http://algolist.ru/maths/geom/intersect/ ..или ещё есть книги алгоритмы компютерной графики.Можно конечно поискать и готовые решения ,но это плохой совет!

Цитата:
Сообщение от KumoKairo Посмотреть сообщение
На самом деле ваш вариант вполне подходит для начала работы со столкновениями - при проверке объектов с помощью хиттестов используется покадровая проверка, поэтому точность проверки прямо зависит от ФПС.

В этом случае, такие вещи как перелет через стену или проваливание сквозь пол решается простым приведением координаты квадрата к какой-то координате платформы (например к верхнему, если кадрат "упал" на платформу, к левому, если квадрат слева от платформы и т.д.)
То есть проверяем столкновение, и после того, как оно найдено, насильно ставим квадрат на нужную нам координату

Но начинайте потихоньку работать с Box2D, благо есть AS3 порт этой библиотеки
Я пересмотрел много примеров, и да -там используется хиттест. Но есть непонятные моменты-
Первоначально создаётся массив и туда забиваются все элементы стен уровня:
Код AS3:
var level:Array = new Array();
for (var i=0; i<numChildren; i++){
	if (getChildAt(i) is platform){
		level.push(getChildAt(i).getRect(this));
	}
}
тут вроде всё просто -но я не понимаю запись .getRect(this) - это ставит ограничивающую область прямоугольника для всех элементов стен?
Или вот:
Код AS3:
for (i=0; i<level.length; i++){
	if (mHero.getRect(this).intersects(level[i])){
		if (speedX > 0) {
			mHero.x = level[i].left- mHero.width/2;
		}
		if (speedX < 0) {
			mHero.x = level[i].right+ mHero.width/2;
		}
		speedX=0;
	 }
   }
Здесь идентичная проверка на пересечения? типа если герой пересекает область прямоугольника клипа из массива стен, то из левой стороны клипа стены из массива вычитаем полуразмер героя?(извиняюсь за каламбур)
не совсем понял тут свойство .left - .right , применительно в одному клипу можно использовать это?
типа if(mHero.right.intersects(wall.left)), чтобы потом также вычесть полуразмер героя из левой стороны клипа?

И ещё хотел спросить про hitTestPoint(); Некоторые пишут что в мувиклип героя можно вставить маркеры(обычные мувиклипы внутри клипа) и проверять столкновения с препятствием по маркерам. Как такой метод проверки устроен?

PS: для блокового уровня с прямоугольниками это неплохо вроде, а как быть если есть наклонные поверхности другой формы?