• Как реализовать переходы между сгенерированными локациями(Unity 2D)?

    twobomb
    @twobomb
    Если берем майнкрафт или игры типа него, то для генерации игра использует seed(семя) обычное число от которого генерируются все последующие случайные числа, но эти случайные числа всегда в одинаковой последовательности что значит что мир будет выглядеть у всех одинаково, но стоит изменить хотя бы одну цифру последовательность генерации полностью меняется и мир совсем другой.
    По поводу сохранения, сохранять стоит только то что изменил игрок, поставил блок, разбил окно, выкинул оружие ну и естественно то что нужно, а мир сохранять не нужно он всегда будет одинаков если генерируется от одного числа.
    Ответ написан
    Комментировать
  • Как реализовать переходы между сгенерированными локациями(Unity 2D)?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если у вас мир не бесконечный, то один из возможных подходов, это на старте создания мира для каждой локации сгенерировать свой seed, далее во время игры, если вы в эту локацию каким-либо образом попадёте (пешком, телепортируетесь или ещё как), то другой генератор берёт сохранённый seed и создаёт эту локацию с нуля. Если вы потом как-то внесёте изменения в эту локацию, то вы эти изменения сохраняете отдельно, будь то выпавшие предметы или снесённые стенки. Если вы потом захотите вернуться в эту локацию, то вы берёте сохранённый seed, с нуля генерируете локацию и применяете изменения. Другой вариант - в качестве seed для локации брать её координаты, такая схема подойдёт и для бесконечного мира, но не в каждой игре можно очевидным образом найти координаты уровня.

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

    Вообще говоря, на тему генераторов и сидов могу посоветовать вот эту статью от разработчика Cogmind, там всё то же самое, что и я сказал, только подробнее.
    Ответ написан
    Комментировать
  • Как найти максимум от сумм с группировкой?

    @ReenExe
    SELECT `projects`.`id`, `projects`.`title`, SUM(`CHECK_MAX`.`max_online`)
    FROM `projects`
    INNER JOIN `servers` ON (`servers`.`id_project` = `projects`.`id`)
    INNER JOIN (
    	SELECT
    		`checks`.`id_server`,
    		`checks`.`date_check`,
    		MAX(`checks`.`online`) AS `max_online`
    	FROM `checks`
    	GROUP BY `checks`.`id_server`, `checks`.`date_check`
    ) AS `CHECK_MAX` ON (`CHECK_MAX`.`id_server` = `servers`.`id`)
    GROUP BY `projects`.`id`, `CHECK_MAX`.`date_check`;
    Ответ написан
    1 комментарий
  • Как реализовать постраничный вывод данных из БД (PHP, MySQL) с сортировкой?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Но если делать сортировку через ORDER BY ..., то получится что я отсортирую только строки, попадающие под условия лимита, а провести ее надо для всей таблицы и только после этого выводить постранично.
    Вы понимаете не правильно.
    Сначала происходит order by всех строк в результирующей выборке.
    Потом через limit определяется сколько и каких строк Вы получите от sql сервера.

    Запрос
    select id from table 
    order by id desc
    limit 10

    вернет 10 самых больших 10 id из всей таблицы

    Ну и мануал почитайте, там все описано в каком порядке применяется dev.mysql.com/doc/refman/5.7/en/select.html
    Ответ написан
    1 комментарий