Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Натрикс | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 3
На страницу: 1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «Натрикс»
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Это конечно не игра мечты, и не про космос, но всё же. Несколько месяцев назад мы нашли (как мы думали) интересный игромех и решили собрать на его основе игру. Это некая комбинация головоломки/три в ряд и чего-то ещё казуального.

Сегодня она вышла на iOS: ссылка на AppStore.
Сейчас доступно только на iOS.
И на Android: ссылка

Хотелось бы у знающих или разбирающихся пилотов получить отзывы, чего можно хорошего тут сделать или на предмет каких-либо изменений для играбельности, улучшений интерфейса, и др. К сожалению, это проект без бюджета, а также в штате отсутствуют художники/музыканты/маркетологи, откуда состояние некоторых вещей естественно. Но это не говорит о том, что что-то непоправимо или неулучшаемо.

Графику я рисовал через методологию "Visio Driven Development" (; , звуки же по большей части подобраны с freesound.org. Хотя может что-то еще есть из sfxr. По маркетированию сделал пост на 4pda, но хотелось бы чего-то ещё.

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

А Натрикс (он же Natrix) - это уж, он же ужик, забытое в игровой индустрии животное (;
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (19:03 06-09-2021), всего редактировалось 2 раз(а)
    Добавлено: 22:09 28-06-2021   
Zachesa
 151 EGP


Рейтинг канала: 4(95)
Репутация: 13
Сообщения: 1415
Откуда: Хабаровск
Зарегистрирован: 12.11.2007
Если будет на Андроид, то можно посмотреть...
_________________
Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
    Добавлено: 16:28 26-07-2021   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Пока что нет, но вероятно через пару недель-месяц сделаем.

За прошедшее время несколько подправили интерфейс, добавили музыку, поработали над анимациями, .. Можно сказать по мелочи (;
Посмотрели на аналитику, стало понятней что делать дальше. Все уровни ещё никто не прошёл, а до этого момента создавать новые нет смысла. Сейчас скорее будет больше ориентация на опыт игрока — повышение играбельности.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 23:05 29-07-2021   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
После пары недель сражений с Андроидом (для меня выпуск в google play был в первый раз) Натрикс опубликовался: https://play.google.com/store/apps/details?id=com.vir.natrix

Попутно обновили на iOS.

В прошедший месяц из существенного добавили задания (квесты), также было пару улучшений анимации и исправления пары ошибок интерфейса.

Фронт задач за прошедший месяц переосмыслился и сейчас выглядит по-другому. Первое, хотелось бы сделать графически передизайнить. Второе, заняться вопросом ощущения прогресса, сделать чтобы оно было и было более выражено. Третье, ощущение присутствия других игроков.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 19:02 06-09-2021   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
За прошедшие месяцы получилось помедитировать над дизайном и наполнением, а также со способами реализации всего этого.

За это время двинулась несколько мысль генерации графических элементов.

Сейчас вырисовывается набор инструментов по случайной генерации, с помощью применения которых можно получать интересные результаты.

Выделилось три слоя обработки:
1. Инструменты по формированию исходного набора (генераторы с нуля, фабрики - которые паттерн factory).
2. Операции над различными наборами.
3. Развертывание из полученных наборов различных элементов (создаём уже элементы сцены).

Если заходить издалека и по-простому, то применение такого подхода можно показать так.

Первый самой простой пример - генерируем по вектору набор элементов и разворачиваем на сцене (случайности тут никакой). Прикладной код выглядит сейчас так:

Код:
var set = Liner.GenerateLine(new Vector2(-5, 1), new Vector2(0, 3), 0.4f);
var objects = Simple2DDeployer.Deploy(set, simpleSquareScriptPrefab, GetComponent<Transform>());

foreach (var o in objects)
{
        var script = o.GetComponent<SimpleSquareScript>();
        script.SetUp(15, Color.yellow);
}

Сначала мы генерируем набор элементов от точки (-5,1) до (0,3), далее развёртываем это всё по префабу в каждой точке, и в конце обычно какая-то процедура инициализации, зависящая от контекста, здесь ставим размер и цвет.

Второй пример - при генерации набора элементов, выстроенных в ряд, задаём расстояние между ними посредством случайного генератора (между точками расстояние от 0.2 до 0.4):

Код:
var rndGenerator = new RangeRndGenerator(0.2f, 0.4f);
var set = Liner.GenerateLine(new Vector2(1, 1), new Vector2(6, 3), rndGenerator);
var objects = Simple2DDeployer.Deploy(set, simpleSquareScriptPrefab, GetComponent<Transform>());

   foreach (var o in objects)
   {
    var script = o.GetComponent<SimpleSquareScript>();
    script.SetUp(10, Color.green);
}


Третий пример - после генерации как во втором примере, используем обработчик - он добавляет случайное смещение перпендикулярно изначальному вектору:

Код:
var rndGenerator = new RangeRndGenerator(0.2f, 0.4f);
var set = Liner.GenerateLine(new Vector2(-5, -3), new Vector2(0, -1), rndGenerator);
set = Liner.AddRndDelta(set, 0.2f);
var objects = Simple2DDeployer.Deploy(set, simpleSquareScriptPrefab, GetComponent<Transform>());

   foreach (var o in objects)
   {
    var script = o.GetComponent<SimpleSquareScript>();
    script.SetUp(20, Color.red);
}


И четвёртый пример где создаём некоторый лес элементов, но с определёнными случайными свойствами - это 5 лесопосадок в линию, и они смещаются на заданные пределы:

Код:
internal void Start()
{
   for (int i = 0; i < 5; i++)
   {
      DeployOneLine(new Vector2(1, -i * 0.5f), new Vector2(6, -i * 0.5f));
   }
}

internal void DeployOneLine(Vector2 from, Vector2 to) {
    var set = Liner.GenerateLine(from, to, 0.2f, 0.4f);
    set = Liner.AddRndDelta(set, 0.2f);
    var objects = Simple2DDeployer.Deploy(set, simpleSquareScriptPrefab, GetComponent<Transform>());
   
   foreach (var o in objects)
   {
      var script = o.GetComponent<SimpleSquareScript>();
      script.SetUp(10, Color.blue);
   }
}


В картинках генерация выглядит так (примеры получаются по порядку слева направо сверху вниз):


_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 01:38 04-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Продолжим наше in vitro (;

Получаемые узлы-точки могут быть использованы не только как координаты объектов, но и как вершины полинома для векторной графики.

(не помню с помощью чего точно собирал свои полиномные велосипеды, вероятно тут и/или здесь)

Например, мы можем собрать генератор хвойновидных растений:

Код:
public static List<Vector2> Create(float minR, float maxR, int leafN)
{
   var result = new List<Vector2>();

   for (int i = 0; i < leafN; i++)
   {
      float angle = 2 * Mathf.PI / leafN;
      result.Add(new Vector2(Mathf.Sin(i * angle) * minR, Mathf.Cos(i * angle) * minR));
      result.Add(new Vector2(Mathf.Sin(i * angle + angle / 2.0f) * maxR, Mathf.Cos(i * angle + angle / 2.0f) * maxR));
   }

   return result;
}


Т.е. здесь создаётся полином по кругу, прыгая по малому и большому радиусу.

Далее, так может выглядеть процедура развертывания на сцене для одного префаба:

Код:
public Material _material;

public PolygonDeployerScript _deployerPrefab;

public float _minR;
public float _maxR;

private PolygonDeployerScript _script;

public void Deploy(float size, Color color, int leafN)
{         
   var v = PineFactory.Create(size * _minR, size * _maxR, leafN);

   _script = Instantiate(_deployerPrefab, GetComponent<Transform>());
   _script.Deploy(v.ToArray(), _material, color, 0.02f, false);
}


Здесь скрыта только процедура Deploy, которая собрана по ссылкам выше, и фактически превращает вершины в нужный нам полином на сцене.

Если взять из предыдещего сообщения те же процедуры генерации, заменив по-быстрому такие фрагменты

Код:
var script = o.GetComponent<SimpleSquareScript>();
script.SetUp(10, Color.blue);


на где-то такие

Код:
var pine = o.GetComponent<PineSimple>();
pine.Deploy(1, Color.blue, Random.Range(7, 12));


То получим такую картинку:



Т.о. описанные простые преобразования мы используем для случайно создаваемых элементов, и в том числе, создаём их множества на сцене.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (04:31 04-01-2022), всего редактировалось 1 раз
    Добавлено: 02:20 04-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Теперь пару операций с полиномами.

Допустим нам надо нарисовать лес, область которого ограничена полиномом, и эта область имеет отличительный цвет (песок, трава).

Если нарисовать его просто полиномом, то он будет угловатый. И здесь хотелось бы его не только скруглить, но и ограничить случайной линией.

В этих примерах и преобразованиях такие картинки:



Изначально возьмём полином как пятиугольник (1-й пример):

Код:
var polygon = new List<Vector2>() {
        new Vector2(-1, -0.5f),
        new Vector2(1, -0.5f),
        new Vector2(2, 0.5f),
        new Vector2(0, 1),
        new Vector2(-2, 0.5f)
};

var script = Instantiate(_deployerPrefab, GetComponent<Transform>());
script.Deploy(polygon.ToArray(), _material, Color.grey, 0.01f, true);


Далее каждую из сторон подвергнем случайной обработке (2-й пример):

Код:
internal void Start()
{
    var polygon = new List<Vector2>() {
            new Vector2(-1, -0.5f),
            new Vector2(1, -0.5f),
            new Vector2(2, 0.5f),
            new Vector2(0, 1),
            new Vector2(-2, 0.5f)
    };

    var polygonInDetail = new List<Vector2>();

      for (int i = 0; i < polygon.Count; i++)
      {
        if (i < polygon.Count - 1)
            polygonInDetail.AddRange(GenOneLine(polygon[i], polygon[i+1]));
        else
            polygonInDetail.AddRange(GenOneLine(polygon[polygon.Count - 1], polygon[0]));

        polygonInDetail.RemoveAt(polygonInDetail.Count - 1);
    }           

    var script = Instantiate(_deployerPrefab, GetComponent<Transform>());
    script.Deploy(polygonInDetail.ToArray(), _material, Color.blue, 0.01f, true);
}

private List<Vector2> GenOneLine(Vector2 from, Vector2 to)
{
    var rndGenerator = new RangeRndGenerator(0.05f, 0.1f);
    var set = Liner.GenerateLine(from, to, rndGenerator);
    set = Liner.AddRndDelta(set, 0.1f);
    set.RemoveAt(set.Count - 1);
    return set;
}

Здесь мы формируем polygonInDetail из изначального полигона множествами линейных наборов, как в наших примерах выше. Каждый линейный набор - это генерация из линии точек на расстоянии от 0.05 до 0.1, и смещенных на случайное от -0.1 до 0.1 перпендикулярно линии (последнее значение выкусывается чтобы не совпадать с первым следующим, так как одинаковые точки ломают рисование полинома на сцене).

Как видим, наша область несколько угловатая. Хотелось бы её сгладить. Для этого используем новый обработчик - (waveProcessing) - один его проход это присовение среднего значения каждому из узлов, кроме начального и псследнего. Такая обработка делает последовательность более плавной, рельефной. И таких проходов можно сделать несколько.

Т.о. 3-й пример, где изменена только процедура GenOneLine:

Код:
private List<Vector2> GenOneLine(Vector2 from, Vector2 to)
{
    var rndGenerator = new RangeRndGenerator(0.02f, 0.04f);
    var set = Liner.GenerateLine(from, to, rndGenerator);
    set = Liner.AddRndDelta(set, 0.1f);
    set = RndWave.WaveProcessing(set, 5);
    set.RemoveAt(set.Count - 1);
    return set;
}


Здесь замена на (0.02f, 0.04f) чтобы полином был более плотным, так как для плавных волн нужно больше точек. И сделано 5 проходов усреднения.

И для последнего примера, добавим наши растения по периметру области (4-й пример):

Код:
public PolygonDeployerScript _deployerPrefab;
public Material _material;
public GameObject _pineScriptPrefab;

internal void Start()
{
    var polygon = new List<Vector2>() {
            new Vector2(-1, -0.5f),
            new Vector2(1, -0.5f),
            new Vector2(2, 0.5f),
            new Vector2(0, 1),
            new Vector2(-2, 0.5f)
    };

    var polygonInDetail = new List<Vector2>();

    for (int i = 0; i < polygon.Count; i++)
    {
        if (i < polygon.Count - 1)
            polygonInDetail.AddRange(GenOneLine(polygon[i], polygon[i + 1]));
        else
            polygonInDetail.AddRange(GenOneLine(polygon[polygon.Count - 1], polygon[0]));

        polygonInDetail.RemoveAt(polygonInDetail.Count - 1);
    }

    var script = Instantiate(_deployerPrefab, GetComponent<Transform>());
    script.Deploy(polygonInDetail.ToArray(), _material, new Color(  0xf3 / 256.0f, 0x0ce / 256.0f, 0x9A / 256.0f), 0.01f, true);

    var plantPolygon = new List<Vector2>();
    foreach (var point in polygon)
    {
        plantPolygon.Add(point * 0.9f);
    }

    for (int i = 0; i < plantPolygon.Count; i++)
    {
        if (i < plantPolygon.Count - 1)
            GenOnePineLine(plantPolygon[i], plantPolygon[i + 1]);
        else
            GenOnePineLine(plantPolygon[polygon.Count - 1], plantPolygon[0]);
    }
}

private void GenOnePineLine(Vector2 from, Vector2 to)
{
    var set = Liner.GenerateLine(from, to, 0.2f, 0.5f);
    set = Liner.AddRndDelta(set, 0.1f);
    set = RndWave.WaveProcessing(set, 1);
    set.RemoveAt(set.Count - 1);
    var objects = Simple2DDeployer.Deploy(set, _pineScriptPrefab, GetComponent<Transform>());

    foreach (var o in objects)
    {
        var pine = o.GetComponent<PineSimple>();
        pine.Deploy(2, new Color(0, 0.6f, 0), UnityEngine.Random.Range(7, 12));
    }
}

private List<Vector2> GenOneLine(Vector2 from, Vector2 to)
{
    var rndGenerator = new RangeRndGenerator(0.02f, 0.04f);
    var set = Liner.GenerateLine(from, to, rndGenerator);
    set = Liner.AddRndDelta(set, 0.1f);
    set = RndWave.WaveProcessing(set, 5);
    return set;
}

Здесь для простоты сделал *0.9f чтобы растения росли на земле (в более сложных случаях будет посложнее, чтобы растения не росли где случайно попало). Далее у нас отдельная процедура для растений, которые располагаются по подобному фону периметру. У них больше расстояние между кустиками, сделал одну волну для плавности, и далее тжс что было у нас раньше.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (04:31 04-01-2022), всего редактировалось 1 раз
    Добавлено: 03:47 04-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Возвращаясь к ужику. Применение описанных технологий на первом прототипе периметра главного меню выглядит так:

 Cкрытый текст   (кликните здесь для просмотра)


Тут периметр сгенерирован случайным образом, при каждом запуске разный. Растений несколько, слоев тоже несколько, некоторые подпиливания для поиска стиля.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (04:06 04-01-2022), всего редактировалось 2 раз(а)
    Добавлено: 03:51 04-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
По поводу дизайна осенью делал кое-какие эксперименты. Пара скринов набросков по поиску стиля (датированы 3 октября):

 Cкрытый текст   (кликните здесь для просмотра)
 Cкрытый текст   (кликните здесь для просмотра)
 Cкрытый текст   (кликните здесь для просмотра)

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

Сейчас чувствуется что нынешние менюшки по стилю конфликтуют с появляющимся новым. И с этим надо что-то делать.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 00:36 06-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Сегодня немного поупражнялся с рельефом с проеркой нескольких идей.

Сначала собрал функцию расширения многоугольника по периметру: если есть многоугольник, то задача сделать тоже многоугольник, но больше, чтобы он аккуратно становился больше по периметру на некоторое расстояние. Чтобы например как выше в 4-м примере не нужно было просто умножать на масштаб чтобы расчтения были по периметру, так как для разных форм фигур это не работает.

Т.е. если есть фигура (жёлтая), то нужно получить то что зелёное (или около того):

 Cкрытый текст   (кликните здесь для просмотра)


В моем случае определяем направление обхода полинома (я делал это через обсчёт площади, и отрицательная/положительная говорит о направлении). Далее перебираем все стороны многоугольника и смещаем отрезок на некоторую константу по нормали умноженное на знак направления обхода.

Если эту процедуру можно применить несколько раз, и получить такое:

 Cкрытый текст   (кликните здесь для просмотра)


Это были эксперименты с константным многоугольником. Для разнообразия собрал генератор многоугольников (случайными являются число вершин, расстояние вершин до центра и угол для каждой из вершин).

Когда их много, то получается такая картинка:

 Cкрытый текст   (кликните здесь для просмотра)


И теперь для каждой из сторон применяем процедуру, описанную выше в третьем примере (GenOneLine). Результат выглядит как-то так:

 Cкрытый текст   (кликните здесь для просмотра)


В этом контексте для ужика можно сделать горный периметр на экране уровня, при чём чтобы он был случайным, не обязательно по всему периметру (частичные горы_ и надо будет сделать ещё доп спецэффекты.

А вобщем случае вырисовывается некий стиль случайно-генерируемой графики. Будем посмотреть (;

На этот функционал и написание поста ушло часа 2-3. А прошло 3 недели. Надо как-то собраться и систематически взяться за проект.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 03:19 27-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
После наблюдения некоторых проблем с генерированными элементами решил собрать другой алгоритм увеличения многоугольника. Вместо движения отрезков во все стороны сделал расширение вершин по биссектрисам. Разница то что слева и справа:

 Cкрытый текст   (кликните здесь для просмотра)


Слева то что выше, справа то что задумал на этот раз.

Причина в том, что при некоторых вариантах - например если у нас впуклый многоугоотник буквой L, и расстояние увеличения большая, то получаем сначала самопересечения полинома, а далее ему вообще сводит крыщу (если попробовать применить на L, то сами поймёте).

Поэтому взялся за вариант который справа. Несмотря на то что он может быть выглядит просто - два вектора, и найти угод биссектрисы - на деле потратил несколько часов на их вращения на бумаге и отладку.

Картинка увеличения одной итерации в вакууме выглядит как-то так:

 Cкрытый текст   (кликните здесь для просмотра)


Если применить генерацию многоугольников, то оно получается такое:

 Cкрытый текст   (кликните здесь для просмотра)

Видно что все как-то схематично и прямо. Но для этого этапа такое и нужно.

Если применить нашу описанную процедуру разномизиорования прямых линий, то оно начинает смотрется так:

 Cкрытый текст   (кликните здесь для просмотра)


А если быстрым движением руки добавить случанйных растений по веришнам и периметру, то картинка получается такая:

 Cкрытый текст   (кликните здесь для просмотра)


На практике правда встретил явление что при рандомизции прямых линий иногда получаются самопересекающиеся полиномы. Надо будет исправить этот момент.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 02:22 29-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Как оказывается, найти готовую процедуру определения самопересекается многоугольник или нет непросто. Plane Sweep Algorithm реализовывать долго, а кроме алгоритма других готовых не нашёл. Пока что взял процедуру определения пересечения отрезков и перебор O(n^2).

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

В связи с этим сначала попробовал делать сотню попыток генерации. Но и это не всегда помогает. И тогда выделил отдельную процедуру для чистой генерации без создания объектов на сцене. И если более сотни раз получается пересекающийся полигон, то вся процедура создания объекта запускается заново. И все это через механизм исключений (если внутри не получается сгененировать, то исключение отбрасывает на уровень, где можно пересобрать базовые непротиворечивые параметры). Хотя, в идеале, надо генерацию строить так, чтобы плохих случаев не было.

Теперь некоторый шаг в сторону проектирования уровней. Далее показан пример, где проектировщик уровня задаёт только 7 ключевых точек многоугольника (T--оразный, верхнее с 2-мя точками чтобы пошире), и далее программно получается случайное окружение.

Два примера генерации:

 Cкрытый текст   (кликните здесь для просмотра)
 Cкрытый текст   (кликните здесь для просмотра)


Т.е. при проектировании мы указываем важные для уровня параметры, а неважные подвегаются случайности.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 21:57 29-01-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Публикационная часть работ над ужиком возобновлена. Обновлены версии для iOS и Android, в обеих новый графический дизайн и вообще лесной концепт (звук, графика, ..).

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

Теперь уже работа планируется на на элементы интерфейса и анимации. Белка переработается функционально на вращение 2x2 клеток на 90 градусов. Добавление пары диалогов, потом преобразование списка уровней в карту с графом прохождения. Еще собираюсь после туториалы для всех новшеств появляющихся для игрока.
_________________
μηδείς αγεωμέτρητος εισίτω

Последний раз редактировалось: Minx (12:48 13-07-2022), всего редактировалось 1 раз
    Добавлено: 22:49 31-05-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
В последний месяц у приложения выпущено несколько обновлений. Если в мае была опубликована графическая яасть, до за июнь-начало-июля вышли обновления 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6.

В новых версиях учитывались пожелания игроков, собранные из различных источников.

Отедельным направлением была анимационная часть, направленная на улучшение взаимодействия с игрой по интерфейсу и лучшего ощущения происходящего. Здесь добавлено множество анимаций, звуков, спецэффектов. Появляется множество подсказок для облегчения понимания состояния игры (это подсчет длины ужика, собираемой суммы, числа очков), сообщения о выполнении заданий, контекстные подсказки.

Добавлены два новых вида животных:
- белка: для произвольной 4-ки плиток 2х2 можно крутить их на 90' на произвольное число оборотов;
- хамелеон: можно перекрашивать произвольную плитку в другой цвет, присутствующий на уровне;

Чтобы их добавить, убраны откат на ход назад и расширение с 2 до 4 начального отряда помощников-животных (теперь всегда 4).

Добавлено меню с описанием игрового процесса - в нём 7 анимационных контекста с их описанием; при этом они появляются автоматически один раз при встрече нового элемента.

Выключено автоматическое срабатывание использования животных если нет хода. Для игры на очки используются животные по одному.

Следующим этапом для 1.3.0 запланировано создание карты уровней. Сейчас уровни это списки по категориям, а хочется нарисовать ландшафт и граф зависмостей уровней.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 13:00 13-07-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Несколько повозился с генерацией карты.

Одним из вариантов была проработка такой схемы.

Сначала создается пространство. Оно может быть например из треугольных или четырёхугольных плиток:

 3   (кликните здесь для просмотра)

 4   (кликните здесь для просмотра)

Далее, каждый узел смещаем на случайную величину, сравнимую с долей ребра:

 3   (кликните здесь для просмотра)

 4   (кликните здесь для просмотра)



Если заливкой областей пройтись по 4-м, то получается такая картинка:
 Cкрытый текст   (кликните здесь для просмотра)


Это еще заготовочный вариант, для него ещё нужно сглаживать края чтобы смотрелось. И для решения вопросов производительности объединять поля в общие полигоны, или вообще превращать в картинку растровую. Но идея и стиль тут понятны.

Для треугольников мне понравилось больше. Например, островной вариант:

 Cкрытый текст   (кликните здесь для просмотра)

Треугольное пр-во требует отдельных процедур обработки, и некоторого понимания пр-ва. Там не все так просто.

Периметр островного варианта получается так:
- берем все кто граничит с основной областью и записываем в границу;
- подключаем к ним все из пустых кто граничит с границей с 1 и 2 шт по ребрам;
- подключаем ещё раз, но тех, кто граничит с границей с 1 ребром;
- выкидываем внутренние по необходимости (самая большая заливка).

В случае например если мы хотим двигаться по-прямой, то 3 направления мы двигаемся в одном относительно треугольника, и в трёх других нужно менять - в зависимости от если треугольник прямой и перевернутый. Пример такого движения (прямая река; хотя для реки надо бы заставить её извиваться):

 Cкрытый текст   (кликните здесь для просмотра)

И еще пример. Сначала создали центральную область. Далее, задача чтобы было ещё 6 граничащих с ней областей. Здесь на границе выбраны 6 случайных полей, и от них заливка с ограниченным размером (например 100 клеток на область). После всего ещё шаг - заливка +1 всех во все стороны (иначе дырок много). И вот пример обработки:

 Cкрытый текст   (кликните здесь для просмотра)


Но для Натрикса прихожу к выводу что надо бы все таки для него сделать фиксированную карту, только всякие растения-фон делать случайными. Разные карты не повлияют особо на играбельность, то что разное у разных игроков никто не оценит, а объем работы тут существенно больше. Но хорошо что отработал пока что технологии, теперь более представляема их сложность и думаю применим как-нибудь по ситуации.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 16:52 17-07-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Какое-то время неделю пробовал спроектировать и собрать мир на основании инструментов генерации и и в формате вида сверху. Но оказалось сделать это оч мложно, так как мало можно показать и объекты на карте плохо смотрятся и сложно отобразить подробности. Также несколько несовместимы с привычными элементами интерфейса.

В какой-то момент начал перепроектировать с нуля, в плане перехода на другой вариант графики. Попробовал сделать двумерный вид сборку, когда как относительно на карте элемементы сверху. Вроде получаться стало.

В приложении оно сейчас смотрится так, как показано на этом гифе:
https://gifyu.com/image/SNtlw

Старый вариант еще остался снизу, это когда горы вид сверху. Новый вариант несколько проработался в лесном и пустынном биомах.

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

Далее задачи сделать анимации ужика во все стороны и эмоциональные. Нужен будет эффект тумана, когда карта открывается постепенно. Параллельно изучу кривую Безье, это для тропинок между уровнями и изгиба реки.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 01:37 31-07-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Поиск стиля и элементов графики оказался непростой задачей, и продвигалась с разным успехом. Так, сборка пустыни прошла достаточно быстро и гладко, приемлимый вариант получился такой:

 Cкрытый текст   (кликните здесь для просмотра)


Но выдвижение в каменистую местность прошло жестко. Например, казалось бы, что стоит нарисовать трещины на земле? Здесь уже попробовал использовать инструмент генерации поверхности из треугольников (про него писал выше) и по периметрам обрамляем линии. Такая эволюция вариантов:

 Просто по периметру   (кликните здесь для просмотра)

- больше похоже на висяую химическую молекулу.

 Добавление случайных смещений в узлах   (кликните здесь для просмотра)

- совсем не плоско.

 Сплющиваем на треть   (кликните здесь для просмотра)


Тут уже наблюдаются проблемы с производительностью, и занялся преждевременной оптимизацией. Какоказывается, генерация такого числа объектов в юнити уже требует долей или секунд времени, что для мобильных игр может быть многовато. Также есть проблемы с релаьным временем, так как падает fps даже елси объекты static. И здесь попробовал сделать переход, если картинки выше это множество векторов как многоугольник, то ниже это уже сгененированные текстуры, на которых рисуются точками алгоритмически картинка, но выглядит он несколько по-другому, пример:

 Текстура   (кликните здесь для просмотра)


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

Лес подвергся некоторой оптимизации, и еще потихоньку начались внедряться динамические объекты:

 Cкрытый текст   (кликните здесь для просмотра)


Добавлено [mergetime]1662301026[/mergetime]:

Параллельно запустил дополнительный процесс приближения к пользователям. Провёл два теста на PlaytestCloud (которые забесплатны), результаты положительные в том смысле, что многое прошло гладко (что позитивно), но в то же время выявились существеные проблемы. В частности, явно понятно что нужно элементы внедрять постепенно, а не сразу. И здесь нужно будет решать вопрос уже на карте - здесь ужик будет проходить уровни, и постепенно открываться новые животные, новые цели и т.п. Так как игроки оказываются в шоке когда получают сразу все. А так постепенно и с объяснялками.

Помимо этого, запустил для текстов А-B тесты на Google Play, тут прошла некоторая маркетинговая проработка. Фронт большой и широкий для того, чтобы уходить от текущего числа загрузок.

И еще создали сервер Discord для отзывов, сообщений а ошибках-проблемах, и других обсуждений. Будем рады помочь в чем-либо, принять критику и далее улучшить игру, а также вообще всех здесь увидеть (ссылка для подключения): https://discord.gg/26W5qqsx7G
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 17:35 04-09-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
Где-то последнюю неделю занимались стилем области каменной пустоши, и первый из более менее приемлимых вариантов получился такой как показан на картинке:

 Cкрытый текст   (кликните здесь для просмотра)


Здесь видно 4 типа объекта - высохшие деревья, круглые и пирамидальные камни, трещины.

Как можно понять по предыдущим сообщениям, самой большой проблемой оказались трещины. Сделать наверняка приемлимую картинку для большинства вариантов генерации не удалось, в результате сошлось все на том что это будет редкий объект в этой области.

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

Засохшие деревья не такие разные. отличаются симметрией и размером. Вероятно в будущем можно будет собрать несколько других.

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

 На что наслаиваем   (кликните здесь для просмотра)


 Результат   (кликните здесь для просмотра)


Здесь уже настало время на развертывания уровней. Первая попытка - установка уровней в случайных местах треугольных плиток оказалась хорошей попыткой. То что получалось приемлимо, но не идеально:

 Cкрытый текст   (кликните здесь для просмотра)


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

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

 Cкрытый текст   (кликните здесь для просмотра)


В дальнейшем в планах рисовать тропинки между узлами уровней, - и они должны быть не прямые, а с округлением кривых Безье. И с обходом препятствий.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 21:26 13-09-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
На этой неделе был один Дейкстра-день и один день Безье (;

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

Реализация этого подхода в режиме отладки показана на картинках:

 Камни   (кликните здесь для просмотра)

 Пустыня   (кликните здесь для просмотра)


Во втором случае плотность уровней ниже, и можно видеть разницу. И здесь уже видим, как игрок может путешествовать между уровнями.

Отрезки движения между уровнями выгляядят угловато, и для решения этой проблемы нашли применение кривые Безье.

И так начался день Безье. Как показано выше, прямые отрезки нехорошо смотрятся, а также хорошо бы чтобы они были разными - чтобы движение игрока не попадало под какие-то шаблоны. Тем более в таких условиях когда мощные инструменты процедурной генерации.

Теоретически выбраны кривые Безье с 4 точками. Этот вариант позволяет описывать кривую состоящую из множества участков, каждый из которых начинается и заканчивается в заданной точке, но при этом кривая является плавной.
В четверке точек первая и последняя могут быть рандомизированы, - по углу и расстоянию от 2-й и 3-й точек, и этим мы можем задать разнообразие.

Проведено множество экспериментов и проведено какое-то время в отладке для того, чтобы картинка выглядела получше. Как это было во время отладки показано на картинке:

 Cкрытый текст   (кликните здесь для просмотра)


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

 Cкрытый текст   (кликните здесь для просмотра)


И сейчас следующий шаг - приспособить описанные технологии для всех типов областей, некоторые из которых еще надо заполнить объектами. Кроме того, отрефакторить и отполировать полученные инструменты чтобы архитектурно была возможность строить дальше и сопровождать.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 00:50 17-09-2022   
Minx
 978 EGP


Модератор
Рейтинг канала: 6(328)
Репутация: 135
Сообщения: 10521
Откуда: Gomel, Belarus
Зарегистрирован: 19.11.2005
За последнюю неделю прежде всего были внутренние архитектурные изменения. Прошёл поиск общего базиса для всех биомов, и под этот общий знаменатель все было выровнено. Это позволило далее шустро наполнить области объектами - готовы горы, начальная область (с нуля) перепричесаны остальные.

Сейчас игровая картинка выглядит где-то так:

 Cкрытый текст   (кликните здесь для просмотра)


Добавлена парочка анимаций на карте.

Исправлена найденная ошибка что остается звук ветра при выключенном звуке в приложении.

Введена подсистема резервирования уровней. Если сейчас в каждой группе по 20-50 уровней, то потенциально они расширяемы в каждой из областей до 70-100.
Это делалось в контексте создания системы сохранения карты. Теперь организовано таким образом, что при первом запуске создается случайным образом карта (граф уровней, множество объектов фона, ..). И далее эта картинка относительно игрового процесса сохраняется, и когда игрок зайдет снова, у него такая же будет карта - с такими же зависимостями между порядком прохождения уровней. Но у разных игроков эти зависимости будут разными.

В ближайших планах:
- собрать связующие между областями переходы;
- привести главное меню как шагу старта (play) и входом на карту, где уже кнопками основные меню;
- фиксированные объекты для базовой области - лес ужика, аркадная гора-вершина, места разблокировки компаньонов;
- сделать по Безье реку;

После этих пунктов уже будет близок выпуск 1.3.0.
_________________
μηδείς αγεωμέτρητος εισίτω
    Добавлено: 02:04 25-09-2022   
Канал Игры Мечты: «Натрикс»
На страницу: 1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Такое настpоение пpопадает... Можно, я пнy вашy собачкy?

  » Натрикс | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18