создан репозиторий на github.com
https://github.com/lastuniverse/world_engine.git
Изменения внесенные в основной репозиторий можно увидеть по адресу http://lastuniverse.narod.ru/app/git.test.html
шпаргалка по работе с GIT которая мне помогла http://eax.me/git-commands/
в этом видео рассказываю общие принципы работы генераторов

А покороче никак нельзя? Смотреть 40 минут унылости, это не каждый сможет.
Извините - но как покороче рассказать об устройстве ядерного реактора тем кому с этим реактором работать придется? Мне ведь каждому из участников нужно будет объяснить основы, а меня 3-е суток не будет (буду в поезде) поэтому я и сделал эту шпаргалку так сказать.
Александр Сергеевич , не хотите - не смотрите - я же вас не заставляю.
kapa6ac
Можно например заранее сделать текст рассказа, а не импровизировать в прямом эфире.
Ну это ваше дело конечно.
Вы правы, так и буду поступать в дальнейшем.
Прошу тех кто осилил просмотр, высказать свои предложения по оптимизации, если таковые имеются.
добавленно 1013.02.08
Я так понимаю что никаких мыслей как еще оптимизировать генератор карты высот ни у кого не возникло:/
создан новый репозиторий на GitHub: https://github.com/lastuniverse/lastuniverse.github.com.git
Все кто пожелал или пожелает внести свой вклад могут это сделать подключившись к репозиторию
Для работы нужно создать свою ветвь(branch) в репозитории, назвать ветвь своим ником и все работы производить в своей ветви
Для просмотра результатов своей работы - достаточно открыть в браузере index.html из локальной копии своей ветви.
Для внесения изменений в основную ветвь (master) проекта - обращаемся ко мне.
Наработки внесенные в основную ветвь будут доступны по адресу: http://lastuniverse.github.com/
Осуществил успешный переезд от тещи домой:)
приступаю к дальнейшей работе над проектом.
План работ:
1. Отрисовка игрового окна:
- переход на рисование в canvas [выполнено, исходники в ветви kapa6ac.canvas на гитхабе. Увеличило скорость отрисовки 2-х слоев с 15 до 70 кадров в секунду для разрешения 1920х1080]
- создание механизмов предварительной буферизации расчетных значений генераторов для точек попадающих в область видимости и смежных [выполняется мной]
- создание механизмов буферизации отрисованной области (нижний слой - грунт, вода) чтобы избежать излишних затрат на перерисовывание всех тайлов заново в каждом кадре [выполняется мной]
- реализация механизма отображения высоты тайлов относительно друг друга [выполняется мной]
- реализация отображения второго слоя (деревья, украшательства, а в дальнейшем и персонажи, мобы, постройки) [выполняется мной]
2. работа с графикой (3D моделирование):
- создание недостающих тайлов для отрисовки различных типов земной поверхности [выполняется мной]
- создание спрайтов игроков [требуется в первую очередь]
- создание спрайтов персонажей [требуется]
- создание спрайтов мобов [требуется]
- создание спрайтов растительности [выполняется мной, нужен помощник]
- создание спрайтов построек, дорог и украшательств [выполняется мной, нужен помощник]
3. написание недостающих генераторов:
- генератор давления [разрабатывается программистом с gamedev.ru]
- генератор силы и направления ветра
- генератор распределения климатических зон [требуется]
- генератор распределения типов растительности внутри климатических зон [требуется]
- генератор осадков (скорее всего рандом) [требуется]
- генератор рек озер [требуется срочно, сложная но технически интересная задача]
- генератор городов, поселений, деревень (в которых живут мобы и квестовые персонажи) [требуется]
4. Работа над интерфейсом
Пример устройства генератора давления:
Большинство остальных генераторов устроенны примерно также.
Интерфейс
игровая область:
1. это DIV занимающий всю видимую область
2. при изменении размера окна браузера также должен изменять свой размер (пропорционально если был установлен режим отображения не на всю видимую область)
3. имеет API включающий в себя:
- функцию изменения размера
- функцию задающую его положение (один из параметров может указывать к какой грани или углу прилипать)
- функцию возвращающую ссылку на DIV
- возможность указывать дополнительные обработчики при вызове вышеописанных функций
панели:
1. это DIV занимающий произвольное положение
2. при изменении размера окна браузера должна оставаться у того края экрана и в той-же позиции к которой была привязана
3. Должна иметь кнопку для сворачивания и обратного разворачивания
4. Иметь возможность программно установить флаг который позволит перемещать панель мышкой, при перемещении панель автоматом привязывается к ближайшему краю, к координате на этом крае в которую ее переместили
5. должна быть возможность раскрашивать панели индивидуально (независимо друг от друга):
- способ задать фоновые картинки для углов, граней и центра (желательно функция в составе API принимающая как параметр ассоциативный массив с указанием ссылок на нужные картинки и самостоятельно вставляющая их в див)
6. имеет API включающий в себя:
- функцию создания и инициализации новой панели
- функцию изменения размера
- функцию задающую ее положение (один из параметров может указывать к какой грани или углу привязана, второй расстояние от угла на котором привязана панель, если величина положительная - то от верхнего или левого края, если отрицательная то от нижнего или правого)
- функцию сворачивающую и разворачивающую панель (при сворачивании панель уплывает за край к которому привязана)
- функцию возвращающую ссылку на элемент панели в который можно размещать контент
- возможность указывать общую прозрачность и другие атрибуты стилей для панели (и выборочно для ее содержимого)
- возможность указывать дополнительные обработчики при вызове вышеописанных функций
окна:
1. это DIV занимающий произвольное положение
2. поведение при изменении размера окна браузера неясно :)
3. Должны иметь кнопку для сворачивания и обратного разворачивания в специальный док (док полностью подходит под описание панели)
4. Возможно окна должны иметь некие элементы управления (разберемся в процессе)
5. должна быть возможность раскрашивать окна индивидуально (независимо друг от друга):
- способ задать фоновые картинки для углов, граней и центра (желательно функция в составе API принимающая как параметр ассоциативный массив с указанием ссылок на нужные картинки и самостоятельно вставляющая их в див)
6. имеет API включающий в себя:
- функцию создания и инициализации нового окна
- функцию изменения размера
- функцию задающую положение
- функцию сворачивающую и разворачивающую окно в док
- функцию возвращающую ссылку на элемент окна в который можно размещать контент
- возможность указывать общую прозрачность и другие атрибуты стилей для окна (и выборочно для его содержимого)
- возможность указывать дополнительные обработчики при вызове вышеописанных функций
общее для игровой области и панели и окон
1. они должны иметь возможность устанавливать на них обработчики нажатия кнопок мыши, при вызове такого обработчика в него должны передаваться данные о положении мыши относительно левого верхнего угла элемента для которого вызван обработчик, также должен передаваться код нажатой кнопки мыши.
2. подсистема GUI должна иметь один глобальный обработчик событий нажатий кнопок на клавиатуре.
3. функцию инициализации системы GUI
4. Не должны использоваться тяжелые библиотеки для обеспечения нужного функционала.
PS: все из вышеизложенного можно обсудить, оспорить и предложить свой вариант.
возможно я что то не учел. Если есть дельные мысли - высказывайте их
ссылку на гит в первый пост бы, а то затеряется.
подсказки\пожелания:
1)array.length это предрасчитанная длинна, расчитывается при изменении размера. при запросе просто отдается и никакого оверхеда.
2)побитовое смешение можеш убрать, оптимизатор сам справится
3) переменные никогда не называй так если не хочеш работать один:
var sd var sw var sh var csx var csy var obj_i
4) тайпкаст к инту быстрее чем someVarible - 0 или +someValue(стоит аккуратно юзать) не бывает, всякие parseInt\конструктор Number сливают чуть ли не в 5 раз.
4.1) переменные обьявленные как число var a = 1; те без кавычек, кастить к инту не нужно
5) одномерный мерый массив длинной х*y быстрее чем двухмерный[x][y]
6) у js переменные можно обьявлять 1 раз и код
if (a == 1){
var b = 10;
} else {
b = 15
}в "движке" js будет приведен к такому виду:
//начало функции
var a,b;
//начало твоего кода
if (a == 1){
b = 10;
} else {
b = 15
}это относится и к переменным итераторов для фора, она также окажеться в начале функции.
6.1) следовательно область видимости у всех переменных на всю функцию и не имеет значения где они у тебя обьявлены.
7) точку с запятой ";" лучше всетаки ставить везде где можно не ставить, потом не будеш проставлять их когда обфусцировать и сжимать код будеш:), хотя я не часто у тебя это видел)
8) такие конструкции:
if( value ){
a.checked = 'on';
}else{
a.checked = '';
} принято писать так:
a.checked = value?'on':'';
9) отформатированный код читать проще и приятнее - включи автоформатирование кода в своей среде разработки
Замечания приняты, как раз на том этапе когда уже пора систематизировать код и приводить его к читабельному виду. В субботу займусь этим вопросом.
выставил :)
Отписался на хабре создателю mdlvis-а, если он согласится помочь - это будет бомба:)
kapa6ac
Не являюсь программистом, но видео посмотрел с удовольствием. Очень интересно. =)
> Возможность использовать огромное разнообразие моделей из варкрафта
Как я понимаю, требования к моделям, как в самом WarCraft? 2-3К треугольников, текстура максимум 512х512? Советую, добавить пример необходимой графики в первый пост. Это отобьет желание у некоторых страждущих.
пока нет возможности определить максимально допустимое количество полигонов и объем текстуры, это можно будет определить экспериментальным путем. Также mdlvis умел работать и с моделями из WoW, которые по качеству несколько превосходят модели из крафта. Мне очень хочется попробовать и те и другие:)
Вот, в WoW по качеству детализации и размеру текстур особенно сильно отличаются те, что в последних аддонах были добавлены.
Я вот еще что не понял. =) Это генератор мира и получается к нему в теории потом можно любую игру прикрутить? Ну, в смысле, наверное, он же не просто так делается. А с претензией создать игровой проект. Вот только какой? Такие убер-возможности могут и в симуляторе бога пригодиться, и вообще украсить, как стратегию, так и рпг.
Тема в архиве.
Тема закрыта.