XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Обьясните пожайлуста как идет высчитывание того что тело достигло земли?
И как отлавают тут что юнита надо двигать вниз?(падение) тоесть что нету опоры?
Я вроде искал это в коде но ответа не нашел напишите или здесь или в личку=)
Старый 15.10.2009, 10:09
NCrashed

offline
Опыт: 13,553
Активность:
Windrunner, проверка на координату z == высоте полета юнита. Там еще корректировка есть в зависимости от изменения высоты ланда. При z < 0 вызывается функция удара об землю, которая кроме результирующих скоростей считает и силу реакции опоры по плоскости из ближайших точек
Старый 15.10.2009, 16:53
Just Fear
Loading --•••----
offline
Опыт: 2,062
Активность:
NCrashed, а как создавать допустим тело == граната и чтобы оно подчинялось всем законам (отскакивание, и т.д), а взрывы там урон и т.д. я сам сделаю
Старый 18.10.2009, 13:14
NCrashed

offline
Опыт: 13,553
Активность:
  1. Определить переменную Body
  2. Создать юнит == графическое отображение тела
  3. Создать телло на основе этого юнита
  4. Включить притяжение для данного тела
  5. Включить сухое трение
  6. Настроить коэффициент эластичности
  7. Задать начальную скорость
  8. Задать радиус тела
  1. Запустить тело
function My_function takes nothing returns nothing
	local unit u = CreateUnit()
	local Body b = CreateBody(u,x,y,z,mass)
	b.AddG()
	b.AddFriction(mu)
	b.Elastic(оптимально 0.7)
	b.Speed(vx,vy,vz) // это задает ВЕКТОР скорости
	b.Radius(r)
	b.Start()
endfunction
NCrashed добавил:
Потом отлавливай когда у тела скорость станет примерно равной 0, и взрывай. (для этого тело нужно сохранить ,например, в глобалку)
NCrashed добавил:
Или можно сохранить только юнита, а тело потом получить функцией FindBody(u)
Старый 18.10.2009, 13:46
Atomarer

offline
Опыт: 27
Активность:
Я сейчас пытаюсь запихать эту физику себе на карту, и мне не ясно как это сделать.

Открывайте файл "triggerstrings.txt", ищите первую шапку, копируйте к себе функции, до строки [TriggerCallStrings], ищите вторую шапку, снова копируйте к себе функции (не забыли что после строки [TriggerCallStrings]?), сохраняйте, перезагружайте JNGP.
Я не знаю как создать функцию, и где искать TriggerCallStrings
Я создал карту, скопировал FDL к себе, дальше распаковал ui, т.к. своих триггеров пока нет, то пропускаю следущий пункт, и натыкаюсь на то что мне сейчас непонятно.
Первый раз наработку на карту ставлю, и с jass'ом дело имею первый раз.
Старый 25.10.2009, 21:01
NCrashed

offline
Опыт: 13,553
Активность:
Первый раз наработку на карту ставлю, и с jass'ом дело имею первый раз.
Однако гуи функции не полностью заменяют джазз применение моей либы, возможны непредсказуемые баги, т.к. гуи интерфейс еще очень сырой.
Если у тебя нету своих триггов, то просто скопируй папку ui в папку вара, перезапусти редактор и функции от fdl появятся в редакторе триггеров в новой категории. (видны они будут в любой карте, но чтобы их юзать нужно скопировать триггер FDL к себе на карту)
NCrashed добавил:
Да, обязательно посмотри тригги-примеры в тест карте. Поможет на гуи правильно создавать тела.
Старый 25.10.2009, 22:19
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
называть функции/переменные рус именами это быдлокодинг
Старый 26.10.2009, 04:55
NCrashed

offline
Опыт: 13,553
Активность:
df_Hunter, Спасибо, но где ты это нашел? Уже давно все изменено.
Вышла новая версия: 6.5
  • Система переведена полностью на cJass. Работает с парсером версии не ниже 1.4. Сделано ради оптимизации кода и условной трансляции.
  • Собственно условная трансляция. Теперь можно выпилить ненужные куски системы (например грав. притяжение), отключив в заголовке библиотеки флаг соотв. блока.
  • На сайт попала ужасная версия с неисправно калибрацией тел при столкновении. Fixed.
  • Полностью переписан блок сухого трения, с учетом наклона плоскости и действия внешних сил.
  • Исправлен баг с столкновением тел очень больших радиусов. Для этого поправьте параметр MaxBodyRad на максимальный радиус, который вы собираетесь использовать.
