Что бы это сделать, нужно иметь такой обыт вообще. Если человек до этого никогда не работал над высоконагруженными проектами, то он ничего заложить не сможет. Так как у него попросту нет опыта в этом. Поэтому люди-самоучки и набивают свои шишки по шагам. Сначала первая итерация на 1-10 человек, потом вторая итерация на 10-50 человек и т.д.
При том "архитектура", это не только код на php и БД. Это также (в случае с браузерной игрой) лоад балансеры, ОС на которой это всё будет запускаться, статика (nginx), прокси, внутренние сети, хоть что то в плане контейниризации (docker), оркестрация (kubernetes), статистика/метрики (Prometheus, Grafana, ELK), логирование (ELK, fluentd).
Сообщение отредактировал Assasin - Суббота, 25 Сентября 2021, 22:07
Можно и без socket.io, используя тот же php и да, используя крон. К примеру минутный, ты знаешь что в секунду у тебя +2 ресурса, значит в минуту 2*60 = 120. Если пользователь хочет потратить ресурс к примеру в 48 секунд, то ты можешь высчитать: количество ресурса что у него в БД + (2 * 48) > количество ресурса которое хотят потратить.
Цитата
и игроков например 10к... крон будет создавать проблемы при увеличении количества ресурса
Самый лучший совет - не думай что у тебя будет через N лет, решай проблемы сейчас. У тебя сейчас сколько игроков? Вот и пиши скрипт, что бы он быстро обрабатывал то количество игроков, сколько у тебя сейчас. Во-вторых - не зря игры разбивают на зоны/инстансы/сервера/миры, что бы распределить игроков так, что бы система работала стабильно. В-третьих - если написать плохой код, то и для 10 игроков будет больно, если написать код хорошо, то и для 100к будет норм.
Вот человек пытался сделать именно клон Ninja World (Naruto). Увы и ах.
Приятно знать что кто то еще помнит об этом могу пролить свет на этот проект, что заглох он по моей вине, так как наступил момент когда я стал уделять больше времени работе, чем этому проекту. Но могу поделиться тем что было сделано, так сказать дневник в виде пару видео:
Возиожно эти видео послужат вдохновением. По инструментам, никаких движков или конструкторов или фреймворков не использовалось, только php, html, css, mysql, js. Но стоит заметить что у меня был опыт программирования в виде 2х лет (весьма низкий уровень программирования на тот момент) и разработка этого проекта заняла 1 год.
Сейчас есть много инструментов, которые могут и помочь и навредить в разработке. Если ты хочешь делать игру для браузера, то я могу только предложить варианты, которые на данный момент есть, которые могут помочь ускорить разработку что бы получить первый хоть какой то игровой результат. Phaser - использует TypeScript, нужен для написания клиентской части NodeJS - использует JavaScript, нужен для написания серверной части MongoBD, MySQL - использовать в качестве баз данных
Но ты вполне можешь использовать и другие инструменты, такие как тот же Unity в качестве клиента и серверную часть писать на C#, тут есть только ограничение в том что ты лучше и быстрее поймешь. Исходя из моего опыта быстрее всего изучаются такие языки как JavaScript, PHP. Для остальных уже нужна более серьезная подготовка.
По поводу таблицы news: 1. Поле date логично делать типом DATE либо DATETIME либо TIMESTAMP 2. Поле text логично делать типом TEXT, потому что VARCHAR максимально хранит 255 символов 3. Поле id логично делать UNSIGNED, в нем не будет отрицательных чисел По поводу таблицы system: 1. Неужели поля money, exp и drop будут хранить в себе числа до 9? Если нет, то лучше увеличить INT(1) на что то большее INT(5)
Разбить персонажа на 2 картинки. Первая это руки, а вторая - все остальное тело. Получится в одном GameObject будут 2 GameObject, оба Sprite И затем для GameObject "руки" менять угол поворота.
beril, либо ТС их не нашел, либо посчитал их непонятными, либо ему нужны систематизированные курсы, а не куски разных тем, по типу "Как сделать UI", "Как сделать 2Д платформер"
Решил посмотреть одно видео, понравилось то как автор рассказывает, нет перегруженности информации. Так что просмотрел все видео Удачи в выпуске игры и желаю годного контента в дальнейшем развитии канала
да и не нашел 13 и 14 уроки из темы Уроки по созданию браузерной игры.
Это потому что их не было. Flash перестал интересовать и пришлось забросить.
По поводу движков в сети, они то есть, но нужно учитывать что там могут быть и шеллы и дыры. Если их не пофиксить, то будет очередной слив очередного клона.
Подозреваю что, каждый раз как подгружается охота в память js добавляются новые таймеры setTimeout(), которые делают рывки в движениях. Было бы неплохо задавать им идентификатор и очищать его при новой подгрузке охоты clearInterval()
Описание Игрок управляет подводным батискафом, исследует глубины океана, сражается с подводными хищниками и пытается найти загадочную Атлантиду.
Особенности - Возможность улучшения батискафа:
отсек для находок (чем больше отсек, тем больше добычи можно собрать)
несколько видов оружия (океан вовсе не безобиден)
термостойкость (самый сокровенные сокровища находятся на опасных глубинах, где давление огромное, а температура стремится к 0° С)
турбины (мощные турбины — залог быстрого побега от морских хищников)
и др. - Разнообразные уровни, каждый имеет своих обитателей и свою температуру. Если у батискафа будет слабая термостойкость он попросту сломается и пойдет ко дну - Разнообразные достижения для хвастовства перед друзьями
Сообщение отредактировал Assasin - Суббота, 05 Декабря 2015, 18:20
beril, Текстура создается программно. Есть массив точек по которым нужно отрисовать полигоны (на карте это биомы разных цветов). Механизм генерации хорошо описан в данной статье
Код создающий текстуру
Код
public void AttachTexture(Map map) { _textureScale = Map.textureScale; int _textureWidth = (int)Map.Width * _textureScale; int _textureHeight = (int)Map.Height * _textureScale;
Texture2D texture = new Texture2D(_textureWidth, _textureHeight); texture.SetPixels(Enumerable.Repeat(BiomeProperties.Colors[Biome.Ocean], _textureWidth * _textureHeight).ToArray()); texture.wrapMode = TextureWrapMode.Clamp; texture.filterMode = FilterMode.Trilinear; texture.FillPolygon(new Vector2[] { new Vector2(0f, 0f), new Vector2(_textureWidth, 0f), new Vector2(_textureWidth, _textureHeight), new Vector2(0, _textureHeight) }, BiomeProperties.Colors[Biome.Ocean]);
foreach (var c in map.Graph.centers) { var color = BiomeProperties.Colors[c.biome];
foreach (var n in c.neighbors) { Edge edge = map.Graph.lookupEdgeFromCenter(c, n);
if (map.Graph.noisyEdges.path0.ContainsKey(edge.index) && map.Graph.noisyEdges.path1.ContainsKey(edge.index)) { var path = new List<Vector2>();
path.Add(c.point); var pathZ = map.Graph.noisyEdges.path0[edge.index]; foreach(var p in pathZ) { path.Add(p); } path.Add(c.point);
var pathO = map.Graph.noisyEdges.path1[edge.index]; foreach (var p in pathO) { path.Add(p); } path.Add(c.point);
Tymonr, я только взялся за Unity и совсем не знаю как делать правильно. Подумал что спрайт на котором рисуется текстура это и будет островом, по которому в дальнейшем будет передвигаться персонаж и на нем будут различные объекты в виде деревьев.
ЦитатаTymonr ()
Кстати, то что на скринах выше - нафига такому вообще текстура? Отрисовывать просто по точкам треугольники вообще не катит?
Можешь подробнее описать что ты имеешь в виду или ссылку на инфу скинуть? Я не могу понять как без помощи текстуры отрисовывать по точкам.
Ошибка была в том что на 3d меш пытался наложить текстуру. Текстура была привязана к пикселям, а меш к uint. Переделал под спрайт, стало получше, но возникла проблема что текстуру размером 10к на 10к пикселей Unity не может отрисовать. Думаю тут придется отрисовывать определенные секции текстуры в зависимости от того где находится камера.