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

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

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

Регистрация: Jul 2007
Сообщений: 59
Thumbs up Примитивный АI, преследование главного героя

Есть главный герой, есть монстры (вид сверху), нужно сделать так что бы монстры постепенно шли к главному герою и были к нему всегда лицом. Вообщем вот как я это сделал:
Код на фрейме
Код:
//Вызываем функцию создания монстров.
this.onEnterFrame = function() {
	bot_create();
};
//Функция создает 20 монстров помещая их на карту в случайном месте.
var j = 0;
function bot_create() {
	for (j; j<20; j++) {
		num++;
		name = "bot"+num;
		this.attachMovie("bot", name, num);
		_root[name]._x = 1280*Math.random();
		_root[name]._y = 960*Math.random();
	}
}
Код в клипе монстра, во фрейме Move
Код:
stop();
this.onEnterFrame = function() {
//Смотрим как далеко монстр от героя
	if (Math.sqrt(Math.pow(this._x-_root.hero._x, 2)+Math.pow(this._y-_root.hero._y, 2))<50) {
//При приблежении монстра переходим на фрейм Attack
		this.gotoAndPlay("attack");
	} else {
//Если монстр далеко от героя
		this.gotoAndStop("move");
		bot_speed = 2;
//Разворачиваем монстра лицом к герою
		ang = Math.atan2(this._y-_root.hero._y,this._x-_root.hero._x)*180/Math.PI;
		this._rotation = ang;
//Заставляем его двигаться в нужном направлении
		this.xmov = bot_speed*Math.cos(ang);
		this.ymov = bot_speed*Math.sin(ang);
		this._x += this.xmov;
		this._y += this.ymov;
	}
};
Код в клипе монстра, во фрейме Attack
Код:
stop();
this.onEnterFrame = function() {
//Смотрим как далеко монстр от героя
	if (Math.sqrt(Math.pow(this._x-_root.hero._x, 2)+Math.pow(this._y-_root.hero._y, 2))>50) {
//Если далеко то переходим на движение
		this.gotoAndPlay("move");
	} else {
//Если близко то все время лицом к герою и отнимаем здоровье
		ang = Math.atan2(this._y-_root.hero._y, this._x-_root.hero._x)*180/Math.PI;
		this._rotation = ang;
		hero_health-=1
	}
};
Проблемы вот в чем:
1) Когда герой стоит на месте то монстры нормально двигаются к нему, когда герой начинает двигаться то монстры творят что-то странное, или начинают ходить кругами или дрыгаться в разных направлениях.
2) Если поставить высокую скорость монстрам то при прриближении к герою они дрыгаются, но ооканчательно (до атакующей позиции), приблизиться не могут
3) Если кол-во монстров на экране приблежается к 20 то игра начинает тормазить, при 100 монстрах пришлось жать CTRL+ALT+DEL
Вообщем что я не так сделал и как это исправить.

Старый 20.08.2007, 19:30
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 2  
Ответить с цитированием
Mr. Fixit
Banned

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
а покажи сам примерчик..

Старый 21.08.2007, 21:36
_Nickromant_ вне форума Посмотреть профиль Отправить личное сообщение для _Nickromant_ Найти все сообщения от _Nickromant_
  № 3  
Ответить с цитированием
_Nickromant_
 
Аватар для _Nickromant_

Регистрация: Jul 2007
Сообщений: 59
Полный исходник весит боллее 10мб, так что я вырезал весь код о котором речи не идет и заменил картинки схематичными кружечками. Вот


Последний раз редактировалось _Nickromant_; 21.08.2007 в 21:58.
Старый 21.08.2007, 21:43
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
"Вложение не указана(о) или не существует. Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией"

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

Регистрация: Jul 2007
Сообщений: 59
Поправил, но через интерфейс форума выложить не получилось, так что качайте от сюда

Старый 21.08.2007, 22:16
Eric Gurt вне форума Посмотреть профиль Отправить личное сообщение для Eric Gurt Посетить домашнюю страницу Eric Gurt Найти все сообщения от Eric Gurt
  № 6  
Ответить с цитированием
Eric Gurt
 
Аватар для Eric Gurt

Регистрация: Oct 2006
Сообщений: 395
пользуйся

setInterval(anim, 10);

и

function anim()
{
}

это ускорит выполнение + храни весь код в одном кадре не муви клипа.

в блоке №2 у тебя анг в градусах, а sin и cos работают с радианами. Для удобства работай с радианами, а в градусы переводи только для поворота самого мувика.
__________________
.:Make it better:.
www.gevanni.com

Старый 22.08.2007, 07:37
_Nickromant_ вне форума Посмотреть профиль Отправить личное сообщение для _Nickromant_ Найти все сообщения от _Nickromant_
  № 7  
Ответить с цитированием
_Nickromant_
 
Аватар для _Nickromant_

Регистрация: Jul 2007
Сообщений: 59
Цитата:
Сообщение от Eric Gurt
в блоке №2 у тебя анг в градусах, а sin и cos работают с радианами. Для удобства работай с радианами, а в градусы переводи только для поворота самого мувика.
Сделал так дергаться перестало, но когда монстров на экране за 20 уже тормозит, а мне хотелось бы что-бы кол-во монстров достигало хотя бы 100.
Попробывал
Цитата:
Сообщение от Mr. Fixit
округляй числа..
и
Цитата:
Сообщение от Eric Gurt
пользуйся

setInterval(anim, 10);

и

function anim()
{
}

это ускорит выполнение + храни весь код в одном кадре не муви клипа.
не помогло

Старый 21.08.2007, 23:59
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 8  
Ответить с цитированием
Mr. Fixit
Banned

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
ааа помню у меня тоже дергалось...
вроде, если не подводит память, округляй числа..

Старый 22.08.2007, 09:20
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
но когда монстров на экране за 20 уже тормозит, а мне хотелось бы что-бы кол-во монстров достигало хотя бы 100.
Зачем столько монстров одновременно?
PS
Если ты их партиями собираешься выпускать, то тогда никаких проблем с количеством быть не должно.

Старый 22.08.2007, 09:31
_Nickromant_ вне форума Посмотреть профиль Отправить личное сообщение для _Nickromant_ Найти все сообщения от _Nickromant_
  № 10  
Ответить с цитированием
_Nickromant_
 
Аватар для _Nickromant_

Регистрация: Jul 2007
Сообщений: 59
Цитата:
Сообщение от udaaff
Зачем столько монстров одновременно?
должно.
Неважно, главный вопрос как это сделать, ведь как-то можно это точно, в том же Crimsonland'е или АленШуторе кол-во монстров на экране к 1000 приблежается и не чего не тормозит

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

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

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


 


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


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