Дальше основой движок системы не будет кардинально переписываться. На очереди стоит модуль с механическими колебаниями (мб и волн), потом в планах электричество (увы термодинамики не будет, она ест слишком много ресурсов).
Старый 27.10.2009, 00:32
NCrashed

offline
Опыт: 13,553
Активность:
Вышла новая версия 0.7:
  • Добавлены интерфейсы, которые позволяют создавать свои прототипы объектов со своими обработчиками событий.
  • Доведена до ума система обнаружения столкновения (теперь через квадратное уравнение).
  • Добавлены силы Кулона, продемонстрированные в тесте "Модель атома"
Теперь тело создается таким образом:
call CreateBody(objecttype.create(),x,y,z, Юнит, масса тела), где objecttype интерфейс вашего объекта, о них ниже (можно взять стандартный тип icerock) 
или
call CreateBodySimple(objecttype.create(),Юнит) 

Использование интерфейсов

1.Нужно создать прототип объекта и занести его в PDLTypes или в другое удобное место. Вот шаблон:
struct objecttype extends BodyData {
        real m = 0 // Масса
        real g = 0 // Ускорение свободного падения, проекция по оси z
        real mu = 0 // Коэффициент сухого трения
        real k = 0 // Коэффициент вязкого трения
        real r = 0 // Радиус тела, нужно для столкновений
        real q = 0 // Заряд
        real elastic = GetRandomReal(0.7,1) // Коеффициент упругости тела
        boolean AllowRest = true // Можно ли выключать тело, если оно не двигается


        void onCreate( Body b ) {
		//Ваши действия
        }
        void onGround( Body b ) {
		//...
        }        
        void onCollision( Body b, Body b2 ) {
        } 
        void onRest( Body b ) {
        }         
        void onSelect( Body b ) {
        }         
        void onDeselect( Body b ) {
        }       
        void onDeath( Body b ) {
        }
        void onExit ( Body b ) {
        }
        void onPointOrder( Body b, real TargetX, real TargetY ) {
        }
        void onTargetOrder( Body b, widget Target ) {
        }
        void onOrder( Body b ) {
        }
        void onStart( Body b ) {
        }  
}
Задание всех свойств необязательно, если их не объявить, то значения будут браться по стандарту. Но нужно обязательно описать все события (или оставить их пустыми).
Старый 19.12.2009, 00:48
YellowStar
poon
offline
Опыт: 15,144
Активность:
События не обязательны, если добавить при их создании такую запись.
method x takes void ret void defaults void

Но это для юзеров. Кстати система шикарная.
Старый 19.12.2009, 16:58
NCrashed

offline
Опыт: 13,553
Активность:
Новая версия 0.8:
  1. Custom вектор тяготения
Теперь функция SetCustomG(gx,gy,gz) требует три компоненты вектора гравитационного ускорения. Можно создавать интересные эффекты, вроде хождения по стенам и тп.
  1. Функции упрощенного создания черной дыры
Добавлены две функции:
//Создание черной дыры.
    void CreateDarkHole(Body dh, Body victim, real Force) 
// Добавление жертвы к черной дыре
    void AddVictDarkHole(Body dh, Body victim) 
  1. Теперь не надо объявлять все события для нового типа тел.
  2. Добавлены события столкновения с клиффом, декором, обычными юнитами, границей мира, раскол тела, сильное столкновение, скорость которого определяется в параметрах. Вот список всех событий:
        // Создание тела
        method onCreate takes Body b returns void defaults void
        // Касание земли, срабатывает все время пребывания на земле
        method onGround takes Body b returns void defaults void
        // Столкновение
        method onCollusion takes Body b, Body b2 returns void defaults void
        // Сильное столкновение, скорость сильного столкновения в параметрах
        method onForcedColl takes Body b, Body b2 returns void defaults void
        // Столкновение с декорацией, срабатывает все время пересечения тела и дестра
        method onDestrColl takes Body b, destructable destr returns void defaults void
        // Столкновение с юнитом, срабатывает все время пересечения тела и юнита
        method onUnitColl takes Body b, unit u returns void defaults void
        // Столкновение с краем карты
        method onWorldBound takes Body b returns void defaults void 
        // Тело раскололось, передает структуру с осколками
        method onCrack takes Body b, CrackedBody cb returns void defaults void
        // Тело ударилось о клифф
        method onTerrainCliff takes Body b returns void defaults void
        // Тело отправлено в стек спокойных тел
        method onRest takes Body b returns void defaults void
        // Тело выбрано
        method onSelect takes Body b returns void defaults void
        // Тело больше не выбрано
        method onDeselect takes Body b returns void defaults void
        // Смерть тела
        method onDeath takes Body b returns void defaults void
        // Выход и цикла обработки
        method onExit takes Body b returns void defaults void
        // Приказ точка
        method onPointOrder takes Body b, real TargetX, real TargetY returns void defaults void
        // Приказ цель
        method onTargetOrder takes Body b, widget target returns void defaults void
        // Приказ без цели
        method onOrder takes Body b returns void defaults void
        // Помещение в цикл обработки
        method onStart takes Body b returns void defaults void
