Обсуждаем игру HugeSpace 2 на людуме и направление развития.
У кого-нибудь есть рабочий код чтобы рисовать текстурированные круги в love2D? Я так понял, надо использовать stencil, вот только не пойму как с ним работать. Вроде бы надо сначала рисовать круг в stencil function, а потом — текстуру. Но почему-то не работает.
Кто уже делал такое — помогите сделать такую функцию в игре на людум.
- 23 апреля 2017, 19:55
- 03
М-да.
Будешь опять приставать? Нечего сказать по теме - молчи, вместо того чтобы писать едкие комментарии.
Но что сложного в том чтобы нагуглить требуемое тебе решение? Чего непонятного? Приведи ссылку, разберём что непонятно.
Спасибо, самое то. Оказалось все не так просто:
1) Надо использовать отдельную картинку под каждую текстуру, а размер quad'а надо ставить больше размера изображения, а не наоборот. Я же пробовал разместить все текстурки в одном файле.
2) Координаты рисования кружочка и текстуры должны совпадать. При этом кружочек рисуется от центра, а картинка - от левого верхнего угла. Я же полагал что функция myStencilFunction будет считать координаты относительно координат картинки.
Короче, в пост-конкурсной версии сделаю текстурированные планеты.
Что с квадами не так?
Love архив
Это если круг меньше размера квада. А если больше, то квад надо повторять, как в тайлах:
А для этого размер квада должен быть больше размера картинки:
здесь 256 - размер квада, 32 - размер картинки.
Понял. Но ты же можешь нарезать файл с текстурами частями и уже эти части с повтором выводить? (пока нет возможности самому сделать)
Да, точно. Что-то я не догадался.
Правда это лишние drawcall'ы сожрет.
Думаешь, так критично? :)
После 200-300 вызовов уже да (пиксели звезд, планеты, метеориты) - на слабеньких ноутбуках начнет тормозить. Можно рисовать статичные объекты 1 раз в канвас и потом рисовать уже его. Но это в Windows-сборке. Последний раз когда пробовал сделать веб-сборку - канвасы в ней не работали.
Но я имел в виду нарезать файл при загрузке игры в объекты, которые потом использовать. То есть один раз за запуск игры.
Если уже речь про оптимизацию, то все круги можно рисовать в функции стенсила за один раз, а далее уже квады. Тогда стенсил будет вызываться один раз. (Это в голове, на деле может что не предусмотрел)
Нет, тогда может получиться что когда будешь рисовать квад, он наложится еще и на соседний кружочек. Надо рисовать кружочек, квад, кружочек, квад и т. д. Чтобы квад гарантированно рисовался только в один текущий кружочек.
Не зря столько лет делали инструментарий для создания игр. Такие-то технологии. Народ, делайте игры на Лаве.
Дальнейшие размышления. Если ты нарежешь при загрузке файл то тебе и квады не нужны будут.
UPD: Прочёл ещё раз твой коммент, увидел, что ты об этом писал.
Попробовал оптимизацию (предварительное рисование статичных объектов в канвас 1 раз и потом уже рисование только канваса).
До: 341 fps, ОЗУ: 50 Мб, ЦП: 11%
После: 506 fps, ОЗУ: 53 Мб, ЦП: 2%
За счет постоянного изменения координат объектов при рисовании без канваса наблюдается небольшая дрожь границ планет из-за округления координат. С вкл. канвасами такого нет, поскольку координаты рисования канвасов не меняются.
немножко текстурированные планеты
Я могу гордиться, что был на одном сайте с таким-то геймдевелопером.
Я всматривался сколько мог, но где текстуры, Карл?
Поэтому и немножко текстурированные. Если рисовать прям рельеф или атмосферу, то это уже от атмосферы/температуры зависит, такого пока в игре нет.
Взорвать планету!
еще немножко более текстурированные планеты и метеориты
А ты рисуешь круги из секторов или как? Или это просто квадрат с отрезанными углами?
Эээ, планеты? В Love2D круги - это полигоны с N-ым кол-вом граней. Дальше я их заливаю цветом или текстурой. Кружочки, к-е надо собирать, - не заливаю.
А текстура включает в себя углы, которые не попадают в круг, или нет?
Круг работает как маска для текстуры.
А, всего-то. Я думал, рисуешь квадрат, а оно его вплющивает в круг, чтоб не осталось за кадром ничего.
Вопрос к поигравшим в HugeSpace 2 - в какую сторону развивать игру? Просто летать и собирать кружочки быстро надоедает.
Не хотелось бы делать очередной исследователь планет с приземлением и добычей ресурсов. А что тогда?
Рогалик сделай.
Рогалик было бы неплохо, люблю когда партии короткие и хардкорные в рогаликах. Тут как раз напрашивается игра на 5-20 минут, некоторые игры по 5 минут могут затянуть на недели, как было со Спелунки или DesktopDungeons (во вторую игру играл несколько месяцев), в этих играх есть короткие партии, хардкор, и глобальные переменные, то есть некоторые достижения, которые открывают новые возможности, правда в спелунки глобальных переменных намного меньше, чем в DesktopDungeons, вот DesktopDungeons надолго меня затянула своими интересными ачивками, они не такие, какие прикручивают в онлайн игры (собери 10000 кубиков, проживи 10 лет в игре), там ачивка - это открытие локации или персонажа, когда осилишь очередной вызов, а не замучаешь себя гриндом и собирательством на месяцы. (например пройти такой то уровень, таким-то персонажем, и за ачивку не дадут просто значок в стиме, а откроются новые скрытые возможности и персонажи, то есть полновесный приз, а не просто текст на экране с картинкой). Как раз среди таких коротких и хардкорных игр, не встречал хорошего рогалика про космос.
Спеланки
Вот видишь, должен-недолжен, у тебя уже сразу и аудитория будет - Маковский с удовольствием сыграет как минимум! Делай давай рогалик. Можно с СБ посовещаться, как лучше сделать, чтоб избежать ошибок. А книги вумные "по геймдизайну" не читай, только время потеряешь. Только практика, только правда.
Пришла в голову мысль. Давать в каждой локации игроку квест на открытие карты соседней клетки галактики. Без карты туда попасть нельзя. Таких квестов в каждой галактике - 2 (если есть неоткрытые клетки), плюс один квест - дополнительный.
Выполнив квест, игрок может попасть в соседнюю галактику. Цель игры - долететь до середины вселенной за отведенное время. За дополн. квест можно получить деньги или апгрейд корабля.
Что думаете? Не слишком копипаст FTL? Может у кого-то есть более интересные варианты главной цели в игре.
Слишком копипаст FTL, закидают шапками.
Как насчёт главной цели - набрать 1,000,000 очков? В 90-х всегда прокатывало.
Меня это "набрать кучу очков" никогда не привлекало.
Ну, дело твоё.
Не всегда, в начале 90-х прокатывали пустые очки ради бессмысленнои таблицы Hi-Score, но как только появились альтернативы, игры, где очки что-то давали более ощутимое (ну там опыт, или это были деньги на которые можно было что-то купить), то стало интереснее и игры с просто очками ушли в прошлое, чтобы вернуться когда появится интернет, для фаломеров в играх типа Флаппи Бердс, но это уже другая история.
Ну не совсем, я имел в виду набрать абсолютный максимум очков. (правда он для этого должен существовать) Собрать всё, сделать все вещи. Типа как в квестах.
Людум официально закончился, так что выкладываю после-конкурсную версию. Поскольку v1.02 не выкладывал, это - v1.03.
Изменения
текстуры планет и метеоритов
космос 3x3 галактики, 3 станции заправки (одна - всегда в начальной локации)
еще 3 музыкальных трека
Добавлен режим активного уклонения - мы не можем ни с чем столкнуться пока держим "E", но быстрее тратим топливо
Перенес игру на Веб.
В игре почти ничего не поменялось - пока просто так можно приземляться на планеты (когда сталкиваемся с ними на маленькой скорости) и восполнять кислород на зеленых планетах.
опера, клавиши не работают
может фокус в окошко, где воспроизводися игра, не попал?