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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.05.2013, 23:29
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Post Искусственный интеллект. Уклонение от столкновения.

Приветствую, Коллеги.
Сегодня созрел для очередного к вам вопроса.

Есть некая игровая механика (исходник прикреплен). Далее я немного поясню ее:

1. Два обьекта (в моем случае это танки) двигаются непрерывно в замкнутом пространстве
2. Со случайным интервалом времени каждый обьект может поменять вектор своего движения на некий случайный угол
3. Если обьекты подходят друг к другу достаточно близко - они начинают менять вектора движения так, чтобы разьехаться
4. При выходе за границу обьекты перемещаются на противоположную сторону зоны, в которую помещены

Такой вот несложный ИИ. Но в процессе работы над ним столкнулся со следующими проблемами:

1. Мой обработчик столкновений недостаточно хорош и обьеты при странных обстоятельствах все же умудряются наезжать друг на друга
2. Обработка столкновений обьектов за границей зоны, которой они ограничены слегка примитивна, но до другой я не додумался

Собственно, к сообществу у меня будет вопрос: если у вас есть соображения, где именно закралась ошибка по п. 1 и какой лучше применить алгоритм для п. 2 - буду рад каждой идее.

Заранее всем спасибо.

MovingTestForum.swf   (2.7 Кб)
Вложения
Тип файла: swf MovingTestForum.swf (2.7 Кб, 122 просмотров)
Тип файла: zip MovingTestForum.zip (15.5 Кб, 52 просмотров)


Последний раз редактировалось Zebestov; 30.05.2013 в 23:49.
Старый 31.05.2013, 00:06
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
советую почитать книжку киса питерса advanced actionscript 3 animation
там есть эта тема, и довольно качественно описана. Это в разделе behaviors: evading

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

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от caseyryan Посмотреть сообщение
советую почитать книжку киса питерса advanced actionscript 3 animation
там есть эта тема, и довольно качественно описана. Это в разделе behaviors: evading
Спасибо за наводку, попробую найти эту книгу.

Старый 31.05.2013, 10:50
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
3. Если обьекты подходят друг к другу достаточно близко - они начинают менять вектора движения так, чтобы разьехаться
Мне кажется, ошибка кроется здесь. Опишите подробнее, как у Вас танки договариваются о разьезде.

Старый 31.05.2013, 11:04
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Мне кажется, ошибка кроется здесь. Опишите подробнее, как у Вас танки договариваются о разьезде.
Если смотреть исходник, то за этот алгоритм отвечает функция
Код AS1/AS2:
processCrash()
Кратко суть такова: считаем разницу векторов движения мелкого и большого танков; если она по абсолютному значению в пределах 15-90 градусов, то просто присваиваем вектор мелкого танка большому и наоборот; в противном случае смотрим знак разницы векторов и в зависимости от него даем чуть меньше 90 градусов разворота каждому танку с разными знаками.
Вот кусочек кода, который за это отвечает:
Код AS1/AS2:
// угол поворота
var angRotLT:Number;
var angRotHT:Number;
//
var diffAng:Number = dAngle(tankL._rotation) - dAngle(tankH._rotation);
//
if (Math.abs(diffAng) <= 90 && Math.abs(diffAng) >= 15)
{
	angRotLT = dAngle(tankH._rotation);
	angRotHT = dAngle(tankL._rotation);
}
else
{
	if (diffAng < 0)
	{
		angRotLT = dAngle(tankL._rotation + 80);
		angRotHT = dAngle(tankH._rotation - 70);
	}
	else if (diffAng > 0)
	{
		angRotLT = dAngle(tankL._rotation - 80);
		angRotHT = dAngle(tankH._rotation + 70);
	}
	else if (diffAng == 0)
	{
		if (randNum(2) == 2)
		{
			angRotLT = dAngle(tankL._rotation - 45);
		}
		else
		{
			angRotLT = dAngle(tankL._rotation + 45);
		}
	}
}
// избавляемся от отрицательных углов и углов >360 градусов
function dAngle(da:Number):Number
{
	while (da < 0)
	{
		da = 360 + da;
	}
	while (da > 360)
	{
		da = da - 360;
	}
	// 
	return da;
}

Старый 31.05.2013, 13:57
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Код AS3:
function dAngle(da:Number):Number
{
	while (da < 0)
	{
		da = 360 + da;
	}
	while (da > 360)
	{
		da = da - 360;
	}
	// 
	return da;
}
Код AS3:
da % 360
А пробовали убрать анимацию разворотов и сразу жестко менять угол? Будет баг?

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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