NeoAxis Engine, 3D проекты своими руками.
Вам нужно авторизоваться. Забыли пароль? Регистрация Сентябрь пн. 06 2010 г. в 18:11
:: Навигация
:: 10 файлов (скач.)
Герберт Шилдт - C# Учебный Курс [10]
Журнал о NeoAxis Engine 083-0.852 [9]
SharpDevelop 3.2 [7]
Руководство по работе с Logic Editor [4]
Журнал NeoAxis 0.57 [4]
Компьютерная графика, мультимедиа и игры на Visual C# 2005 [4]
Журнал о NeoAxis Engine 0.81 [3]
Оптический прицел + бег + система расхода энергии при беге для NeoAxis Engine 0.82 [3]
2 вида оружия - m16, m4 [2]
nMechanics Cars [2]
:: 10 файлов
Model Package vol.1 (Дорожная тематика) [9]
Заготовка AdvancdAI ( продвинутый интеллект ) [14]
Журнал о NeoAxis Engine 083-0.852 [133]
Нефтяная качалка [12]
Модель ножа [8]
Модель телевизора и радио. [2]
Модель стула. [3]
Бетонная плита [9]
Гараж [6]
Модель калитки и забора [11]
:: Статистика

:: Статистика

:: Помощь сайту.
Если вы хотите помочь сайту, его развитию или желаете новые статьи по NeoAxis Engine вы можете перечислить небольшую сумму на счет
41001268355787
Яндекс Деньги.

Заранее спасибо!
:: Статьи
:: NeoAxisEngine
:: 10 статей
Движущаяся/падающая платформа или лифт.
Делаем деньги.
Перенос управления на стрелки.
Видеоурок. Как сделать прозрачную текcтуру.
Подсчет количества фрагов.
Модификатор ткани
Модификаторы сглаживания
Вывод информации о вражеских юнитах на карте в NeoAxis Engine
Создаем эффекты: Blur в меню
Учимся менять камеры персонажа в NeoAxis Engine.
:: Рассылка



Отписаться
Статьи

Создание MapCurve

Автор: КоловратЪ
Добавлено: 2010-07-25 20:52:25

MapCurve ( англ. Кривая карты ) – отлично подходят для использования её, как визуального представления пути движения юнита. По сути это набор соединенных точек ( MapCurvePoint ) в одну линию. Давайте посмотрим на свойства и методы данного класса.

Properties
Name Description
AutomaticTimeStep ( float ) Шаг автоматического увеличения «времени точки».
CurveType ( CurveTypes ) Тип кривой.
CurveTypes.UniformCubicSpline Равномерный, кубический.
CurveTypes Bezier Безье
Points Список точек. (редактируется в редакторе карт)
Methods
public Vec3 CalculateCurvePointByCoefficient( float coefficient ) Рассчитывает точку на кривой по коэффициенту.
public Vec3 CalculateCurvePointByTime( float time ) Рассчитывает точку на кривой по времени.
public Quat CalculateCurveRotationByCoefficient( float coefficient ) Рассчитывает поворот по коэффициенту.
public Quat CalculateCurveRotationByTime( float time ) Рассчитывает поворот по времени.
public MapCurvePoint CreatePoint( MapCurvePoint afterPoint ) Создаёт точку на кривой.
public float GetCurveMaxTime() Возвращает максимальное время кривой.
public Range GetCurveTimeRange() Возвращает временный интервал кривой.
protected virtual void OnUpdateCurve() Обновляет кривую.


Применениe кривой.
Самый простой способ применения кривой, это использовать лишь точки кривой, а именно их координаты.
Для этого в классе, в котором будем это использовать, нужно объявить поле хранящие индекс текущий точки, написать метод поверяющий дошли ли мы до точки или нет. Если дошли, то увеличиваем или сбрасываем индекс.

Пример кода –
[FieldSerialize]
MapCurve curve; // наша кривая
		
[FieldSerialize]
int index = 0; // индекс текущий точки
		
void TickIndex()
{
	Vec3 pos = curve.Points[index].Position;
	// находим растояние до точки
	float distance = ( this.Position - pos ).LengthFast();
			
	if ( distance <= 1 ) // если дошли то
		index++; // увечиваем индекс
if ( index > curve.Points.Count ) // если индекс больше чем количество // точек на кривой,
		index = 0; // сбрасываем в ноль...
			
}


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

Способ первый.

void TickMovement()
{
	// Высчитываем вектор изходя из нужной нам позиции
	Vec3 pos = curve.Points[index].Position;
	Vec2 vec = pos.ToVec2() - this.Position.ToVec2();
	float len = vec.NormalizeFast();             
	float lenToTarget = len;
	if( len > .3f )
	{
		if( lenToTarget < 1.5f ) vec *= lenToTarget;						
		else vec = Vec2.Zero;
	}
	if ( vec != Vec2.Zero ) 
	{
		// Поворачиваем юнита к нужной точки
		this.SetTurnToPosition( pos );
		// задаём вектор двиджения.
		this.SetForceMoveVector( vec );
	}
}


Теперь мы может в методе OnTick выполнить метод рассчитывающий индекс текущий точки, а потто метод передвижения.
Этот способ хорошо подходит когда нужно реализовать движение объекта внутри класса, не прибегая к использованию редактора логики и интеллекта.
Как реализовать движение 2м способом вы можете посмотреть в этой в этой теме форума.

Оглавление   |  На верх


Left
Right
Тема страницы:

NeoAxisEngine Создание MapCurve NeoAxis Engine, 3D проекты своими руками. Статьи 2010-09-06 18_11_50

Здесь вы можете найти необходимую вам информацию по программированию в C# и работе с NeoAxis Engine, а также научитесь работать с необходимыми прикладными программами...
:: Вход
Логин:

Пароль:


Запомнить меня
Вам нужно авторизоваться.
Забыли пароль?
Регистрация
п в с ч п с в
 
 
1
2
3
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     
<< Сентябрь 2010 >>
:: Опросы
Чего вы ждете от NeoAxis Engine 0.86?
Поддержка MacOS
Полный комплект документации
Поддержки Parallel-Split Shadow Maps (PSSM)
Лучшей реализации света
Перезагрузки карт без необходимости повторного создания сервера
Фоновая загрузка ресурсов в отдельном потоке.
Улучшенной поддержки сети.
Оптимизации всего NeoAxis Engine
Редактор дорог.
Много чего!

Результаты Архив

:: 5 случайных новостей
20 самых лучших студий по созданию игр.
Билл Гейтс пообещал новую Windows уже в 2009 году
Wolfenstein 3D отметил 16-летие
Луна заставила Землю вращаться в другую сторону
За первую неделю продаж GTA IV разошлась по миру тиражом в 6 млн копий на сумму 500 млн долларов
:: IP

Узнай свой IP адрес


:: best-hoster.ru
Кнопка Gif

:: Рамблер

Rambler's Top100


Страница сгенерирована за 0.07 сек..