Старый 22.12.2009, 22:22
XOR

offline
Опыт: 38,159
Активность:
Заценил новую версию. Давно надо было на сjass переводить)
Старый 22.12.2009, 22:30
NCrashed

offline
Опыт: 13,553
Активность:
Вышла новая версия 0.9:
Вы уж извините за 3й релиз новой версии за 2 дня. Так получилось, было время - делал, не было бы времени, то была бы 1 новая версия =)
  1. Объект пружина и новый тест "Пружина". Список функций и методов смотрите в 1 посту.
Вот примерная последовательность работы с пружиной:
I. Создаем с помощью
	myspring = Spring.Ini(Body a, Body b, real жетскость, real длина, real коэфф. затухания)
или
	myspring = Spring.IniBindedToPoint(Body a, real x,real y, real z, real жетскость, real длина, real коэфф. затухания)	
II. Если необходимо, задаем визуализацию
	myspring.SetVisible(флаг ,путь к модели с экранированными слешами, шаг через который будут создаваться эффекты)
III. После работы уничтожаем пружину:
	myspring.Destroy()
или
	DestroySpring(unit u1, unit u2)
или
	DestroyAnySpring(unit u1)
Для визуализации не советую использовать эффекты со звуками, появляется странная утечка. Кто знает как фиксить помогите. В остальном фантазия не ограничена =).
  1. События привязки пружиной и развязки
  2. Добавлен метод AddRandomSpeed для Body
Старый 23.12.2009, 15:53
inhuman89

offline
Опыт: 3,019
Активность:
Потестировал систему - как раз то что мне нужно. Но заметил что при выборе режима Раскол тел начинаются жуткие лаги, когда 30 тел на крте.
Старый 07.01.2010, 17:54
XOR

offline
Опыт: 38,159
Активность:
В системе таймер с периодичностью 0.025, что ты хочешь...
Старый 07.01.2010, 19:02
inhuman89

offline
Опыт: 3,019
Активность:
а тела взаимодействут только с такими же телами? а то я создаю тело и оно проваливается сквозь юниты и декор, или я что то не правильно понял?
Старый 08.01.2010, 02:51
XOR

offline
Опыт: 38,159
Активность:
Не правильно понял. Там был метод удара об дерево.
Старый 08.01.2010, 12:07
ManWhoKnows
just another wc3 modmaker
offline
Опыт: 915
Активность:
NCrashed Мужик, делаешь реальные вещи))). Ты мог бы добавить функции: установить\добавить скорость\ускорение телу по передаваемым функции значениям углов (в горизонтальной плоскости, в вертикальной). то есть телу даётся вектор скорости, выходящий из тела, под передаваемым углом. в функции три параметра -
1 уголА в x\y,
2 уголБ в плоскости перпендикулярной x\y и проведенной через вектор выходящий из тела в плос-ти x\y по уголА,
3 значение скорости
Старый 23.03.2010, 14:55
Shina
В поиске...
offline
Опыт: 356
Активность:
v5.5
где достать v5.5? С GUI?
Старый 24.04.2010, 21:24
ZeToX2007

offline
Опыт: 7,009
Активность:
NCrashed:
function My_function takes nothing returns nothing
local unit u = CreateUnit()
local Body b = CreateBody(u,x,y,z,mass)
b.AddG()
b.AddFriction(mu)
b.Elastic(оптимально 0.7)
b.Speed(vx,vy,vz) это задает ВЕКТОР скорости
b.Radius(r)
b.Start()
endfunction
Это что за синтаксис ?
Старый 29.04.2010, 02:30
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:02.