Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.02.2012, 19:18
ashIndie вне форума Посмотреть профиль Отправить личное сообщение для ashIndie Найти все сообщения от ashIndie
  № 1  
Ответить с цитированием
ashIndie

Регистрация: Feb 2012
Сообщений: 68
Attention Помогите с алгоритмом поиска пути!

Новая проблема...пытаюсь реализовать данный алгоритм на AS 3.0, но в некоторых местах не пойму что имел ввиду автор.
источник:
http://xitri.com/2008/09/22/simple-e...#comment-78710
Я нк пытаюсь сделать на всем готовеньком, вы меня поймите, но просто просидел уже не один час и зашел в тупик честно говоря. Буду очень рад если найдется ктото, кто поможет.
Вот собственно сам код:
Код AS1/AS2:
step = 2;
 
onEnterFrame = function(){
	var dx = _xmouse - man._x;
	var dy = _ymouse - man._y;
	//Направление (угол) к цели
	var angle = Math.atan2(dy, dx);
	var dist = Math.sqrt(dx*dx + dy*dy);
	if(dist > step) {
		//пробуем пройти напролом
		tgtX = man._x + step * Math.cos(angle);
		tgtY = man._y + step * Math.sin(angle);
		if (!path.hitTest(tgtX, tgtY, true)){
			//напролом не получилось, вычисляем базовое направление
			var dAngle = dAngleRadian(direction, angle);
			workAngle = angle + dAngle*.8;
			//Шаг поворота - 10 градусов
			for(var i = 0; i < 360; i += 10) {
				for(var j = -1; j <= 1; j += 2) {
					var a = workAngle + radian(i) * j;
					var tempX = man._x + step * Math.cos(a);
					var tempY = man._y + step * Math.sin(a);
					if (path.hitTest(tempX, tempY, true)) {
						//точка выхода найдена. Запоминаем ее и прерываем цикл
						tgtX = tempX;
						tgtY = tempY;
						break;
					}
				}
			}
		}
		var timeDx = tgtX - man._x;
		var timeDy = tgtY - man._y;
		//направление движения
		direction = Math.atan2(timeDy, timeDx);
		var dAngle = dAngleDegree(direction*180/Math.PI, man._rotation);
		//поворячиваем клип к направлени движения на 5-ю часть
		man._rotation += dAngle * .2;
		man._x = tgtX;
		man._y = tgtY;
		man.play();
	} else {
		//стоим
		man.gotoAndStop(5);
	}
}
 
function dAngleRadian(a1, a2) {
	var da = a1 - a2;
	if (da > Math.PI) {
		da = -Math.PI*2 + da;
	} else if (da < -Math.PI) {
		da = Math.PI*2 + da;
	}
	return da;
}
function dAngleDegree(a1, a2) {
	var da = a1 - a2;
	if (da > 180) {
		da = -360 + da;
	} else if (da < -180) {
		da = 360 + da;
	}
	return da;
}
function degree(a) {
	return a / Math.PI * 180;
}
function radian(a) {
	return a / 180 * Math.PI;
}
нужен для того чтобы юнит обходил препятствия, но в некоторых местах я не понимаю что имеется ввиду, да и написан он на старом языке, так что переменная может использоваться у него до обьявления или обьявляться дважды....

Старый 24.02.2012, 19:24
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 2  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Не сможешь.
hitTest теперь нету в as3.
Лучше начни с малого...

Старый 24.02.2012, 19:27
ashIndie вне форума Посмотреть профиль Отправить личное сообщение для ashIndie Найти все сообщения от ashIndie
  № 3  
Ответить с цитированием
ashIndie

Регистрация: Feb 2012
Сообщений: 68
зато есть hitTestPoint и hitTestObject,
это не первое что я пишу на AS3, но просто первая игра с подобием искусственного интеллекта....
конкретно мне непонятны вот эти строчки:
Код AS1/AS2:
var dAngle = dAngleRadian(direction, angle);
			workAngle = angle + dAngle*.8;
тут direction чем отличается от angle, и откуда этот дирекшн берется вообще непонятно.

Старый 24.02.2012, 20:55
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
посмотрите вот это Поиск пути (pathfinding) и по - хорошему еще вот это обязательно Поиск пути
__________________
местонахождение

Старый 25.02.2012, 01:53
ashIndie вне форума Посмотреть профиль Отправить личное сообщение для ashIndie Найти все сообщения от ashIndie
  № 5  
Ответить с цитированием
ashIndie

Регистрация: Feb 2012
Сообщений: 68
СлаваRa, спасибо. отличные статьи. обязательно надо изучить

Добавлено через 1 час 4 минуты
всетаки я был бы очень признателен, если бы кто-нибудь мне разъяснил эти 2 строчки что я описал выше....
алгоритм заработал, но не совсем корректно, с "подергиваниями", когда юнит обходит препятствие...

Добавлено:
Если сделать поиск пути только например по часовой стрелке то все идет гладко, для небольших препятствий это подойдет....но если стена например или сложные какие фигуры, то это выглядит глупо. как это решить еще не придумал


Последний раз редактировалось ashIndie; 25.02.2012 в 03:56.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
игра , интеллект , поиск пути , Столкновения
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.