Ответы пользователя по тегу Разработка игр
  • Можно ли себя считать геймдевелопером?

    tsarevfs
    @tsarevfs
    C++ developer
    Можете называть себя так как вам нравится, хоть боевым вертолетом.
    Использовать готовые куски абсолютно нормально. Качество специалиста определяется результатом а не методами. Другой вопрос, что бездумное копирование рано или поздно приведет либо к лицензионным проблемам либо к интеграционным, когда куски не собираются в единое целое.
    Писать все самому с нуля это велосипедостроение. Но понимание того как работают эти части помогает собирать из кусков сложные системы и бороться с возникающими проблемами.
    Ответ написан
    Комментировать
  • Библиотека/фреймворк для школьного проекта по физике?

    tsarevfs
    @tsarevfs
    C++ developer
    Когда-то давно мне понравилась SFML библиотека на С++, за простоту входа и вменяемый ООП дизайн. Чем-то похоже на Pygame
    Ответ написан
    Комментировать
  • Какие тренды или проблемы сейчас в игровой индустрии?

    tsarevfs
    @tsarevfs
    C++ developer
    Из актуального:
    Стриминг
    Адаптация игр под игру на удаленном устройстве.
    VR + стриминг. Что делать с задержкой?
    Новые возможности расчета физики и геймплея на доверенном клиенте Google Stadia, без угрозы читерства (есть ли они по сравнению с обычной схемой?).
    ML, AI
    Анимации и прочий контент на нейросетках. https://hub.packtpub.com/this-ai-generated-animati...
    Голосовые помощники в играх
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы пули на платформе pygame стреляли по вертикали?

    tsarevfs
    @tsarevfs
    C++ developer
    Попробуйте добавить print(lastmove) перед движением пуль.
    Добавлю пару непрошенных советов:
    if right == True: #заменить на if right:
    if по определению срабатывает если условие равно True. Сравнение избыточно.
    if keys[pygame.K_a] and x>5:
            x -= speed
            left = True
            right = False
            up = False
           down = False

    Очень много кода, и как следствие легко допустить ошибку. Используйте векторное представление направления. x и y будут иметь значения -1, 0 или 1.
    https://www.pygame.org/docs/ref/math.html вам поможет удобно работать с такими векторами.
    direction = Vector2(0, 0)
        if keys[pygame.K_s] and y<1920 - tall -5:
            direction.y = 1
        if keys[pygame.K_w] and y>5:
            direction.y = -1
        if keys[pygame.K_a] and x>5:
            direction.x = -1
        if keys[pygame.K_d] and x<1920 - wide -5:
            direction.x = 1
    
        if direction.length() != 0:
            last_direction = direction
        pos += direction * speed;
        if keys[pygame.K_f]:
            if len(bullets) <= 100:
                bullets.append(Bullet(pos + gun_offset, (255, 0, 0), last_direction ))
        for bullet in bullets:
            bullet.pos += bullet.speed
            window_rect = pygame.Rect(0, 0, 1920, 1080) #можно определить глобально 1 раз
            if not window_rect.collidepoint(bullet.pos):
                bullets.pop(bullets.index(bullet))

    if keys[pygame.K_s] and y<1920 - tall -5:
    Может быть чуть удобнее не смешивать регистрацию нажатий и контроля позиции. используйте window_rect.contains для этого непосредственно перед тем как изменить позицию игрока.

    P.S.
    Раньше pygame хотел обязательно int координаты при рисовании, поэтому Vector2 приходилось преобразовывать в пару int:
    def vec_to_int(vec):
        return (int(vec.x), int(vec.y))
    pygame.draw.circle(screen, self.color, vec_to_int(self.pos), self.radius)


    Но вроде как они это поправили, так что может это и не понадобится.
    Ответ написан
    Комментировать
  • Как называется игра, где нужно програмировать роботов?

    tsarevfs
    @tsarevfs
    C++ developer
    Посмотрите на игры Zachtronics. Они сложные, но очень крутые.
    Ответ написан
    Комментировать
  • Разработка игр.Как начать?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Начните с чего-то совсем простого. Змейка вполне нормальный пример. Можно писать на чем угодно не закапываясь в детали. 2D, спрайты скорее всего ваш выбор.
    Некоторое время назад я игрался с https://www.sfml-dev.org/ . Возможно сейчас есть выбор лучше, надо гуглить. Да, реальные игры пишут на больших монстрах типа Unity или Unreal. Но из-за высокого порога входа легко все бросить не получив результата.

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

    tsarevfs
    @tsarevfs
    C++ developer
    Достаточно легко доказать что пути будут лежать по общим касательным и дугам между точек касания для непроходимых сфер. Можно строить динамический граф и использовать A*.
    C тормозящими кругами может быть сложнее. Если они не могут пересекаться с препятствиями, то их выгоднее обходить по дуге, которая не более чем в pi/2 (~1.5) длинее хорды.
    Если могут, то если аналитическое решение найти трудно, я бы добавил несколько точек на границе медленных зон в граф и искал приближенное решение.
    Про непроходимые круги: https://redblobgames.github.io/circular-obstacle-p...
    Ответ написан
    2 комментария
  • Как сделать эффект свечения спрайтов в 2D игре?

    tsarevfs
    @tsarevfs
    C++ developer
    Наверно можно применить один из готовых фильтров к той текстуре, которая должна светиться. https://docs.coronalabs.com/guide/graphics/effects...
    Ответ написан
  • Как заставить работать функцию в python?

    tsarevfs
    @tsarevfs
    C++ developer
    Предлагаю вам вариант, как сделать код красивее.
    places = ["Таверна","Рынок"]
    tavern_actions = ["Купить еды","Пить"]
    marketplace_actions = ["Купить руду","Продать руду"]
    
    def chose_option(options):
    	option_strings = ["{}) {}".format(i + 1, name) for (i, name) in enumerate(options)]
    	question = '\n'.join(option_strings) + '\n'
    
    	return int(input(question))
    
    class Player:
    	def __init__(self):
    		#конструктор вызывается при создании
    		self.money = 0
    		self.water = 0
    		self.food = 0
    
    	def __repr__(self):
    		return "Player:\n money: {}\n water: {}\n food: {}\n".format(
    			self.money, self.water, self.food
    			)
    
    	def tavern(self):
    		action = chose_option(tavern_actions)
    		#if action == 1:
    		# 	self.buy_food()
    		#...
    
    	def marketplace(self):
    		action = chose_option(marketplace_actions)
    		#...
    
    	def mest(self, x, y):
    		print(self)
    
    		if ((x==1 and y==1) or(x==3 and y==1)):
    			pass
    			#...
    
    		place = chose_option(places)
    		if place == 1:
    			self.tavern()
    		if place == 2:
    			self.marketplace()
    
    p = Player()
    p.mest(0, 0)


    Используем класс вместо глобальных переменных. Разбиваем разные действия на функции.

    Из того что можно сделать еще:
    Класс мир (World), который хранит масив villages и возможно что-то еще
    Класс Village, который хранит позицию, имя,...
    Тогда страшный if:
    if ((x==1 and y==1) or(x==3 and y==1)):
        if x==2 and y==1:

    Можно заменить на
    village = world.find_village(x, y)
    if (village != none):
    Ответ написан
  • Слишком быстрый fps. Как сделать движения игрового объекта более медленным?

    tsarevfs
    @tsarevfs
    C++ developer
    Расчитывайте движение объекта исходя из желаемой скорости как dx = v * dt. Для вычисления dt вычитайте таймстемп с предыдущего кадра из текущего таймстемпа.
    Ответ написан
    Комментировать
  • При 3d визуализации сливаются грани и рёбра меша. Как исправить?

    tsarevfs
    @tsarevfs
    C++ developer
    Нужно добавить освещение. Тогда поверхности под разным углом к свету будут визуально отличаться.

    https://myogre.wordpress.com/2011/10/17/man2/
    Посмотрите секцию "Создание источников света".
    Ответ написан
    4 комментария
  • Как переместить точку указанными расстоянием и углом?

    tsarevfs
    @tsarevfs
    C++ developer
    Расстояние и угол (r, fi) задают вектор перемещения. Находите его координаты t =(xt, yt) в декартовой с. к. по формуле перевода из полярных координат. И потом B = A + t;
    Ответ написан
    Комментировать
  • Создание игр после основ c++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Для начала напишите что-то очень простое и понятное. Змейку или арканоид например. В качестве учебного движка могу посоветовать SFML.
    Ответ написан
    1 комментарий
  • Какой должна быть серверная часть игры?

    tsarevfs
    @tsarevfs
    C++ developer
    Вероятно вы переоцениваете вычислительную сложность модели. VDS за 300 рублей в месяц скорее всего покроет ваши потребности, если не делать на нем лишнего. Если игра вдруг начнет пользоваться популярностью, тогда можно будет вложиться в более дорогой сервер.
    3 вариант может оказаться сложно реализуемым. Теоретически сделать это невозможно. Однако с некоторыми допущениями алгоритмы есть см. habrahabr.ru/post/222825/.
    В принципе, можно забить на жульничество пока это не станет проблемой. Это увеличит шансы на то что игра увидит свет. guide.agilealliance.org/guide/simple-design.html
    Ответ написан
  • Как создать exe из формы c++ cli?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    Вы можете оформить "движок" в виде отдельной библиотеки. И да, это будет отдельный проект в солюшене. Создание экзешника остается делом студии.
    Пример из документации.
    Ответ написан
    2 комментария
  • Направление решения для перемещения точки по 3D плоскости?

    tsarevfs
    @tsarevfs
    C++ developer
    Скорее всего, будет удобно найти координаты базисных единичных векторов (OX, OY) на этой плоскости. Тогда перемещение (dx, dy) будет выражаться через них a_new = a + dx * OX + dy * OY.
    Ответ написан
    2 комментария
  • Как правильнее создавать игровой цикл?

    tsarevfs
    @tsarevfs
    C++ developer
    Вызов tick() /*мне привычнее называть ее update()*/ для каждого объекта предпочтительней. За счет полиморфизма для каждого типа объекта может быть вызвана своя реализация этой функции. В зависимости от объекта, возможны различные варианты взаимодействий. Например куст может ничего не делать на своем update. А солдат должен посмотреть на всех врагов и выбрать в которого стрелять. Такое поведение не очевидно как реализовывать вашим способом. Ну и отпадает необходимость писать гигантские функции.
    Если юнитов становится слишком много, возможны различные оптимизации. Например обсчет только юнитов в определенной зоне или объединение стаи птиц в один объект с упрощенным поведением, вместо рачсета каждой птицы. Но об этом стоит думать, когда оптимизация становится необходимой.
    Еще подозрительна фраза про родящиеся и уничтожающиеся циклы. Это прероготива объектов. Циклы это просто часть кода, которая исполняется практически как набор последовательных инструкций.
    Ответ написан
  • Какой путь создания java-приложения с ноля до работающего?

    tsarevfs
    @tsarevfs
    C++ developer
    Idea (community edition)
    jdk под вашу версию ОС.
    Интерактивный туториал (на английском)
    Г. Шилдт Java руководство для начинающих

    Если вам хочется заниматься именно играми, посмотрите на Unity3d. С его помощью можно сделать игру практически не программируя.
    Ответ написан
    Комментировать
  • Какие библиотеки изучить, чтобы создать 2D игру?

    tsarevfs
    @tsarevfs
    C++ developer
    Pygame вполне подходит для этой задачи. Я как раз пишу небольшую карточную игру с помощью нее. Еще я использую numpy.array для работы с координатами, но не думаю, что это хороший вариант. В принципе, больше ничего и не потребуется. Здесь описано портирование под Android.
    Главное выработайте четкие дедлайны и не ставьте сразу сложных задач.
    Поддерживайте код в читаемом виде. Плохо если через месяц никто уже не будет понимать как это все работает. Возьмите на себя разработку архитектуры и основных интерфейсов.
    Ответ написан
    3 комментария