Алгоритмы генерации мира и немного прочее..
| |
vasua99 | Дата: Понедельник, 19 Ноября 2012, 20:08 | Сообщение # 1 |
GNU follower
Сейчас нет на сайте
| Привет всем!
У меня такая проблема - наиргравшись в террарию целый день, решил попробовать написать жалкое ее подобие.. В качестве языка выбрал C# в связке c XNA(т.к учу C# сейчас)
Но возникла огромная проблема - на генерацию каждого типа блока уходит от 20 до 80 строк кода + получается это криво.Если еще и не криво делать, то уйдет и под 70-600 строк кода на блок.
Возникает у меня такой вопрос - как с этим справляются подобные игры. Интересуют алгоритмы, исходники(на любых языках(Pascal,C++,C#,Java и т.д), куски кода
2) Как в подобных играх делают, что при уничтожении блока, блоки которые были рядом с ним как бы сглаживаются(текстуры).
Вот мой быдлокод(см.функцию GenerateMap())
Visual C# 2010 Project(XNA 4.0, .NET 4.0)
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Anifest | Дата: Понедельник, 19 Ноября 2012, 20:21 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| vasua99, речь о 3D игре? Если о 2D, то делать там все очень просто
Почему люди, которые не любят правду, считают ее оффтопом???
Сообщение отредактировал Anifest - Понедельник, 19 Ноября 2012, 20:21 |
|
| |
vasua99 | Дата: Понедельник, 19 Ноября 2012, 20:23 | Сообщение # 3 |
GNU follower
Сейчас нет на сайте
| подскажите статьи и что есть вообще - очень надо..
P.S 2D
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Undead | Дата: Понедельник, 19 Ноября 2012, 20:52 | Сообщение # 4 |
NeoAxis User
Сейчас нет на сайте
| vasua99, Исходник улыбнул. Даже елементарных знаний о XNA не имеешь. Класс Point есть в XNA, но для указания координат лучше вектор использовать. А генерация много кода занимает из-за того, что ты даже класс спрайта не написал. По идее генерация подобная твоей занимает всего 30-50 строк для всей карты. Тут общатся неудобно, если хочеш, то можно в скайпе. Пиши в личку.
Вcем зла.
|
|
| |
Anifest | Дата: Понедельник, 19 Ноября 2012, 20:58 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Quote (vasua99) подскажите статьи и что есть вообще - очень надо..
Я не работаю в той среде, в которой работаете Вы. Я знаю принцип работы. Работаю в другой среде
Почему люди, которые не любят правду, считают ее оффтопом???
|
|
| |
First | Дата: Понедельник, 19 Ноября 2012, 21:16 | Сообщение # 6 |
Уолтер Брайт
Сейчас нет на сайте
| vasua99, алгоритм такой задачи просто (если игра в 2D). Пишу игры на VB и мой код тебе будет не понятен, так что пример кода не приведу.
Попробуй для начала создать поверхность мира. То есть траву и ровную поверхность, которая будет одинаковая по графике с обоих сторон, когда при передвижении игрока ее нужно зациклить, а не рисовать большой задний фон, который жрет много ресурсов.
Далее пробуй на верх ставить объекты (деревья, камни), если они должны присутствовать, как препятствие. Если нет, то рисую как задний план.
Для красоты можешь рисовать передний план, что бы двигался (тоже цикл, но с большим интервалом) при передвижении.
Далее создавай главного героя и системы передвижения (контроллер)
Ну а там делай уже сам смысл игры (противники по том же принципу, головоломки). Если нужно, что бы в конце уровня был какой-либо объект (яма или большое дерево), которое связано с окончанием уровня, то снимай цикл заднего фона и вставляй следующий кадр, где уже присутствует объект.
Я привел пример не именно Террариума. Ну это как мой пример. В любом случае я пытался тебе помог. Далее решать тебе. Удачи
Сообщение отредактировал First - Понедельник, 19 Ноября 2012, 21:17 |
|
| |
x-and1988 | Дата: Понедельник, 19 Ноября 2012, 22:06 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Генерируем высоты, вычисляем уровень моря - у меня это среднее высота по всей карте, после применяем к участкам карты биомы, после генерируем пустоты, ресурсы, и прочее. после - профит.
Изучаю Java My new project My old project
|
|
| |
Undead | Дата: Понедельник, 19 Ноября 2012, 23:18 | Сообщение # 8 |
NeoAxis User
Сейчас нет на сайте
| vasua99, Сгенерированый тобою мир не будет работать. Ты просто ресеушь текстуру в разных участках карты, нодо бы игровые обьекты расставлять.
Вcем зла.
Сообщение отредактировал Undead - Понедельник, 19 Ноября 2012, 23:58 |
|
| |
vasua99 | Дата: Вторник, 20 Ноября 2012, 13:28 | Сообщение # 9 |
GNU follower
Сейчас нет на сайте
| Не совсем понял - вроде как каждый блок(тайл) имеет свою структуру, которая зависить от типа блока, единственное исключение - сундуки, верстаки, двери, персы и т.д..
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Undead | Дата: Вторник, 20 Ноября 2012, 18:43 | Сообщение # 10 |
NeoAxis User
Сейчас нет на сайте
| vasua99, Я смотрел исходник - ты представляешь себе, что такое ООП?
Вcем зла.
|
|
| |
vasua99 | Дата: Вторник, 20 Ноября 2012, 20:06 | Сообщение # 11 |
GNU follower
Сейчас нет на сайте
| В общих чертах да - это идеология, которая гласит, что есть классы, которые могут обладать такими свойствами как инкапсуляция, наследование и полиморфизм, а также по шаблону которых можно создать обьекты, которые могут взаимодействовать между собой(посредством интерфейса)
Переделал немного - теперь мир стал покрасивее)), а также потребление памяти уменьшилось на 95%(проверенно при размере карты 4096x4096 тайлов).
http://rghost.ru/41697535.
Интересует пару вопросов:
1) Какой есть быстрый .NET рефлектор, который может сохранять декомпилированные классы по файлам(например: если в программе есть два класса Main и Graph, то сохранит в файлы Main.cs и Graph.cs соответственно)
2) Как посредством алгоритма midpoint displacement генерировать ландшафт: как я понял - все линии сохраняем в вектора(Vector2), а вот дальше...
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
|