Форум 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
Вообщем что я не так сделал и как это исправить.

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

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

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


 


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


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