forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Clear Engine (Понятный движок) (http://forum.boolean.name/showthread.php?t=18702)

Mr_F_ 24.12.2013 12:38

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Я хочу что-бы волк шел потом шел и поворачивал, затем бил лапами и шел дальше, и так бесконечно.
Смена действий во времени - это уже геймплейная часть конкретной игры имхо, а не движка. Движок должен просто уметь проигрывать анимацию, типа
Код:

Animate (wolf, wolf_run)
Делать какие-то действия, ждать их завершения и делать следующие - это распространённая задача в играх и касается далеко на только анимаций.
Наблюдал реализацию этой фишки в скриптовых движках, что мне кажется довольно удобным.
Например, в первой Мафии такой скрипт выглядел бы так:
Код:

label 1
model_playanim 0, "wolf_walk", 1 // записывает время анимки в переменную 1
wait flt[1] // ждём окончания
model_playanim 0, "wolf_turn", 1
wait flt[1]
model_playanim 0, "wolf_paws", 1
wait flt[1]
goto 1

а в юнити с C# он бы мог выглядеть так:
Код:

IEnumerator loop()
{
 animation.CrossFade(wolf_walk);
 yield return new WaitForSeconds(animation["wolf_walk"].length);
 animation.CrossFade(wolf_turn);
 yield return new WaitForSeconds(animation["wolf_turn"].length);
 animation.CrossFade(wolf_paws);
 yield return new WaitForSeconds(animation["wolf_paws"].length);
}

В обоих вариантах всё куда понятнее. Плюс, оба варианта не ограничены движениями. Я могу поставить wait, чтобы NPC просто какое-то время занимался одной скриптовой деятельностью, интерактясь с миром, а потом переключался на другое дело, могу сделать часовую бомбу, миссию на время и много чего ещё на одном и том же функционале.
Специализированная версия waitов для анимаций в феноменально замороченной обёртке - не нужна.

---
алсо, как в мафе, так и в юнити, нет реальной асинхронности у этих штук (ибо не нужно), виртуальная машина просто умеет не обновлять скрипт, пока условие не выполнено, чекая его время от времени.

pozitiffcat 24.12.2013 17:28

Ответ: Clear Engine (Понятный движок)
 
Не понимаю что мешает запилить тоже самое у меня, добавь нужный моушен в рантайме, в котором ты будешь крутить свои действия и все, и не обязательно к модели их привязывать, ты хоть каждые 5 сек сцены переключай, возможности не ограничиваются.

moka 24.12.2013 17:53

Ответ: Clear Engine (Понятный движок)
 
Смотри на вещи глазами нуба разраба. Разве он читая эти: motionContext, motionDispatcher, registerMotionConstructor и куча всего поймёт о чём идёт речь вообще, до того как сможет это использовать?

Посмотри на современные технологии, все технологии, железо, софт, да даже тупо электроника и быт - выживает только самое простое, почему? Да потому что простые вещи, проще понять и приступить к их использованию.
Почему JavaScript самый популярный и используемый язык, который за несколько последних лет многократно увеличивает свою популярность?
Потому что он тупо прост.

Смотри на вещи нуба. Ты забываешь о том - что ты знаешь, другой и понятия не имеет. Следственно учитывай это когда пересматриваешь свои решения. Ты теряешься в мечтах о том как это "круто" и "что это может давть", но забываешь что нифига это не даст, т.к. и не дойдёт до этого.

Подойди к разработке с другой стороны - рассмотри решение с точки зрения пользователя: как бы разраб хотел бы реализовывать поставленную задачу, сам или с использованием твоего решения, что твоё решение даёт - правила и фреймворк, или хелперы и свобода выбора между решениями, какой синтаксис и метод выражения - отдельные файлы, методы в коде, а может туулза.
Продумай конечный результат сперва, затем поспи, проснись, и подумай снова, т.к. ты точно упустил тысячу других применений. И потом лишь приступай к разработке.

Топик у тебя: Clear - понятный. Значит ты ставишь на первое место пользователя. Любой проект для успешного разраба, имеет политику которая влияет на методы и идеи при разработке - если ставишь на первое место разраба, так учитывай это при разработке, начинай с простого продумывания интерфейса для самого разраба, а потом с имплементации.

ABTOMAT 24.12.2013 18:50

Ответ: Clear Engine (Понятный движок)
 
Насчёт ожидания завершения действия.
Вот как сделано это в jQuery:

foobar.animate(params, что-делать-после-завершения-анимации);

На мой взгляд, очень просто этим пользоваться.
Не знаю, правда, возможна ли подобная конструкция на С++

moka 24.12.2013 19:40

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от ABTOMAT (Сообщение 271847)
Насчёт ожидания завершения действия.
Вот как сделано это в jQuery:

foobar.animate(params, что-делать-после-завершения-анимации);

На мой взгляд, очень просто этим пользоваться.
Не знаю, правда, возможна ли подобная конструкция на С++

callback'и - это достояние event-driven парадигмы языка.
В C++ ты по сути можешь передать pointer на функцию (самый простой вариант?), если ещё lambda функции (подходят тут?) и anonymous функции (это по сути то что и есть в js).

Да и не jQuery а java-script, т.к. этот паттерн с каллбэками был задолго до jQuery.

Есть ещё promises паттерн, и использует chain'ы для выражения последовательности действий. Круто то что можно иметь динамично определяющуюся цепь анимаций:

PHP код:

player.animation
  
.do('walk')
  .
delay(1000)
  .do(
'run', { speed40 });

...
if (
player.hit) {
  var 
currentAnimation player.animation.current;

  
player.animation
    
.cancel()
    .do(
'hit')
    .
delay('500')
    .do(
curentAnimation);

  if (
curentAnimation == 'run') {
    
player.animation
      
.params({ speed20 })
      .
delay(1000)
      .
params({ speed40 })
  }


Как пример набросок, это паттерн chaining. Анимирует походку затем через секунду начинает бежать быстро. Где-то в цикле, если игрока ударили, отменяет текущую анимацию, затем анимирует что его ударили, затем через 500 мс возвращает предыдущую анимацию. Если она была "бег", то сперва поставит медленный бег, затем через секунду обратно на скорость 40.
Как пример.

Суть в том что есть цепь действий которой ты можешь манипулировать. Естественно такая цепь в данном примере имеет кучу недостатков, например в данном примере описан весь персонаж, и нету идеи отдельных частей анимации (морфинг и т.п.). Таким образом не решена проблема в том что когда персонаж в анимации бежит, анимация когда ударят не морфится.

Но удобство в том что ты можешь добавлять в цепочку разные стейты, отменять их, и манипулировать по разному. Также дать разрабу возможность расширять цепочку и влиять на стейт прямым образом.


Самый простой пример использования:
PHP код:

player.animation.do('run'); 

Установит анимацию на бег.
По сути разраб может юзать такой фреймворк как угодно, используя chaining или не используя и менеджить это сам.

Но главная суть в том что под этим фреймворком анимации должен быть прямой доступ к самой анимации - тупо менять кейфреймы и т.п.
Чтобы разраб мог бы вообще сам это манипулировать.
И даже с использованием данного фреймворка, дать разрабу возможность манипулировать напрямую нижним уровнем.


Имея примитивные методы работы с костями, группами костей, установки кадра кости/группы - по сути самое примитивное, что должен иметь изначально разраб. Это даст ему возможность уже анимировать. Далее не теряя возможности иметь такой низкий уровень, добавляй слоёв, но таким образом что нижний слой об этом и не догадывается.

И разраб уже сам выберет что ему по душе.

Samodelkin 24.12.2013 22:52

Ответ: Clear Engine (Понятный движок)
 
Какие тут могут быть обсуждения синтаксиса? Делать для нубов значит делать GUI и никакого программирования!

Цитата:

Почему JavaScript самый популярный и используемый язык, который за несколько последних лет многократно увеличивает свою популярность?
Самый популярный Си, JavaScript на 11 месте.

Nikich 25.12.2013 01:55

Ответ: Clear Engine (Понятный движок)
 
Java из-за android так высоко в рейтинге?

SBJoker 25.12.2013 02:30

Ответ: Clear Engine (Понятный движок)
 
Да сколько же вы будите путать Java и JavaScript уже?!!

moka 25.12.2013 04:17

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Samodelkin (Сообщение 271857)
Какие тут могут быть обсуждения синтаксиса? Делать для нубов значит делать GUI и никакого программирования!


Самый популярный Си, JavaScript на 11 месте.

Если ты прочитал внимательно методику составления рейтинга, то узнаешь о том что он базируется на количестве поисков и запросов, а также материалов в интернете по разным языкам. А не о их популярности вовсе. Если с одним языком у тебя куча проблем и нужно постоянно ссылаться в гугл, а с другим нет, это не знчит что первый более популярен.

В довесок к своим словам, я тебе покажу статистику на 2013, от github'а, котороые уж как никак, а имеют получше данные для статистики:
http://adambard.com/blog/top-github-...r-2013-so-far/

И ещё одна картинка, с количеством вопросов (stackoverflow) и та же таблица популярности на гитхабе (горизонтально)


Цитата:

Сообщение от Nikich (Сообщение 271861)
Java из-за android так высоко в рейтинге?

Java до сих пор считается "стабильным" Enterprise решением, бизнесов и индустрий, которые ужасно не поворотливы и не адаптируются к новым технологиям без боли. Также Android да, но больше думаю банки, финансы, гос учреждения, и ещё не мало "классических" индустрий.

Mr_F_ 25.12.2013 12:31

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Почему JavaScript самый популярный и используемый язык
как будто ты в вебе у тебя много вариантов)
это скорее говорит о том, что большинство кодеров - вебщики.

Samodelkin 25.12.2013 12:56

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

В довесок к своим словам, я тебе покажу статистику на 2013, от github'а, котороые уж как никак, а имеют получше данные для статистики:
http://adambard.com/blog/top-github-...r-2013-so-far/

Ну сообщи в TIOBE, что они не компетентны и покажи им как работают настоящие профи. Я просто взял ссыль на которую ссылаются в хабре.

Насчет github - там не адекват, потому что в том же googlecode противоположно другие, в каком-нибудь bitbucker третьи - они отражают только то что в одних сервисах удобней размещать проекты на одних языках, в других - на других.

upd:
Еще раз прочитал про TIOBE
Цитата:

The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings.
Написано же что базируется на продвинутых пользователях, курсах, разрабах. И для этого используются поисковики. Это не значит что поисковики используются для кол-ва запросов от нубов. Иначе сам рейтинг был бы весьма нубский.

Samodelkin 25.12.2013 18:46

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka
callback'и - это достояние event-driven парадигмы языка.
В C++ ты по сути можешь передать pointer на функцию (самый простой вариант?), если ещё lambda функции (подходят тут?) и anonymous функции (это по сути то что и есть в js).

Я думаю функторы подойдут.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot