Статьи о разработке
|
Krom | Дата: Среда, 17.07.2013, 15:47 | Сообщение # 1 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Вот уже месяца два по мере возможности пишем и выкладываем статьи о разработке КаМ Ремейка на английском. Английский выбран за свою популрность, на нем худо-будно изъясняется большинство игроков в КаМ.
Последняя статья о том как в игре устроен выбор юнитов курсором и какие намечаются улучшения: http://www.kamremake.com/devblog/unit-picking/
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Четверг, 18.07.2013, 03:22 | Сообщение # 2 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Прочитал про ваш юнит пикинг, поздравляю вас изобретением велосипеда интересного подобия стенсил буфера. Но вообще решение классное, собственно мне кажется оно самое эффективное, только непонятно почему в этом бэкбуфере нет зданий, они же ведь такие же кликабельные объекты.
А вот статья про "почему паскаль для ремейка", увы я думал там будут какие-то более сильные аргументы, все что там описано есть в том же с++, и множества, и многомерные массивы, и перечисления, и само собой полиморфизм, классы, наследование, абстрактные классы и прочее, НО кроме описаных в статье плюсов я добавлю еще один. В си нет Begin и End, которые размывают код и делают его визуально не структурированным, вместо них нормальные рамки блоков { }, нет кучи разного словоблудия типа procedure, function, then, do, to. Си лаконичен и по моему мнению более читабелен, хотя нечитабельный изврат и там встречается =) Ну и конечно огромный плюс это шаблоны в плюсах\Generics в шарпе, хотя вроде в новых делфях их уже сделали.
Добавлено (18.07.2013, 03:22) --------------------------------------------- Чем больше смотрю на юнит-пик, тем больше вопросов. Судя по схемке вы свапаете буферы, получается что в тот момент когда в ваш второй буфер должен рендерится новый нормальный кадр, у вас туда рендерится ваш велосипед? А как же основное его назначение для двойной буферизации? Непонятно зачем нужен свап, почему этот буфер не параллельный к бэк-буферу. Заполнялся бы он вместе с основным бэк-буфером и никогда бы не свапался, либо свапался но уже со своим бэк-буфером (типа двойная буферизация еще и "selection buffer'a")
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Четверг, 18.07.2013, 03:22 |
|
| |
|
Krom | Дата: Четверг, 18.07.2013, 09:35 | Сообщение # 3 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Jery, никто и не говорит что это наше изобретение )))) Color-picking известен уже с пару десятков лет.
В паскале есть все вышеперечисленное и при этом гораздо меньше возможностей выстрелить себе в ногу (перегрузка операторов, неопределенное поведение, например). Хотя с новыми версиями Делфы и там это появляется. Begin/end и прочие, это все дело привычки. Вцелом Делфа более текстовая, а С++ больше на значки опирается. Кому как удобнее.
Не понимаю, как тут страдает двойная буферизация? Мы делаем с буфером что хотим и когда считаем что он готов для показа юзеру, свапим его. Дальше он становится фронт буфером, а мы имеем новый бык буфер с которым опять делаем что хотим. Нет необходимости плодить лишние буфера.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Четверг, 18.07.2013, 10:55 | Сообщение # 4 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Цитата (Krom) Не понимаю, как тут страдает двойная буферизация? Мы делаем с буфером что хотим и когда считаем что он готов для показа юзеру, свапим его. Дальше он становится фронт буфером, а мы имеем новый бык буфер с которым опять делаем что хотим. Нет необходимости плодить лишние буфера. Ну если я все правильно понимаю, то у вас в бэк-буфер сначало идет рендер "selection" картинки, но потом в один прекрасный момент туда идет рендер основной картинки. Дак вот если юзер кликнет мышью по экрану в тот момент, когда в вашем бэк буфере будет нормальная картинка, что будет?
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| |
|
Krom | Дата: Четверг, 18.07.2013, 13:58 | Сообщение # 5 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Jery, буфер заполняется синхронно, так что никаких "если одновременно" нет.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Четверг, 18.07.2013, 17:24 | Сообщение # 6 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Что значит "если одновременно". Сколько всего буферов 2 (фронт+бэк) либо 3(фронт+бэк+селекшн), в бэк буфер собирается картинка для следующего кадра, пока она собирается показывается фронт буфер и потом происходит смена. Дак вот ваша селекшен картинка это совсем не та картинка, которую видит игрок. А когда тогда собирается именна та, которую он должен видеть. Получается есть момент, когда в бэк буфере лежит картинка, которая через мгновение уйдет на экран и в этот момент мы получаем щелчок по объекту. Что должно происходить ведь селекшен картинки в данный момент нет? У вас щелчки мыши тоже синхронно обрабатываются и лежат в стеке пока их невытащат?
ЗЫ: я просто пытаюсь понять, потому что мне кажется что что-то не так.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
Сообщение отредактировал Jery - Четверг, 18.07.2013, 17:28 |
|
| |
|
Krom | Дата: Четверг, 18.07.2013, 17:46 | Сообщение # 7 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Отрисовка в бэк буфер идет синхронно (однопоточно), это значит что пока операция рисования не закончилась, все события стоят в очереди, будь то хоть 100 кликов. Как только кадр отрисовался (отрисовка для игрока, свап с фронтом, отрисовка селекшна) наступает очередь обработки событий из очереди.
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Четверг, 18.07.2013, 17:49 | Сообщение # 8 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Ну получается что события тоже синхронные теперь мне все понятно.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| |
|
Krom | Дата: Четверг, 01.08.2013, 17:53 | Сообщение # 9 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Отлично, если будут еще какие-нибудь вопросы - задавай )
Вторая часть статьи о выборе юнитов: http://www.kamremake.com/devblog/unit-picking-2/Добавлено (22.07.2013, 12:15) --------------------------------------------- Вторая часть истории основания проекта (опять на англ): http://www.kamremake.com/devblog/kam-remake-history-part-2-founding/ Добавлено (01.08.2013, 17:53) --------------------------------------------- Очередная статья на английском, в этот раз показывается и рассказывается как работает Undo/Redo: http://www.kamremake.com/devblog....onality
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Четверг, 01.08.2013, 19:17 | Сообщение # 10 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Банда четырех советовала использовать классы команд, а не состояний! =) Типа Command.Execute() и Command.Unexecute().
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| |
|
Krom | Дата: Суббота, 17.08.2013, 23:38 | Сообщение # 11 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Jery, это замечательно, и в статье этот момент упомянут, как и то, какие лишние сложности он несет. В данном случае выбор был сделан в пользу скорости разработки и простоты, при том, что откат полного состояния местности 256х256 практически не заметен.
Undo/Redo для других областей, где Execute/Unexecute был бы более оправданным (город, юниты, настройки ИИ и т.п.) пока не планируется, т.к. там цена ручного отката изменений гораздо ниже, чем на местности.Добавлено (17.08.2013, 23:38) --------------------------------------------- Очередная статья, но теперь с вопросами в конце: http://www.kamremake.com/devblog/adding-unicode-support/
Буду рад цслышать ваши соображения по теме
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|
Jery | Дата: Воскресенье, 18.08.2013, 17:42 | Сообщение # 12 |
Мечник
Группа: Модераторы
Сообщений: 568
Награды: 2
Репутация: 50
Статус: Offline
| Я бы просто в тупую перевел все в UTF16(виндовый юникод). В скриптах можно оставить анси, т.к. там если будет использовано что-то кроме латинского, то и карта будет крутиться среди тех людей кто тот язык понимает. В скриптах нет никакого толка от юникода. А какие у вас там еще сторонние либы, которые не переваривают юникод и используются прямо в игровой логике, а не один раз при загрузке например.
«Художник не тогда знает, что он достиг совершенства, когда нечего добавить, но когда нечего больше отнять». (Антуан де Сент-Экзюпери)
|
|
| |
|
Krom | Дата: Понедельник, 19.08.2013, 22:30 | Сообщение # 13 |
Воитель
Группа: Супер Модераторы
Сообщений: 2526
Награды: 25
Репутация: 153
Статус: Offline
| Jery, Пока примерно так и получается - почти все идет в UTF16. В ANSI остаются скрипты (паскаль скрипт не поддерживает юникод), имена игроков, пароли, названия карт, чтобы все игроки могла их понимать/вводить. Добавлено (19.08.2013, 22:30) --------------------------------------------- А вот ответ на комментарии о неэффективном undo/redo: http://www.kamremake.com/devblog....ineered
Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
|
|
| |
|