<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Всё о создании игр</title>
		<link>https://gcup.ru/</link>
		<description>Форум игроделов</description>
		<lastBuildDate>Tue, 05 Aug 2025 13:10:16 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://gcup.ru/forum/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>Nao движок наш</title>
			<link>https://gcup.ru/forum/3-105166-1</link>
			<pubDate>Tue, 05 Aug 2025 13:10:16 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Ужасы удаления&lt;br /&gt;Автор темы: Искусительница&lt;br /&gt;Автор последнего сообщения: Oscillograph&lt;br /&gt;Количество ответов: 6</description>
			<content:encoded>Псс удаление - ее такая проблема. Хорошо что второй пользователь есть. Закрыть не возможно во время удаления - Сделана для мега крутых компов - наверно, вот поэтому и бесплатно положили =) Так еще теперь системник чистить от этой фигни - пришлось другим пользователем удалять с компа этот мусор - чтобы основным пользователем зайти. Не удивительно что вк избавилась от него - это проще заново делать движок для своих нужд, Пока удалял смотрел что там она изучает какие папки core -))) типа свои удаляет, самый прикол диспетчер отказал помогать - командная строка не вызывается =))) это что за ужастик создали. Установить легко избавиться трудно (впервые программа оказывает такое сопротивление). &lt;img rel=&quot;usm&quot; src=&quot;https://gcup.ru/SML/dry.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;&lt;_&lt;&quot; /&gt; и на этом институты будут учить? &lt;img rel=&quot;usm&quot; src=&quot;https://gcup.ru/SML/dry.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;&lt;_&lt;&quot; /&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Искусительница</dc:creator>
			<guid>https://gcup.ru/forum/3-105166-1</guid>
		</item>
		<item>
			<title>Эмулятор NES в каждый проект</title>
			<link>https://gcup.ru/forum/3-104539-1</link>
			<pubDate>Thu, 17 Jul 2025 12:57:52 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: afq&lt;br /&gt;Автор последнего сообщения: TLT&lt;br /&gt;Количество ответов: 5</description>
			<content:encoded>&lt;div align=&quot;center&quot;&gt;&lt;span style=&quot;font-size:18pt;&quot;&gt;&lt;b&gt;EmuNes&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;https://i.imgur.com/tkDyPrb.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Разрабатывается на&lt;/b&gt;: C&lt;br /&gt;&lt;b&gt;Поддерживаемые движки&lt;/b&gt;: Движки на SDL3 + Opengl 4/3&lt;br /&gt;&lt;b&gt;Ссылка на проект&lt;/b&gt;: &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://github.com/xverizex/libnes&quot; title=&quot;https://github.com/xverizex/libnes&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/xverizex/libnes&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Поддерживаемые игры&lt;/b&gt;: Mario Bros (вроде полностью). Bomberman - (Не взрываются стены) (Немного есть проблема со скроллом)&lt;br /&gt;&lt;br /&gt;Я разработчик данного эмулятора. Проведена сложная работа над тем, чтобы он заработал хотя бы на двух играх. В текущем состоянии его пока нельзя использовать, так как в консоль выводится отладочная информация, которая нужна мне для поиска бага в Bomberman. Баги очень сложные и нужно проявить очень сильную мотивацию, чтобы рыскать в ассемблерном коде.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Цель проекта&lt;/b&gt;: Сделать реализацию на большинство платформ, а именно, на Unity, Godot, Unreal Engine, Arduino и другие embedded микроконтроллеры, также добавить поддержку в мой редактор тайлов RetroSprite для рисования для NES. Думаю, если хватит сил, то сделаю полноценную студию, где можно не только рисовать, но и писать код и эмулировать на месте, и отлаживать.&lt;br /&gt;&lt;br /&gt;Я попробовал запустить в 3d эмулятор с выводом в текстуру, работает нормально.&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;https://i.imgur.com/IQJ71tS.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;В целом, я рад, что у меня есть возможность поработать над таким сложным проектом. Я хочу изучить разработку электроники, и взялся за эмуляцию микрочипов, чтобы понимать, что это вообще такое.&lt;br /&gt;&lt;br /&gt;Спасибо за внимание к моему проекту!</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>afq</dc:creator>
			<guid>https://gcup.ru/forum/3-104539-1</guid>
		</item>
		<item>
			<title>Хочу обсудить плюсы и минусы своих и готовых движков</title>
			<link>https://gcup.ru/forum/3-104013-1</link>
			<pubDate>Mon, 14 Jul 2025 09:36:17 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: afq&lt;br /&gt;Автор последнего сообщения: Искусительница&lt;br /&gt;Количество ответов: 62</description>
			<content:encoded>Привет всем. Собственно хочу поразмышлять на данную тему и обсудить плюсы и минусы. Если кому есть что сказать, буду рад услышать вашу версию.&lt;br /&gt;&lt;br /&gt;Из плюсов готового движка, это то, что тебе не нужно заморачиваться с изучением внутренней кухни для каждой платформы и ты просто клепаешь игры. Но от таких игроделов я не видел уж прям суперской игры. Объясню что я имею в виду. Когда я раньше общался на эту тему, то слышал такие сообщения, мол твой движок всё равно не переплюнет готовые движки, которые люди делают годами и большими командами. Отчасти да, но, неужели вы создаете такие игры, что собственный движок не может потянуть? Все игры что я видел здесь, те что видел и на других форумах, все такие игры можно сделать на собственном движке. Вы же не делаете ААА игры, а, я понял, вы думаете, что программируя на unity вы потом устроитесь в большую компанию и будете делать по-настоящему крутые игры с крутой графикой? Мне кажется такие есть, но графику делать будут за вас. Или вы услышали где-то, что какой-то Петя без знаний computer science изучил unity, создал игру и стал миллионером? хахахах.&lt;br /&gt;&lt;br /&gt;Я видел, что здесь &lt;b&gt;Storm54&lt;/b&gt; создал игру на unity за несколько часов. хахахха. Там двухмерный платформер. То-есть такой крутой продукт как unity вы используете чтобы создавать такой шлак? Честное слово ребята, объясните мне почему вы не хотите изучить математику и сделать свой движок? Если вы заработаете много денег, то вам придется уезжать из России, чтобы дальше вести бизнес и работать на unity. Если вы простенькие игры делаете, то зачем за этот движок ещё платить? &lt;br /&gt;&lt;br /&gt;Вы наверное думаете, что надо выпускать много игр и какая нибудь стрельнёт. Что ж, это верно, но не забывайте, что вам придется делиться с unity за вашу 2d игру, движок для который пишется за пару дней.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>afq</dc:creator>
			<guid>https://gcup.ru/forum/3-104013-1</guid>
		</item>
		<item>
			<title>Посоветуйте движок форума для игрового проекта</title>
			<link>https://gcup.ru/forum/3-98087-1</link>
			<pubDate>Mon, 14 Jul 2025 08:24:51 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Serjj&lt;br /&gt;Автор последнего сообщения: Искусительница&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>Нужен совет от игроделов, которые в своих проектах используют также форумы.&lt;br /&gt;Что посоветуете прикрутить? Прежде всего - с точки зрения спамоустойчивости, ибо уже столкнулся с волнами всевозможного мусора, который приходится периодически вычищать.&lt;br /&gt;Что лучше использовать - платные движки, бесплатные, самописные?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Serjj</dc:creator>
			<guid>https://gcup.ru/forum/3-98087-1</guid>
		</item>
		<item>
			<title>Как сделать меню игры NeoAxis Engine?</title>
			<link>https://gcup.ru/forum/3-104332-1</link>
			<pubDate>Fri, 06 Sep 2024 05:17:17 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Как сделать меню игры NeoAxis Engine?&lt;br /&gt;Автор темы: COOLGAMER&lt;br /&gt;Автор последнего сообщения: COOLGAMER&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Как сделать меню игры NeoAxis Engine?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>COOLGAMER</dc:creator>
			<guid>https://gcup.ru/forum/3-104332-1</guid>
		</item>
		<item>
			<title>Новые игровые движки</title>
			<link>https://gcup.ru/forum/3-21949-1</link>
			<pubDate>Wed, 07 Feb 2024 10:41:32 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: сообщаем и обсуждаем&lt;br /&gt;Автор темы: Cre-game&lt;br /&gt;Автор последнего сообщения: slagusev&lt;br /&gt;Количество ответов: 61</description>
			<content:encoded>Уважаемые пользователи! Просьба писать в эту тему о новых игровых движках, и о движках, отсутствующих в базе движков GcUp.ru. Мы будем добавлять новые движки в нашу базу. &lt;br /&gt;&lt;br /&gt; Просьба давать точное название движка, ссылку на официальный сайт, и, если не затруднит - небольшое описание.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Cre-game</dc:creator>
			<guid>https://gcup.ru/forum/3-21949-1</guid>
		</item>
		<item>
			<title>догонялки в 3D Rad</title>
			<link>https://gcup.ru/forum/3-104217-1</link>
			<pubDate>Tue, 06 Feb 2024 11:55:56 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: steveN307&lt;br /&gt;Автор последнего сообщения: steveN307&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>помогите сделать игру-догонялки (с ИИ) в 3D Rad&lt;br /&gt;как сделать чтоб при касании с машиной происходил гейм овер</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>steveN307</dc:creator>
			<guid>https://gcup.ru/forum/3-104217-1</guid>
		</item>
		<item>
			<title>Простая змейка на Bevy</title>
			<link>https://gcup.ru/forum/3-104081-1</link>
			<pubDate>Fri, 30 Jun 2023 21:33:37 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Змейка на ECS логике + простое меню&lt;br /&gt;Автор темы: minecrafter2&lt;br /&gt;Автор последнего сообщения: minecrafter2&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Bevy молодой игровой движок общего назначения который предоставляет ECS логику для создания игровых сценариев. Основное отличие от ООП подхода как раз в отсутствии самого понятия &quot;объект&quot;, вместо работает структура из &lt;u&gt;E&lt;/u&gt;ntity (сущности) &lt;u&gt;C&lt;/u&gt;omponent (компоненты) и &lt;u&gt;S&lt;/u&gt;ystems (системы) (а так же ещё Resources, но их в аббревиатуру по какой-то причине не включают). Так же стоит отметить что ECS не ноу-хау Bevy, а в общем-то довольно известная технология. К примеру года 3 назад Unity предприняла попытку создать альтернативную логику движка на ECS.&lt;br /&gt;&lt;br /&gt;Так что же, перейдём к змейке. И самое главное забываем про стандартный ООП подход и стараемся переключится на ECS логику (по началу может быть очень сложно).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Для начала настройки рабочего окружения.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Добавляем Bevy к проекту:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;cargo add bevy&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Так как вы уже должны быть минимально знакомы с Rust&apos;ом вы знаете какие у него долгие компиляция так что необходимо добавить пару оптимизаций что бы в результате наш .toml файл выглядел так:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;// ...&lt;br /&gt;&amp;#91;dependencies]&lt;br /&gt;bevy = &quot;0.10.1&quot;&lt;br /&gt;rand = &quot;0.8.5&quot;&lt;br /&gt;&lt;br /&gt;&amp;#91;profile.dev]&lt;br /&gt;opt-level = 1&lt;br /&gt;&lt;br /&gt;&amp;#91;profile.dev.package.&quot;*&quot;]&lt;br /&gt;opt-level = 3&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;И так же включить доп. функцию динамического линкера что бы наша конфигурация запуска выглядела таким образом:&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerDzOOTS&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerDzOOTS&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDzOOTS&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDzOOTS&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerDzOOTS&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerDzOOTS&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerDzOOTS&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerDzOOTS&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerDzOOTS&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;img src=&quot;https://cdn.imgchest.com/files/j7mmcorr3p7.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;После таких настроек нажимаем кнопку build и ждём компиляции. Имейте ввиду это может занять довольно приличное время (около 10 -+3 минут). Зато последующие запуски проекта будут в течении нескольких секунд.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Базовая настройка приложения&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для использования базовых функци движка необходимо использовать указать:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;use bevy::prelude::*;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;Остальные же импорты сама IDE предложит.&lt;br /&gt;&lt;br /&gt;Самый корень Bevy приложения это App. С помощью которого мы добавляем Системы. Системы это обычные функции Rust. Давайте добавить встроенную системы close_on_esc что по нажатию на соответствующую клавишу игра закрывалась. Код будет выглядеть так:&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;use bevy::prelude::*;&lt;br /&gt;&lt;br /&gt;fn main(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;App::new(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_plugins(DefaultPlugins.set(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WindowPlugin {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;primary_window: Some(Window {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title: String::from(&quot;Bevy Tutorial&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_system(bevy::window::close_on_esc&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.run(&amp;#41;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Системы выполняются каждый кадр приложения. Но есть ещё отдельный вид систем которые исполняют себя только один раз при создании приложения. С помощью таким систем можно создать камеру через которую будет видно игровое поле.&lt;br /&gt;&lt;br /&gt;Для этого сначало создадим новую систему:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn spawn_camera(mut commands: Commands&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.spawn(Camera2dBundle::default(&amp;#41;&amp;#41;;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;и добавим её:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;.add_startup_system(spawn_camera&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;В качестве параметров системе принимает Commands - инструмент для работы с сущностями (удаление, создание). Обратите внимание, при добавлении системы передавать аргументы не надо! Bevy решит это самостоятельно какие параметры системе нужны.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Структура змейки&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;#&amp;#91;derive(Resource&amp;#41;]&lt;br /&gt;struct Snake(VecDeque&lt;Entity&gt;&amp;#41;;&lt;br /&gt;&lt;br /&gt;impl Default for Snake {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fn default(&amp;#41; -&gt; Self {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Self(VecDeque::new(&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&amp;#91;derive(Resource&amp;#41;]&lt;br /&gt;struct SnakeDirection(Direction&amp;#41;;&lt;br /&gt;&lt;br /&gt;impl Default for SnakeDirection {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fn default(&amp;#41; -&gt; Self {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Self(Direction::Right&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;enum Direction {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Up,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Down,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Left,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Right,&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&amp;#91;derive(Component&amp;#41;]&lt;br /&gt;struct SnakeSegment;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Для змейки нам необходим ресурс (глобально доступная структура) которая будет хранить вектор с id сущностей змейки. Так же необходим компонент SnakeSegment для маркировки сущностей принадлежностью к змейке и направление змейки. Так же не забываем имплементацию &quot;по умолчанию&quot; для того что бы инициализировать ресурс.&lt;br /&gt;&lt;br /&gt;Инициализация ресурсов происходит так: (в App)&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;.init_resource::&lt;Snake&gt;(&amp;#41;&lt;br /&gt;.init_resource::&lt;SnakeDirection&gt;(&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Спавн начальной змейки&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn spawn_default_snake(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut commands: Commands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake: ResMut&lt;Snake&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;asset_server: Res&lt;AssetServer&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let default_snake = &amp;&amp;#91;(0., 0.&amp;#41;, (42., 0.&amp;#41;, (84., 0.&amp;#41;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (segment_x, segment_y&amp;#41; in default_snake {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake.0.push_back(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpriteBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform: Transform::from_xyz(*segment_x, *segment_y, 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture: asset_server.load(&quot;images/snake_segment.png&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SnakeSegment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.id(&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;В качестве параметров ресурс берёт Commands для спавна сущности змейки, ресурс змейки и вектором (обязательно mut, нам его менять надо), и сервер по загрузки ассетов. Помимо спавна спрайта, добавляем ещё SnakeSegment, теперь сущности можно легко найти по фильтру этого компонента. Добавляем системы как стартовую.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Движение змейки&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn snake_movement(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut commands: Commands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake: ResMut&lt;Snake&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_query: Query&lt;&amp;Transform, With&lt;SnakeSegment&gt;&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction: Res&lt;SnakeDirection&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;asset_server: Res&lt;AssetServer&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.entity(*snake.0.front(&amp;#41;.unwrap(&amp;#41;&amp;#41;.despawn(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake.0.pop_front(&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let snake_head = snake_query.iter(&amp;#41;.last(&amp;#41;.unwrap(&amp;#41;.translation;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let (offset_x, offset_y&amp;#41; = match snake_direction.0 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Up =&gt; (0., 42.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Down =&gt; (0., -42.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Left =&gt; (-42., 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Right =&gt; (42., 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake.0.push_back(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpriteBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform: Transform::from_xyz(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_head.x + offset_x,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_head.y + offset_y,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture: asset_server.load(&quot;images/snake_segment.png&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SnakeSegment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.id(&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Тут логика игры стандартная - удаляем хвост добавляем спереди и так движемся по направлению. У данной системы есть очень важный параметр - запрос (Query). С помощью запросов можно легко найти все необходимые элементы с необходимыми компонентами. Это ключевая функция Bevy и ECS системы.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Ввод с клавиатуры&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn snake_direction_input(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake_direction: ResMut&lt;SnakeDirection&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyboard: Res&lt;Input&lt;KeyCode&gt;&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if keyboard.just_pressed(KeyCode::Up&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction.0 = Direction::Up&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if keyboard.just_pressed(KeyCode::Down&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction.0 = Direction::Down&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if keyboard.just_pressed(KeyCode::Left&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction.0 = Direction::Left&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if keyboard.just_pressed(KeyCode::Right&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction.0 = Direction::Right&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Bevy использует ввод с клавиатуры как Ресурс, так что просто добавляем ресурс к системы и можем слушать клавиатуру.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Рост змейки&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn snake_growth_event_handler(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut commands: Commands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake: ResMut&lt;Snake&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake_growth_event_reader: EventReader&lt;SnakeGrowthEvent&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_direction: Res&lt;SnakeDirection&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_query: Query&lt;&amp;Transform, With&lt;SnakeSegment&gt;&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;asset_server: Res&lt;AssetServer&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for _ in snake_growth_event_reader.iter(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let snake_head = snake_query.iter(&amp;#41;.last(&amp;#41;.unwrap(&amp;#41;.translation;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let (offset_x, offset_y&amp;#41; = match snake_direction.0 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Up =&gt; (0., 42.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Down =&gt; (0., -42.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Left =&gt; (-42., 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Direction::Right =&gt; (42., 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake.0.push_back(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpriteBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform: Transform::from_xyz(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_head.x + offset_x,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_head.y + offset_y,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture: asset_server.load(&quot;images/snake_segment.png&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SnakeSegment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.id(&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;println!(&quot;snake_growth_event_handler&quot;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Для создания системы роста змейки будем использовать ещё одну функцию Bevy - события (Event). События может отправить любая система и принять так же любая система кто имеет соотвествующий параметр.&lt;br /&gt;&lt;br /&gt;Создаём пустую структуру и добавляем её как событие:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;.add_event::&lt;SnakeGrowthEvent&gt;(&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Спавн еды&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Для начала нам нужно создать еду по умолчанию:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn spawn_default_food(mut commands: Commands, asset_server: Res&lt;AssetServer&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let x = rand::thread_rng(&amp;#41;.gen_range(-7..=7&amp;#41; as f32;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let y = rand::thread_rng(&amp;#41;.gen_range(-7..=7&amp;#41; as f32;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpriteBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform: Transform::from_xyz(x * SEGMENT_SIZE, y * SEGMENT_SIZE, 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture: asset_server.load(&quot;images/food.png&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Food,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;Добавим эту сисему как стартовую&lt;br /&gt;&lt;br /&gt;И по такой же логике проверяем столкновение головы змейки с едой:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn snake_eat_food(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut commands: Commands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut snake_growth_event_writer: EventWriter&lt;SnakeGrowthEvent&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;food_query: Query&lt;(Entity, &amp;Transform&amp;#41;, With&lt;Food&gt;&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_query: Query&lt;&amp;Transform, With&lt;SnakeSegment&gt;&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;asset_server: Res&lt;AssetServer&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let snake_head = snake_query.iter(&amp;#41;.last(&amp;#41;.unwrap(&amp;#41;.translation;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;food_query.for_each(|food| {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if snake_head == food.1.translation {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.entity(food.0&amp;#41;.despawn(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_growth_event_writer.send(SnakeGrowthEvent&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let x = rand::thread_rng(&amp;#41;.gen_range(-7..=7&amp;#41; as f32;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let y = rand::thread_rng(&amp;#41;.gen_range(-7..=7&amp;#41; as f32;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SpriteBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform: Transform::from_xyz(x * SEGMENT_SIZE, y * SEGMENT_SIZE, 0.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;texture: asset_server.load(&quot;images/food.png&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Food,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;println!(&quot;Snake Eat Food!&quot;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Змейка съела сама себя?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Тут можно применить более хитрый метод чем проверять у каждого сегмента змейки столкновение с головой. Для обработки проигрыша мы просто отфильтруем сегменты змейки и если сегментов с кординатами головы больше 1 то игра завершается.&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn game_over(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut app_exit_event_writer: EventWriter&lt;bevy::app::AppExit&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_query: Query&lt;&amp;Transform, With&lt;SnakeSegment&gt;&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let snake_head = snake_query.iter(&amp;#41;.last(&amp;#41;.unwrap(&amp;#41;.translation;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let skip_count = snake_query.iter(&amp;#41;.len(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- snake_query&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.iter(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.filter(|segment| segment.translation != snake_head&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.count(&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if skip_count &gt; 1 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app_exit_event_writer.send(bevy::app::AppExit&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;println!(&quot;Game Over!&quot;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Настройки порядка работы систем&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;App::new(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_plugins(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DefaultPlugins.set(WindowPlugin {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;primary_window: Some(Window {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title: String::from(&quot;Bevy Snake Game&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resolution: WindowResolution::new(WIDTH * SEGMENT_SIZE, HEIGHT * SEGMENT_SIZE&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.with_scale_factor_override(1.&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.insert_resource(FixedTime::new_from_secs(1. / 10.&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.init_resource::&lt;Snake&gt;(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.init_resource::&lt;SnakeDirection&gt;(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_event::&lt;SnakeGrowthEvent&gt;(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_startup_system(spawn_camera&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_startup_system(spawn_default_snake&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_startup_system(spawn_default_food&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_system(bevy::window::close_on_esc&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_system(snake_direction_input&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_system(snake_growth_event_handler&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_systems(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_movement,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_eat_food.after(snake_movement&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;game_over.after(snake_movement&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.in_schedule(CoreSchedule::FixedUpdate&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.run(&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Для того что бы змейка двигалась не так быстро создадим ресурс с фиксированным временем. Далее вместо поочерёдного добавление систем. Используем функцию добавление пачки систем и объеденим из Schedule. Такой способ позволет настроить порядок запуска систем и как часто они запускаются. В нашем случае необходимо что бы система движение всегда была перед система поедания и проигрыша.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Послесловие&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Ещё хочу обратить внимание что при таком подходе нужно как можно больше разбивать логику работы на мелкие системы, тогда движок будет работать на все сто. Движок очень молодой (ему вот только 3 года), бесплатный, так что специально не обращал внимание на некоторые особенности API так они крайне часто меняются (тут версия 0.10.1). Но как по мне явно перспективный, явно не будет брошен, всё таки 25 тысяч звёзд на гитхабе о чём то говорит (к примеру у libgdx за всё его время существования в почти 13 лет только 21 тысяча).&lt;br /&gt;&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerCNOc87&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerCNOc87&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCNOc87&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCNOc87&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerCNOc87&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerCNOc87&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerCNOc87&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerCNOc87&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerCNOc87&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;img src=&quot;https://cdn.imgchest.com/files/w7pjczwk9z7.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Добавлено&lt;/b&gt; (29 Июня 2023, 18:04)&lt;br /&gt;---------------------------------------------&lt;br /&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;&lt;span style=&quot;color:red&quot;&gt;Простейший графический интерфейс&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Создание простейшего меню&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для создания графического интерфейса будем использовать встроенные функции движка Bevy UI. Графический интерфейс ещё достаточно сыроват (на момент версии 0.10.1) и код будет выглядеть достаточно громоздко но в общем полностью выполняет необходимые требования + возможна полная кастомизация внешнего вида.&lt;br /&gt;&lt;br /&gt;Первое что нам понадобиться это дополнительный файл main_menu.rs (или лучше просто menu.rs, так больше подходит стилистике Rust кода)...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Небольшое отступление: структура и организация проекта для Bevy на данный момент это та ещё головная боль, поэтому такое разделение не является самым лучшим, но для небольших проектов вполне себе подойдёт.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;...после создания файла с меню нам нужно подключить файл к основному (к примеру IntelliJ IDEA сама предложит подключение), сделать это так:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;mod main_menu;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Это указывает компилятору видимость данного файла но важно - не само содержимое файла.&lt;br /&gt;&lt;br /&gt;Создадим в main_menu.rs структуру:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;pub struct MainMenuPlugin;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;И указываем возможность его использования в main.rs:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;use crate::main_menu::MainMenuPlugin;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Теперь когда базовая настройка завершена перейдём к логике.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Состояния&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Состояния это обычный enum с перечислением всех возможных вариантов.&lt;br /&gt;&lt;br /&gt;Нам подойдёт такой:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;#&amp;#91;derive(Debug, Default, Clone, Eq, PartialEq, Hash, States&amp;#41;]&lt;br /&gt;enum AppState {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;#91;default]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Menu,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Game,&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Для того что бы Bevy понял что это состояния необходимо указать черту States.&lt;br /&gt;&lt;br /&gt;Вас могут испугать остальной набор атрибутов, но с помощью &quot;cargo check&quot; довольно просто понять какие именно нам необходимы - он сам нам их предложит.&lt;br /&gt;&lt;br /&gt;И добавляем:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;.add_state::&lt;AppState&gt;(&amp;#41;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Условия выполнения систем&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;К сожалению на текущей версии движка 0.10.1 не очень удобно задавать условия выполнения систем.&lt;br /&gt;&lt;br /&gt;Обратите внимание что на скриншоте ниже ошибок нету, но такой способ всё равно работать не будет.&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerE3F6f6&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerE3F6f6&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerE3F6f6&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerE3F6f6&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerE3F6f6&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerE3F6f6&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerE3F6f6&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerE3F6f6&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerE3F6f6&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;img src=&quot;https://cdn.imgchest.com/files/345xc62mer7.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;Вместо этого нам придётся указать критерий конкретной системе:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_systems(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_movement.run_if(in_state(AppState::Game&amp;#41;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;snake_eat_food.after(snake_movement&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;game_over.after(snake_movement&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.in_schedule(CoreSchedule::FixedUpdate&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&lt;br /&gt;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;Это очень неудобно (хотя есть немного другие пути решение такого, но всё равно не очевидные и не удобны), очень надеюсь что в 0.11 это исправят.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Создание плагина&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Плагин в понятии Bevy это просто набор систем вынесенных в отдельное место. (Можно рассматривать как объект с функциями в ООП).&lt;br /&gt;&lt;br /&gt;Реализация плагина:&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;pub struct MainMenuPlugin;&lt;br /&gt;&lt;br /&gt;impl Plugin for MainMenuPlugin {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fn build(&amp;self, app: &amp;mut App&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_startup_system(spawn_main_menu&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.add_system(play_button_interaction&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Так же создадим компоненты...&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;#&amp;#91;derive(Component&amp;#41;]&lt;br /&gt;struct RootNode;&lt;br /&gt;&lt;br /&gt;#&amp;#91;derive(Component&amp;#41;]&lt;br /&gt;struct PlayButton;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;...для поиска самой кнопки &quot;Играть&quot; и корневого компонента этой кнопки.&lt;br /&gt;&lt;br /&gt;Сама модель UI строиться по логике Flexbox и предстовляет собой довольно гибкую систему, но слишком громоздкую для человеческого глаза и может очень легко спугнуть новичка.&lt;br /&gt;&lt;br /&gt;Создания кнопки:&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoiler8aeM9E&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoiler8aeM9E&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler8aeM9E&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler8aeM9E&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler8aeM9E&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoiler8aeM9E&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoiler8aeM9E&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoiler8aeM9E&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoiler8aeM9E&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn spawn_main_menu(mut commands: Commands, asset_server: Res&lt;AssetServer&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NodeBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style: Style {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size: Size::width(Val::Percent(100.&amp;#41;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;align_items: AlignItems::Center,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;justify_content: JustifyContent::Center,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RootNode,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.with_children(|parent| {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.spawn((&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ButtonBundle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;style: Style {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size: Size::new(Val::Px(300.&amp;#41;, Val::Px(130.&amp;#41;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;align_items: AlignItems::Center,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;justify_content: JustifyContent::Center,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background_color: BackgroundColor::from(Color::rgb(0.10, 0.1, 0.15&amp;#41;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PlayButton,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.with_children(|parent| {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent.spawn(TextBundle::from_section(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;Текст&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TextStyle {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font: asset_server.load(&quot;fonts/EBGaramond08-Regular.otf&quot;&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;font_size: 40.,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color: Color::rgb(0.9, 0.9, 0.9&amp;#41;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;..default(&amp;#41;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#41;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;#41;;&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;Хотя с другой стороны трудно тут как либо прокомментировать, код сам себя объясняет. Единственное что отметить можно это логику: КорневойКомпонент -&gt; Кнопка -&gt; Текст.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:green&quot;&gt;&lt;span style=&quot;font-size:16pt;&quot;&gt;Взаимодействие с кнопками&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для взаимодействия с кнопкой нужно использовать запрос (Query) вместе с параметром Interaction (это enum со всеми возможными действиями над кнопкой) и компонентов &lt;ИмяНашейКнопочки&gt;.&lt;br /&gt;&lt;br /&gt;Так же не забываем использовать конструкцию...&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;if let Ok(...&amp;#41; = ... {}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;...что бы исключить ошибку если элемента не существует.&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;fn play_button_interaction(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut commands: Commands,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;menu_query: Query&lt;(&amp;Interaction, Entity&amp;#41;, With&lt;PlayButton&gt;&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mut state: ResMut&lt;NextState&lt;AppState&gt;&gt;,&lt;br /&gt;&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if let Ok((interaction, entity&amp;#41;&amp;#41; = menu_query.get_single(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;match interaction {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Interaction::Clicked =&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commands.entity(entity&amp;#41;.despawn_recursive(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;state.set(AppState::Game&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Interaction::Hovered =&gt; {}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Interaction::None =&gt; {}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;Сущность удаляем рекурсивно что бы его наследники тоже были удалены.&lt;br /&gt;&lt;br /&gt;На этом всё.&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;Долька арбуза? Мечта детства получить награду на Gcup выполнена!</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>minecrafter2</dc:creator>
			<guid>https://gcup.ru/forum/3-104081-1</guid>
		</item>
		<item>
			<title>Мнение о обучении.</title>
			<link>https://gcup.ru/forum/3-104067-1</link>
			<pubDate>Mon, 05 Jun 2023 13:16:24 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Поделитесь своим мнением о том, как правильно учится в ГД.&lt;br /&gt;Автор темы: Billguy&lt;br /&gt;Автор последнего сообщения: Matou&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Как вы думаете, лучше прочитать документацию к тому-же Юнити с начала и до конца, и тогда приступать к созданию первой игр? Или же лучше при создании игры смотреть в документации ориентируясь по темам, то что нужно вам в данный момент? Поделитесь, как вы считаете.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Billguy</dc:creator>
			<guid>https://gcup.ru/forum/3-104067-1</guid>
		</item>
		<item>
			<title>Есть ли игровые движки в которых можно работать на мобиле?</title>
			<link>https://gcup.ru/forum/3-103853-1</link>
			<pubDate>Tue, 02 Aug 2022 14:28:32 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: alexsilent&lt;br /&gt;Автор последнего сообщения: Robinzon787&lt;br /&gt;Количество ответов: 4</description>
			<content:encoded>Вчера выключили свет и думал, чем себя занять.&lt;br /&gt;Вспомнил что на андроидной мобиле есть Tic-80, немного потестил и задумался:&lt;br /&gt;Существуют ли конструкторы, фреймворки или движки для создания игр прямо на маленькой стандартной андроидной мобиле&lt;br /&gt;плюс тут ещё и клавы отдельной нету?!&lt;br /&gt;&lt;br /&gt;PS Просто Tic-80 это даже не совсем движок, а просто фентези консоль,&lt;br /&gt;ещё и кажется не умеет компилировать билды внутри андроида, или вообще под андроид, я не проверял, но кажется где-то читал</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>alexsilent</dc:creator>
			<guid>https://gcup.ru/forum/3-103853-1</guid>
		</item>
		<item>
			<title>Unity или Godot</title>
			<link>https://gcup.ru/forum/3-103218-1</link>
			<pubDate>Mon, 07 Jun 2021 19:58:14 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Хочу сделать Онлайн войнушку с серверами&lt;br /&gt;Автор темы: PixelG79&lt;br /&gt;Автор последнего сообщения: Nobe&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>Хочу сделать Онлайн войнушку с серверами, но не знаю что выбрать для этого.&lt;br /&gt;Unity или Godot?????? &lt;img rel=&quot;usm&quot; src=&quot;https://gcup.ru/SML/cry.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:&apos;(&quot; /&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>PixelG79</dc:creator>
			<guid>https://gcup.ru/forum/3-103218-1</guid>
		</item>
		<item>
			<title>3d webgl движок для сайта</title>
			<link>https://gcup.ru/forum/3-103102-1</link>
			<pubDate>Sun, 24 Jan 2021 12:18:59 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Ищу движок для небольших  анимаций 3д моделей на сайте&lt;br /&gt;Автор темы: abramowsergey1992&lt;br /&gt;Автор последнего сообщения: E1e5en&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Для украшения сайта нужен небольшой легкий движок&lt;br /&gt;Задачи будут примерно такого уровня: сделать 3d цепь с грузом и двигать наведением курсора мыши&lt;br /&gt;Главное что требуется максимальная простота вывода в хтмл&amp;#92;простота изучения и скорость работы&lt;br /&gt;&lt;br /&gt;Сейчас выбираю между Годот и Юнити но может есть еще какие нибудь варианты??&lt;br /&gt;ThreeJS не предлагать, нужен именно визуальный редактор&lt;br /&gt;&lt;br /&gt;Всем спасибо!!!</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>abramowsergey1992</dc:creator>
			<guid>https://gcup.ru/forum/3-103102-1</guid>
		</item>
		<item>
			<title>Помогите выбрать unity или UE4?</title>
			<link>https://gcup.ru/forum/3-103094-1</link>
			<pubDate>Tue, 19 Jan 2021 17:55:01 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Хочу определиться в каком именно направлении развиваться&lt;br /&gt;Автор темы: Andrew01&lt;br /&gt;Автор последнего сообщения: Andrew01&lt;br /&gt;Количество ответов: 6</description>
			<content:encoded>Привет всем, суть вопроса состоит в том, в каком направлении можно себя лучше реализовать, я имею ввиду возможность найти работу, каковы шансы?&lt;br /&gt;Сам я по образованию не связан с программированием, занимался просто для себя в свободное время, перспектив карьерного роста (следовательно и финансового) в моей сфере нет, хочу что-то изменить в жизни, поэтому вытекает второй вопрос: &lt;br /&gt;- какие курсы лучше пройти? Понимаю, что нужен хоть какой-то документ, подтверждающий, что я чему-то учился. Из всех онлайн ресурсов остановился на Skillbox, у них как мне показалось, более углубленно обучают по этим программам, обещают уровень middle. Пугает цена обучения и отзывы в интернете, многие не советуют вообще связываться с такими ресурсами. &lt;br /&gt;Кто-нибудь сталкивался с этим университетом? Реально ли устроиться на работу с их сертификатом, хотя бы как junior?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Andrew01</dc:creator>
			<guid>https://gcup.ru/forum/3-103094-1</guid>
		</item>
		<item>
			<title>Godot как сделать AtlasTexture или LargeTexture</title>
			<link>https://gcup.ru/forum/3-101522-1</link>
			<pubDate>Wed, 14 Oct 2020 19:40:34 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: alexsilent&lt;br /&gt;Автор последнего сообщения: CheyenneBobo&lt;br /&gt;Количество ответов: 6</description>
			<content:encoded>Решил я заняться обучением Годота, но у меня тут встал вопрос: &lt;b&gt;как сделать AtlasTexture или LargeTexture?&lt;/b&gt;&lt;br /&gt;Не гуглятся уроки на ютюбе, и в документации лишь сказано как программировать под это, но не как конвертировать.&lt;br /&gt;&lt;br /&gt;Не понимаю как конвертировать из обычной текстуры, хочу использовать AnimatedSprite , но не с отдельными текстурами на каждый кадр (ибо для оптимизации плохо), а с большой текстурой одной, чтоб там все кадры были. Вариант с другим аниматором мне не нравится, там не видно какие кадры используются.&lt;br /&gt;&lt;br /&gt;PS у меня версия 3.0.6</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>alexsilent</dc:creator>
			<guid>https://gcup.ru/forum/3-101522-1</guid>
		</item>
		<item>
			<title>Как на счет Coppercube 6 ?</title>
			<link>https://gcup.ru/forum/3-100816-1</link>
			<pubDate>Fri, 28 Aug 2020 13:54:23 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Что вы думаете на счет Coppercube 6&lt;br /&gt;Автор темы: COOLGAMER&lt;br /&gt;Автор последнего сообщения: graveman&lt;br /&gt;Количество ответов: 13</description>
			<content:encoded>Что вы думаете на счет Coppercube 6 стоит ли его брать для 3d шутера типа half life или Doom3 и знаете ли вы хороший обучающий материал по этому движку ?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>COOLGAMER</dc:creator>
			<guid>https://gcup.ru/forum/3-100816-1</guid>
		</item>
		<item>
			<title>Выбор движка для 3d игры с серверной частью</title>
			<link>https://gcup.ru/forum/3-102563-1</link>
			<pubDate>Sun, 09 Aug 2020 10:31:48 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: помощь в выборе движка&lt;br /&gt;Автор темы: Polygon&lt;br /&gt;Автор последнего сообщения: Burnout&lt;br /&gt;Количество ответов: 10</description>
			<content:encoded>Добрый день! &lt;br /&gt;Я только открываю для себя эту тему, очень интересную для меня. &lt;br /&gt;Движки есть разные, понять что именно мне нужно сложно. Хотелось подобрать максимально подходящий и уже плотно заняться его изучением. &lt;br /&gt;Хочу создать 3D игру своей квартиры и в ней видеть состояние светильников, показаний счетчика)) &lt;br /&gt;Я написал ряд вопросов, которые, как мне кажется, отразят суть моих пожеланий, и по ответам на них определиться с движком. &lt;br /&gt;На форуме этом я впервые, потому не знаю, в какой форме это лучше сделать) Но попробую, очень надеюсь, что получу представление, выберу и начну разбираться. С благодарностью приму любые ответы.&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:46)&lt;br /&gt;---------------------------------------------&lt;br /&gt;1	Поддерживается ли клиент-серверная архитектура игры? Т.е. обязательно ЛОКАЛЬНО может ли на ПК с Windows распологаться сервер, к которому могут по IP:порт подключаться с других компьютеров и мобильных устройств клиенты к этому серверу?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:47)&lt;br /&gt;---------------------------------------------&lt;br /&gt;2	При локальном сервере с игрой, может её использование оказаться платным?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:47)&lt;br /&gt;---------------------------------------------&lt;br /&gt;3	Будут ли ограничения по кол-ву подключенных клиентов к локальному серверу в бесплатном режиме?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:47)&lt;br /&gt;---------------------------------------------&lt;br /&gt;4	Клиентская часть игры может работать на Windows, iOs, Android?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;5	Можно ли создавать (импортировать) объекты в игру, например из 3D Max?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;6	Могут ли импортированные объекты быть интерактивными? Например я нарисую счетчик электроэнергии, на дисплее которого будут меняться показания. Или я внесу светильник, который может быть включенным или выключенным?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;7	Есть ли возможность в серверном приложении создать TCP клиента и сервера и обмениваться данными с другим ПО на этом или ином компьютере?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;7.1	По результату обмена данными по TCP может ли меняться игровое пространство? Например по TCP пришло состояние светильника - включено, сервер игры это принял, включил светильник, и на клиентском устройстве я увидел горящую лампу&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;7.2	На счетчике электроэнергии изменились показания, по TCP мое ПО отправило их не сервер игры, а и игре на табло счетчика, если к нему подлететь можно увидеть актуальные показания&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:48)&lt;br /&gt;---------------------------------------------&lt;br /&gt;8	Размещенная серверная часть игры при своей работе может находиться в трее, чтобы на компьютере можно было работать?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:49)&lt;br /&gt;---------------------------------------------&lt;br /&gt;9	Надежна ли работа сервера, не уходит ли неожиданно в обновления или еще какие-нибудь сбои&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:49)&lt;br /&gt;---------------------------------------------&lt;br /&gt;10	На сколько дорого (в плане библиотек элементов или еще чего угодно) создать игру на данной платформе?&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 11:52)&lt;br /&gt;---------------------------------------------&lt;br /&gt;Готов платно проконсультироваться по этим вопросам, как знать, может и дальше что-нибудь закажу при разработке.&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 Мая 2020, 12:01)&lt;br /&gt;---------------------------------------------&lt;br /&gt;11 Нужна возможность при клике в игре на камеру вывести на экран поток с неё</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Polygon</dc:creator>
			<guid>https://gcup.ru/forum/3-102563-1</guid>
		</item>
		<item>
			<title>Godot, Unity или Unreal Engine 4?</title>
			<link>https://gcup.ru/forum/3-102719-1</link>
			<pubDate>Sun, 09 Aug 2020 10:25:56 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Выбор движка&lt;br /&gt;Автор темы: AlexandrI88&lt;br /&gt;Автор последнего сообщения: Burnout&lt;br /&gt;Количество ответов: 25</description>
			<content:encoded>Доброго всем времени суток, выбираю движок, и выбрать затрудняюсь.&lt;br /&gt;Я желаю сделать 3D Top Down Shooter с разрушаемостью, языки програмирования пока не учил, но готов.&lt;br /&gt;Цель: сделать свою игру, на кого-то работать в индустрии далее я не хочу.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>AlexandrI88</dc:creator>
			<guid>https://gcup.ru/forum/3-102719-1</guid>
		</item>
		<item>
			<title>Конструктор РПГ  RPGWizard</title>
			<link>https://gcup.ru/forum/3-101899-1</link>
			<pubDate>Sat, 25 Apr 2020 23:31:13 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Что за лицензия движка, какие права у разработчика игр&lt;br /&gt;Автор темы: COOLGAMER&lt;br /&gt;Автор последнего сообщения: drcrack&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>Как вам этот движок игр ?&lt;br /&gt;&lt;br /&gt;Правильно я понял что игры созданные на нем для бесплатного распространения с обязанностью предоставить исходный код игры ?&lt;br /&gt;&lt;br /&gt;https://gcup.ru/load/constructors/rpgwizard/2-1-0-2700</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>COOLGAMER</dc:creator>
			<guid>https://gcup.ru/forum/3-101899-1</guid>
		</item>
		<item>
			<title>google play service в движках</title>
			<link>https://gcup.ru/forum/3-102255-1</link>
			<pubDate>Sun, 19 Jan 2020 11:40:25 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: afq&lt;br /&gt;Автор последнего сообщения: slagusev&lt;br /&gt;Количество ответов: 1</description>
			<content:encoded>Например я хочу использовать &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://developers.google.com/games/services/downloads/sdks?hl=ru&quot; title=&quot;https://developers.google.com/games/services/downloads/sdks?hl=ru&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt; sdk с c++ библиотекой. Но в c++ библиотеке написано, что real-time и turn-based multiplayer устарел. А как в unity это, тоже устарело? Я не совсем понимаю как мне сделать мультиплеер между несколькими участниками в google play service.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>afq</dc:creator>
			<guid>https://gcup.ru/forum/3-102255-1</guid>
		</item>
		<item>
			<title>Кто знает это про Buildbox ?</title>
			<link>https://gcup.ru/forum/3-102246-1</link>
			<pubDate>Sat, 18 Jan 2020 17:03:55 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: про Buildbox&lt;br /&gt;Автор темы: COOLGAMER&lt;br /&gt;Автор последнего сообщения: COOLGAMER&lt;br /&gt;Количество ответов: 13</description>
			<content:encoded>Всем привет вот интересует что за ограничения у конструктора которые выделены в красном прямоугольнике&lt;br /&gt;&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilereETFtr&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilereETFtr&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilereETFtr&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilereETFtr&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilereETFtr&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilereETFtr&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilereETFtr&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilereETFtr&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilereETFtr&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://ibb.co/27Zm8Mz&quot; title=&quot;https://ibb.co/27Zm8Mz&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://i.ibb.co/PZD3TW2/2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>COOLGAMER</dc:creator>
			<guid>https://gcup.ru/forum/3-102246-1</guid>
		</item>
		<item>
			<title>Defold как сделать низкое разрешение с оконным режимом</title>
			<link>https://gcup.ru/forum/3-102197-1</link>
			<pubDate>Wed, 25 Dec 2019 01:57:57 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: alexsilent&lt;br /&gt;Автор последнего сообщения: alexsilent&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>А может кто знает, можно ли в &lt;b&gt;Defold &lt;/b&gt;очень быстро создать игру с&lt;br /&gt;1) низким разрешением, pixelperfect (все пиксели чёткие и желательно квадратные)&lt;br /&gt;2) чтобы был оконный режим&lt;br /&gt;3) разблокированная кнопка окна &quot;Развернуть&quot;, и возможность менять размер окна вручную мышкой потащив за край окна,&lt;br /&gt;и как бы не менял окно, то виртуальное разрешение всегда оставалось бы одинаковым&lt;br /&gt;PS для меня, это самые удобные настройки для маленьких инди игр с низким разрешением, можно играть в офисе,&lt;br /&gt;в любой момент развернуть и свернуть, никакого полноэкранного режима, можно и без Alt+Tab сворачивать игру&lt;br /&gt;&lt;br /&gt;а то там как-то сложно, то ли нужно писать скрипт для отдельного режима, то ли я просто не разобрался,&lt;br /&gt;я сам не программер, и не люблю тонкости программирования, но спокойно пишу код на Tic-80 и Lua</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>alexsilent</dc:creator>
			<guid>https://gcup.ru/forum/3-102197-1</guid>
		</item>
		<item>
			<title>godot чем хуже unity 3d?</title>
			<link>https://gcup.ru/forum/3-100181-1</link>
			<pubDate>Wed, 02 Oct 2019 09:41:41 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: godot - какие отзывы дадите ему&lt;br /&gt;Автор темы: sks00121&lt;br /&gt;Автор последнего сообщения: martuk&lt;br /&gt;Количество ответов: 17</description>
			<content:encoded>Что лучше для новичка и удобнее для простейшего платформера(3d)?&lt;br /&gt;&lt;br /&gt;И для 2.5d гонок, по типу тех что на сега были - что проще для обучения программированию в целом, из этих движков?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>sks00121</dc:creator>
			<guid>https://gcup.ru/forum/3-100181-1</guid>
		</item>
		<item>
			<title>Движок 2MOON</title>
			<link>https://gcup.ru/forum/3-101875-1</link>
			<pubDate>Mon, 22 Jul 2019 18:50:56 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Создал сайт на этом движке&lt;br /&gt;Автор темы: laxre&lt;br /&gt;Автор последнего сообщения: laxre&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Создал сайт на движке 2moon, 2 года убирал только одни баги, только не давно его запустил если кому интересно вот ссылка http://darkhorizons.ru если кто то занимается этим же движком пишете в месте веселее.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>laxre</dc:creator>
			<guid>https://gcup.ru/forum/3-101875-1</guid>
		</item>
		<item>
			<title>Кто знает как сделать 3д шутер на DarkPlaces engine ?</title>
			<link>https://gcup.ru/forum/3-101704-1</link>
			<pubDate>Wed, 22 May 2019 18:04:53 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: 3д шутер на DarkPlaces engine&lt;br /&gt;Автор темы: COOLGAMER&lt;br /&gt;Автор последнего сообщения: drcrack&lt;br /&gt;Количество ответов: 17</description>
			<content:encoded>Вот я задумал сделать 3д шутер на движке DarkPlaces engine а как начать понятия не имею.&lt;br /&gt;&lt;br /&gt;Может кто знает как это можно сделать. &lt;img rel=&quot;usm&quot; src=&quot;https://gcup.ru/SML/cry.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:&apos;(&quot; /&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>COOLGAMER</dc:creator>
			<guid>https://gcup.ru/forum/3-101704-1</guid>
		</item>
		<item>
			<title>Godot можно ли сделать Pixelperfect прямо в окне редактора</title>
			<link>https://gcup.ru/forum/3-101630-1</link>
			<pubDate>Sat, 13 Apr 2019 15:27:29 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: alexsilent&lt;br /&gt;Автор последнего сообщения: pixeye&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>В Godot, можно ли сделать Pixelperfect прямо в окне редактора?&lt;br /&gt;В игре при запуске он имеется, но в редакторе приходится на глаз размещать объекты,&lt;br /&gt;есть ли там какой-то корректировщик пикселей?&lt;br /&gt;&lt;br /&gt;Пытался загуглить, но меня в какие-то другие темы гугл уводит, просто про pixelperfect или уровни в целом.&lt;br /&gt;&lt;br /&gt;Криво пиксели друг к другу подходят в редакторе, приходится каждый раз на глаз подравнивать &lt;br /&gt;или каждый раз лезть в Transform.&lt;br /&gt;&lt;img src=&quot;https://i.imgur.com/ySPDUlql.png&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>alexsilent</dc:creator>
			<guid>https://gcup.ru/forum/3-101630-1</guid>
		</item>
		<item>
			<title>Движок, которого не хватает</title>
			<link>https://gcup.ru/forum/3-101607-1</link>
			<pubDate>Sat, 06 Apr 2019 17:34:42 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Почему его нет, и что может помешать сделать&lt;br /&gt;Автор темы: andycopper&lt;br /&gt;Автор последнего сообщения: TimKruz&lt;br /&gt;Количество ответов: 7</description>
			<content:encoded>Всем привет. Я очень давно сижу в ридонли на этом сайте, и всяких тем уже тут повидал. Но есть тред, который я был бы рад с вами обсудить, потому что чем больше я о нем думаю, тем безумнее ме кажется эта мысль, а это уже верный признак того, что мысль достойная. Прошу меня сразу простить за высокопарную графоманию - я не технарь, и мыслю абстрактными категориями.&lt;br /&gt;&lt;br /&gt;Вкратце суть треда - на рынке игровых движков &lt;u&gt;&lt;b&gt;нет&lt;/b&gt;&lt;/u&gt; движков с возможностью создавать кроссплатформенные игры &lt;u&gt;&lt;b&gt;без&lt;/b&gt;&lt;/u&gt; каких либо знаний программирования. Сейчас все скажут, что ну как же - юнити с плеймейкером, ue c блюпринтами, годот с визуальным скриптингом, простигосподи coppercube c его смешным набором пресетов поведений - однако же полноценную законченную игру в этом всем можно сделать только подключив знания какого либо ЯП, потому как изначально эти движки были заточены под высокоуровневую разработку, а блюпринт система была реализована как &quot;костыль&quot;, прошу прощения за грубость.&lt;br /&gt;&lt;br /&gt;Есть огромная серьезная ниша с невероятно обширной аудиторией, которой не жалко отдавать денег из своих карманов, лишь бы делать игры без программирования. На рынке игровых движков и различных эдиторов есть прослойка, в которую до сих пор никто по нормальному не влез - или не допрыгивают, или перерастают. Чтобы не томить своим монологом - на рынке полно игровых редакторов, но все они делятся на три части: это 2D конструктор, это 3D движок, и 2D/3D кадавр движка-с-конструктором.&lt;br /&gt;&lt;br /&gt;Редакторы и конструкторы 2Д игр имеют максимально низкий порог входа и позволяют сделать ну просто что угодно, но только в двумерной плоскости.&lt;br /&gt;&lt;br /&gt;Движки с 3D позволяют накодить вообще что захочешь, но только если ты знаешь ЯП, а как показывает мой (сугубо личный) 10летний опыт - когда ты знаешь ЯП, у тебя &quot;провисает&quot; все остальное(начиная от унылой истории в сюжетах и идеях, заканчивая безвкусицей во внешнем виде всего этого), а когда ты умеешь все остальное - ты не знаешь ЯП, а значит и геймдевелопер из тебя так себе. &lt;br /&gt;&lt;br /&gt;Кадавры - это прекрасное сочетания красоты и извращения в одном лице, которое происходит тогда, когда люди с программным складом ума пытаются сделать &quot;удобно&quot; - в таких движках/редакторах появляется &quot;визуальное программирование&quot;. Я нахожу это апогеем самобичевания в геймдеве.&lt;br /&gt;&lt;br /&gt;Сейчас важная информация: я не говорю что существующие решения плохи. Они прекрасны, без шуток, это все - рабочие инструменты. Но так или иначе - все было придумано и создано людьми, а значит может ими же быть и улучшено.&lt;br /&gt;&lt;br /&gt;Так вот. За 10 лет я не встретил ни одного движка, позволяющего делать недурные разножанровые игры/приложения без единой строчки кода. Я не говорю про игры ААА-уровня - я не нашел движка который бы позволил делать трехмерную игру любого жанра пусть даже с пятилетним опозданием по качеству выдаваемой графики - ближе всего к этому приблизились GameGuru и CopperCube, но первый крайне ограничен в каких-то примитивных вещах и требует знания Lua, а второй просто перестал поддерижваться разрабами, не успев обрасти сообществом (хотя и требует знаний всего то навсего JS).&lt;br /&gt;&lt;br /&gt;Есть прекрасный Construct 2/3 , позволяющий делать любые 2Д шедевры без единой строчки кода - не редактор, а гимн домашнему геймдеву. Всем известный ГеймМейкер - нестареющая классика, которая тоже может в 2Д/3Д почти без кода. Или другая крайность - Популярный и раскрученный Юнити с массой контента к нему - все прекрасно, но без C#/C++ на плеймекерах и прочих блюпринтах к нему, далеко не уедешь. И чем дальше в лес, тем больше дров с программированием. Это не плохо. Но я вижу в этом незанятую нишу.&lt;br /&gt;&lt;br /&gt;Собственно, может быть кто-то опровергнет мои догадки и посоветует инструмент, в котором ЯП не обязательное условие для создания интерактивных трехмерных сцен? Или возможно знает, людей, которые промышляют подобными разработками - я бы с радостью на добровольных началах вклинился бы в их процесс разработки, чтобы помочь им сделать user friendly инструмент разработки с минимальным порогом входа. Чтобы этот инструмент не уступал в нем гейммейкерам и C2/С3. &lt;br /&gt;Конечно, без программирования никуда, нельзя от этого отказываться. Но. Почему никто до сих пор не занял пустующую нишу игровым редактором в трехмерном измерении с возможностью делать игры без единой строчки кода с самого нуля? &lt;br /&gt;Что мешает собрать воедино возможные игровые сущности, использовать ту же концепцию с предопределенными поведениями как в С2, и дать возможность все это скриптовать простыми комбинациями &quot;событие - условие - действие&quot;? Разве игры все кардинально чем то отличаются друг от друга и не может быть простого игрового движка, в котором все это не нужно каждый раз писать с нуля?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>andycopper</dc:creator>
			<guid>https://gcup.ru/forum/3-101607-1</guid>
		</item>
		<item>
			<title>Как собрать проект (xray) в Visual studio 2017</title>
			<link>https://gcup.ru/forum/3-101052-1</link>
			<pubDate>Sat, 13 Oct 2018 05:19:35 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Пытался собрать данный проект под VS 2017&lt;br /&gt;Автор темы: Ddoc&lt;br /&gt;Автор последнего сообщения: Ddoc&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Пытался собрать данный проект под VS 2017, но был ряд проблем с которыми было не понятно. Прошу помощи в разъяснении!</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Ddoc</dc:creator>
			<guid>https://gcup.ru/forum/3-101052-1</guid>
		</item>
		<item>
			<title>Гиф в steamwork</title>
			<link>https://gcup.ru/forum/3-101031-1</link>
			<pubDate>Sun, 07 Oct 2018 10:01:48 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: ralfpro5&lt;br /&gt;Автор последнего сообщения: TLT&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Народ подскажите, пожалуйста как люди заливают гифки в свои игры в стиме, ведь гиф запрещен для заливки в описание стима, но как то это обходят.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>ralfpro5</dc:creator>
			<guid>https://gcup.ru/forum/3-101031-1</guid>
		</item>
		<item>
			<title>Посоветуйте движок или генератор ландшафтов</title>
			<link>https://gcup.ru/forum/3-98017-1</link>
			<pubDate>Wed, 02 May 2018 07:04:01 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Arcer&lt;br /&gt;Автор последнего сообщения: sfabrikan&lt;br /&gt;Количество ответов: 8</description>
			<content:encoded>Приветствую!&lt;br /&gt;&lt;br /&gt;Может кто нибудь посоветовать удобный движок или генератор ландшафтов для создания скриншота местности (размером 8К, а может и больше) с видом сверху. Скажем луг и сельская дорога или заснеженная долина с ледяным озером. Огромным плюсом была бы возможность добавления своих собственных текстур (например песок, снег и т.д.)&lt;br /&gt;&lt;br /&gt;В итоге хотелось бы получить что то типа такого:&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerfw_Bnp&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerfw_Bnp&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfw_Bnp&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfw_Bnp&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfw_Bnp&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerfw_Bnp&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerfw_Bnp&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerfw_Bnp&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerfw_Bnp&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?http://fastpic.ru/&quot; title=&quot;http://fastpic.ru/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://i89.fastpic.ru/big/2017/0327/0b/610357074d70347ab18601b508e00b0b.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;Благодарю за внимание!</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Arcer</dc:creator>
			<guid>https://gcup.ru/forum/3-98017-1</guid>
		</item>
		<item>
			<title>NeoAxis Engine SDK 3.4.1(DedicatedServer)</title>
			<link>https://gcup.ru/forum/3-100096-1</link>
			<pubDate>Mon, 26 Mar 2018 03:27:06 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: DedicatedServer доступ онлайн&lt;br /&gt;Автор темы: Aluexp32&lt;br /&gt;Автор последнего сообщения: sfabrikan&lt;br /&gt;Количество ответов: 9</description>
			<content:encoded>Привет всем! У меня вопрос может ли DedicatedServer быть доступным онлайн? Или код написан таким образом что доступ есть только по локальной сети?&lt;br /&gt;Я в код прописывал свой IP и порт пробросил порты у роутера, но при конекте подключаюсь и далее происходит разрыв связи (причина: не смогла установить соединение без ответа от удаленного хоста)&lt;br /&gt;Вот код сервера&lt;br /&gt;&lt;!--uSpoiler--&gt;&lt;div class=&quot;uSpoilerClosed&quot; id=&quot;uSpoilerhQVlXV&quot;&gt;&lt;div class=&quot;uSpoilerButBl&quot;&gt;&lt;input type=&quot;button&quot; class=&quot;uSpoilerButton&quot; onclick=&quot;if($(&apos;#uSpoilerhQVlXV&apos;)[0]){if ($(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerhQVlXV&apos;))[0].style.display==&apos;none&apos;){$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerhQVlXV&apos;))[0].style.display=&apos;&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerhQVlXV&apos;)).val(&apos;Закрыть спойлер&apos;);$(&apos;#uSpoilerhQVlXV&apos;).attr(&apos;class&apos;,&apos;uSpoilerOpened&apos;);}else {$(&apos;.uSpoilerText&apos;,$(&apos;#uSpoilerhQVlXV&apos;))[0].style.display=&apos;none&apos;;$(&apos;.uSpoilerButton&apos;,$(&apos;#uSpoilerhQVlXV&apos;)).val(&apos;Открыть спойлер&apos;);$(&apos;#uSpoilerhQVlXV&apos;).attr(&apos;class&apos;,&apos;uSpoilerClosed&apos;);}}&quot; value=&quot;Открыть спойлер&quot;/&gt;&lt;/div&gt;&lt;div class=&quot;uSpoilerText&quot; style=&quot;display:none;&quot;&gt;&lt;!--ust--&gt;&lt;br /&gt;// Copyright &amp;copy; NeoAxis Group Ltd. This is part of NeoAxis 3D Engine SDK.&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using ProjectCommon;&lt;br /&gt;using WinFormsAppFramework;&lt;br /&gt;using Engine;&lt;br /&gt;using Engine.FileSystem;&lt;br /&gt;using Engine.Renderer;&lt;br /&gt;using Engine.EntitySystem;&lt;br /&gt;using Engine.MapSystem;&lt;br /&gt;using Engine.MathEx;&lt;br /&gt;using Engine.Utils;&lt;br /&gt;using Engine.Networking;&lt;br /&gt;using ProjectEntities;&lt;br /&gt;&lt;br /&gt;namespace DedicatedServer&lt;br /&gt;{&lt;br /&gt;public partial class MainForm : Form&lt;br /&gt;{&lt;br /&gt;[Config( &quot;DedicatedServer&quot;, &quot;lastMapName&quot; )]&lt;br /&gt;static string lastMapName = &quot;Maps&amp;#92;&amp;#92;Village Demo&amp;#92;&amp;#92;Map&amp;#92;&amp;#92;Map.map&quot;;&lt;br /&gt;&lt;br /&gt;[Config( &quot;DedicatedServer&quot;, &quot;loadMapAtStartup&quot; )]&lt;br /&gt;static bool loadMapAtStartup;&lt;br /&gt;&lt;br /&gt;[Config( &quot;DedicatedServer&quot;, &quot;allowCustomClientCommands&quot; )]&lt;br /&gt;static bool allowCustomClientCommands = true;&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;public MainForm()&lt;br /&gt;{&lt;br /&gt;InitializeComponent();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonClose_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;Close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonCreate_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;Create();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonDestroy_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;Destroy();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void MainForm_Load( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;//NeoAxis initialization&lt;br /&gt;EngineApp.ConfigName = &quot;user:Configs/DedicatedServer.config&quot;;&lt;br /&gt;EngineApp.ReplaceRenderingSystemComponentName = &quot;RenderingSystem_NULL&quot;;&lt;br /&gt;EngineApp.ReplaceSoundSystemComponentName = &quot;SoundSystem_NULL&quot;;&lt;br /&gt;if( !WinFormsAppWorld.Init( new WinFormsAppEngineApp( EngineApp.ApplicationTypes.Simulation ), this,&lt;br /&gt;&quot;user:Logs/DedicatedServer.log&quot;, true, null, null, null, null ) )&lt;br /&gt;{&lt;br /&gt;Close();&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;WinFormsAppEngineApp.Instance.AutomaticTicks = false;&lt;br /&gt;&lt;br /&gt;Engine.Log.Handlers.InfoHandler += delegate( string text, ref bool dumpToLogFile )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Log: &quot; + text );&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Engine.Log.Handlers.ErrorHandler += delegate( string text, ref bool handled, ref bool dumpToLogFile )&lt;br /&gt;{&lt;br /&gt;handled = true;&lt;br /&gt;timer1.Stop();&lt;br /&gt;MessageBox.Show( text, &quot;Error&quot;, MessageBoxButtons.OK, MessageBoxIcon.Warning );&lt;br /&gt;timer1.Start();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Engine.Log.Handlers.FatalHandler += delegate( string text, string createdLogFilePath,&lt;br /&gt;ref bool handled )&lt;br /&gt;{&lt;br /&gt;handled = true;&lt;br /&gt;timer1.Stop();&lt;br /&gt;MessageBox.Show( text, &quot;Fatal&quot;, MessageBoxButtons.OK, MessageBoxIcon.Warning );&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;//register config fields of this class&lt;br /&gt;EngineApp.Instance.Config.RegisterClassParameters( GetType() );&lt;br /&gt;&lt;br /&gt;//generate map list&lt;br /&gt;{&lt;br /&gt;string[] mapList = VirtualDirectory.GetFiles( &quot;&quot;, &quot;*.map&quot;, SearchOption.AllDirectories );&lt;br /&gt;foreach( string mapName in mapList )&lt;br /&gt;{&lt;br /&gt;//check for network support&lt;br /&gt;if( VirtualFile.Exists( string.Format( &quot;{0}&amp;#92;&amp;#92;NoNetworkSupport.txt&quot;,&lt;br /&gt;Path.GetDirectoryName( mapName ) ) ) )&lt;br /&gt;{&lt;br /&gt;continue;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;comboBoxMaps.Items.Add( mapName );&lt;br /&gt;if( mapName == lastMapName )&lt;br /&gt;comboBoxMaps.SelectedIndex = comboBoxMaps.Items.Count - 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;comboBoxMaps.SelectedIndexChanged += comboBoxMaps_SelectedIndexChanged;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;checkBoxLoadMapAtStartup.Checked = loadMapAtStartup;&lt;br /&gt;checkBoxAllowCustomClientCommands.Checked = allowCustomClientCommands;&lt;br /&gt;&lt;br /&gt;//load map at startup&lt;br /&gt;if( loadMapAtStartup &amp;&amp; comboBoxMaps.SelectedItem != null )&lt;br /&gt;{&lt;br /&gt;Create();&lt;br /&gt;string mapName = comboBoxMaps.SelectedItem as string;&lt;br /&gt;if( !MapLoad( mapName ) )&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void MainForm_FormClosed( object sender, FormClosedEventArgs e )&lt;br /&gt;{&lt;br /&gt;Destroy();&lt;br /&gt;&lt;br /&gt;//NeoAxis shutdown&lt;br /&gt;WinFormsAppWorld.Shutdown();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Create()&lt;br /&gt;{&lt;br /&gt;if( GameNetworkServer.Instance != null )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Error: Server already created&quot; );&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;GameNetworkServer server = new GameNetworkServer( &quot;NeoAxis Game Server&quot;,&lt;br /&gt;EngineVersionInformation.Version, 128, true );&lt;br /&gt;&lt;br /&gt;server.UserManagementService.AddUserEvent += UserManagementService_AddUserEvent;&lt;br /&gt;server.UserManagementService.RemoveUserEvent += UserManagementService_RemoveUserEvent;&lt;br /&gt;server.ChatService.ReceiveText += ChatService_ReceiveText;&lt;br /&gt;server.CustomMessagesService.ReceiveMessage += CustomMessagesService_ReceiveMessage;&lt;br /&gt;&lt;br /&gt;int port = 9998;&lt;br /&gt;&lt;br /&gt;string error;&lt;br /&gt;if( !server.BeginListen( port, out error ) )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Error: &quot; + error );&lt;br /&gt;Destroy();&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Log( &quot;Server has been created&quot; );&lt;br /&gt;Log( &quot;Listening port {0}...&quot;, port );&lt;br /&gt;&lt;br /&gt;buttonCreate.Enabled = false;&lt;br /&gt;buttonDestroy.Enabled = true;&lt;br /&gt;buttonMapLoad.Enabled = true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;bool MapLoad( string fileName )&lt;br /&gt;{&lt;br /&gt;MapDestroy( false );&lt;br /&gt;&lt;br /&gt;Log( &quot;Loading map &amp;#92;&quot;{0}&amp;#92;&quot;...&quot;, fileName );&lt;br /&gt;&lt;br /&gt;WorldType worldType = EntitySystemWorld.Instance.DefaultWorldType;&lt;br /&gt;&lt;br /&gt;GameNetworkServer server = GameNetworkServer.Instance;&lt;br /&gt;if( !EntitySystemWorld.Instance.WorldCreate( WorldSimulationTypes.DedicatedServer,&lt;br /&gt;worldType, server.EntitySystemService.NetworkingInterface ) )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Error: EntitySystemWorld.Instance.WorldCreate failed.&quot; );&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if( !MapSystemWorld.MapLoad( fileName ) )&lt;br /&gt;{&lt;br /&gt;MapDestroy( false );&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//run simulation&lt;br /&gt;EntitySystemWorld.Instance.Simulation = true;&lt;br /&gt;&lt;br /&gt;GameNetworkServer.Instance.EntitySystemService.WorldWasCreated();&lt;br /&gt;&lt;br /&gt;Log( &quot;Map loaded&quot; );&lt;br /&gt;&lt;br /&gt;buttonMapLoad.Enabled = false;&lt;br /&gt;buttonMapUnload.Enabled = true;&lt;br /&gt;buttonMapChange.Enabled = true;&lt;br /&gt;&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MapDestroy( bool newMapWillBeLoaded )&lt;br /&gt;{&lt;br /&gt;bool mapWasDestroyed = Map.Instance != null;&lt;br /&gt;&lt;br /&gt;MapSystemWorld.MapDestroy();&lt;br /&gt;&lt;br /&gt;if( EntitySystemWorld.Instance != null )&lt;br /&gt;EntitySystemWorld.Instance.WorldDestroy();&lt;br /&gt;&lt;br /&gt;if( mapWasDestroyed )&lt;br /&gt;GameNetworkServer.Instance.EntitySystemService.WorldWasDestroyed( newMapWillBeLoaded );&lt;br /&gt;&lt;br /&gt;if( mapWasDestroyed )&lt;br /&gt;Log( &quot;Map destroyed&quot; );&lt;br /&gt;&lt;br /&gt;buttonMapLoad.Enabled = true;&lt;br /&gt;buttonMapUnload.Enabled = false;&lt;br /&gt;buttonMapChange.Enabled = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Destroy()&lt;br /&gt;{&lt;br /&gt;MapDestroy( false );&lt;br /&gt;&lt;br /&gt;if( GameNetworkServer.Instance != null )&lt;br /&gt;{&lt;br /&gt;GameNetworkServer.Instance.Dispose( &quot;The server has been destroyed&quot; );&lt;br /&gt;&lt;br /&gt;buttonCreate.Enabled = true;&lt;br /&gt;buttonDestroy.Enabled = false;&lt;br /&gt;buttonMapLoad.Enabled = false;&lt;br /&gt;buttonMapChange.Enabled = false;&lt;br /&gt;buttonMapUnload.Enabled = false;&lt;br /&gt;listBoxUsers.Items.Clear();&lt;br /&gt;&lt;br /&gt;Log( &quot;Server destroyed&quot; );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void Log( string text, params object[] args )&lt;br /&gt;{&lt;br /&gt;while( listBoxLog.Items.Count &gt; 300 )&lt;br /&gt;listBoxLog.Items.RemoveAt( 0 );&lt;br /&gt;int index = listBoxLog.Items.Add( string.Format( text, args ) );&lt;br /&gt;listBoxLog.SelectedIndex = index;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void timer1_Tick( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;GameNetworkServer server = GameNetworkServer.Instance;&lt;br /&gt;if( server != null )&lt;br /&gt;server.Update();&lt;br /&gt;&lt;br /&gt;if( WinFormsAppEngineApp.Instance != null )&lt;br /&gt;WinFormsAppEngineApp.Instance.DoTick();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void UserManagementService_AddUserEvent( UserManagementServerNetworkService sender,&lt;br /&gt;UserManagementServerNetworkService.UserInfo user )&lt;br /&gt;{&lt;br /&gt;Log( &quot;User connected: &quot; + user.ToString() );&lt;br /&gt;listBoxUsers.Items.Add( user );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void UserManagementService_RemoveUserEvent( UserManagementServerNetworkService sender,&lt;br /&gt;UserManagementServerNetworkService.UserInfo user )&lt;br /&gt;{&lt;br /&gt;listBoxUsers.Items.Remove( user );&lt;br /&gt;Log( &quot;User disconnected: &quot; + user.ToString() );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ChatService_ReceiveText( ChatServerNetworkService sender,&lt;br /&gt;UserManagementServerNetworkService.UserInfo fromUser, string text,&lt;br /&gt;UserManagementServerNetworkService.UserInfo privateToUser )&lt;br /&gt;{&lt;br /&gt;string userName = fromUser != null ? fromUser.Name : &quot;(null)&quot;;&lt;br /&gt;string toUserName = privateToUser != null ? privateToUser.Name : &quot;All&quot;;&lt;br /&gt;Log( &quot;Chat: {0} -&gt; {1}: {2}&quot;, userName, toUserName, text );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void comboBoxMaps_SelectedIndexChanged( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;lastMapName = comboBoxMaps.SelectedItem as string;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonDoSomething_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;MessageBox.Show( &quot;You can write code for testing here.&quot;, &quot;Warning&quot; );&lt;br /&gt;&lt;br /&gt;//example&lt;br /&gt;//MapObject mapObject = (MapObject)Entities.Instance.Create( &quot;Box&quot;, Map.Instance );&lt;br /&gt;//mapObject.Position = new Vec3( 0, 0, 30 );&lt;br /&gt;//mapObject.PostCreate();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void checkBoxLoadMapAtStartup_CheckedChanged( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;loadMapAtStartup = checkBoxLoadMapAtStartup.Checked;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonMapLoad_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;string mapName = comboBoxMaps.SelectedItem as string;&lt;br /&gt;if( string.IsNullOrEmpty( mapName ) )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Error: No map selected&quot; );&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if( !MapLoad( mapName ) )&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonMapUnload_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;MapDestroy( false );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void buttonMapChange_Click( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;MapDestroy( true );&lt;br /&gt;&lt;br /&gt;string mapName = comboBoxMaps.SelectedItem as string;&lt;br /&gt;if( string.IsNullOrEmpty( mapName ) )&lt;br /&gt;{&lt;br /&gt;Log( &quot;Error: No map selected&quot; );&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if( !MapLoad( mapName ) )&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void CustomMessagesService_ReceiveMessage( CustomMessagesServerNetworkService sender,&lt;br /&gt;NetworkNode.ConnectedNode source, string message, string data )&lt;br /&gt;{&lt;br /&gt;//Warning! Messages must be checked by security reasons.&lt;br /&gt;//Modified client application can send any message with any data.&lt;br /&gt;&lt;br /&gt;if( allowCustomClientCommands )&lt;br /&gt;{&lt;br /&gt;//load map&lt;br /&gt;if( message == &quot;Example_MapLoad&quot; )&lt;br /&gt;{&lt;br /&gt;string mapName = data;&lt;br /&gt;MapDestroy( true );&lt;br /&gt;if( !MapLoad( mapName ) )&lt;br /&gt;return;&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//create map object&lt;br /&gt;if( message == &quot;Example_CreateMapObject&quot; )&lt;br /&gt;{&lt;br /&gt;string[] parameters = data.Split( &apos;;&apos; );&lt;br /&gt;string typeName = parameters[ 0 ];&lt;br /&gt;Vec3 position = Vec3.Parse( parameters[ 1 ] );&lt;br /&gt;Quat rotation = Quat.Parse( parameters[ 2 ] );&lt;br /&gt;&lt;br /&gt;if( Map.Instance != null )&lt;br /&gt;{&lt;br /&gt;MapObject entity = (MapObject)Entities.Instance.Create( typeName, Map.Instance );&lt;br /&gt;entity.Position = position;&lt;br /&gt;entity.Rotation = rotation;&lt;br /&gt;entity.PostCreate();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void checkBoxAllowCustomClientCommands_CheckedChanged( object sender, EventArgs e )&lt;br /&gt;{&lt;br /&gt;allowCustomClientCommands = checkBoxAllowCustomClientCommands.Checked;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;!--/ust--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uSpoiler--&gt;&lt;br /&gt;&lt;br /&gt;https://drive.google.com/open?id=1TMMaGTX4-SaeVmHU9XUA_u1Qt4EPrNbo</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Aluexp32</dc:creator>
			<guid>https://gcup.ru/forum/3-100096-1</guid>
		</item>
		<item>
			<title>BigWorld</title>
			<link>https://gcup.ru/forum/3-77733-1</link>
			<pubDate>Fri, 23 Mar 2018 08:09:40 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: worldeditor&lt;br /&gt;Автор темы: Юзык&lt;br /&gt;Автор последнего сообщения: Aluexp32&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Разыскивается движок с хорошим редактором мира. Чтоб инструменты из коробки и графика реалистичная. Надо поднять реальную местность с окружением. &lt;br /&gt;Рассматриваю BigWorld и его worldeditor.&lt;br /&gt;а) - не получается одеть на террейн текстуру- космоснимок местности.&lt;br /&gt;При создании нового пространства задаю нужный размер террейна (он у меня 8х8км, 80х80 чанков), здесь же одеваю текстуру (мой космоснимок 8192х8192 пикс.) &lt;br /&gt;но в этом меню нет возможности растянуть ее на весь террейн.&lt;br /&gt;Мир создался, импортирую ему карту высот реальной местности. Рельеф создается, пробую растянуть фоту инструментом Terrain Texturing но &lt;br /&gt;у Scaling,а ограничение мах.100м (поз.1 скрина). Гизмо (поз.2) также растягивает только до 100м. Ограничивает, как я понимаю, размер стандартного чанка.&lt;br /&gt;Делать террейн одним пользовательским чанком 8000 на 8000 м? Это реально, последствия не смертельны?&lt;br /&gt;Пробую растянуть картинку инструментом Project View (поз.3) но он у меня почему-то заблокирован а как разблокировать не пойму.&lt;br /&gt;б)- огорчает вид теней от объектов.&lt;br /&gt;Кто хорошо знаком с BigWorld, скажите - &lt;br /&gt;а)- возможно ли растянуть фоту на весь террейн?&lt;br /&gt;б)- Возможно ли заполучить хорошие тени?&lt;br /&gt;&lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?http://pixs.ru/showimage/Bigjpg_1196865_22340135.jpg&quot; title=&quot;http://pixs.ru/showimage/Bigjpg_1196865_22340135.jpg&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://i9.pixs.ru/thumbs/1/3/5/Bigjpg_1196865_22340135.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;/&gt;&lt;/a&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Юзык</dc:creator>
			<guid>https://gcup.ru/forum/3-77733-1</guid>
		</item>
		<item>
			<title>Вопрос знатокам NeoAxis Engine</title>
			<link>https://gcup.ru/forum/3-99839-1</link>
			<pubDate>Fri, 23 Mar 2018 07:43:27 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Yulia&lt;br /&gt;Автор последнего сообщения: Aluexp32&lt;br /&gt;Количество ответов: 10</description>
			<content:encoded>&lt;!--uzquote--&gt;&lt;div class=&quot;bbQuoteBlock&quot;&gt;&lt;div class=&quot;bbQuoteName&quot; style=&quot;padding-left:5px;font-size:7pt&quot;&gt;&lt;b&gt;Цитата&lt;/b&gt; &lt;span class=&quot;qName&quot;&gt;&lt;!--qn--&gt;Yulia&lt;!--/qn--&gt;&lt;/span&gt; (&lt;span class=&quot;qAnchor&quot;&gt;&lt;!--qa--&gt;&lt;a href=&quot;https://gcup.ru/forum/62-99831-743455-16-1517648834&quot;&gt;&lt;img alt=&quot;&quot; style=&quot;margin:0;padding:0;vertical-align:middle;&quot; title=&quot;Ссылка на цитируемый текст&quot; src=&quot;https://gcup.ru/.s/img/fr/ic/11/lastpost.gif&quot;&gt;&lt;/a&gt;&lt;!--/qa--&gt;&lt;/span&gt;) &lt;/div&gt;&lt;div class=&quot;quoteMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzq--&gt;Для начала нужно вот что: в файле записаны параметры a1, b1, h1, a2, b2, h2. Прога должна их прочитать и создать две соприкасающиеся комнаты соответствующего размера. Чтобы можно было ходить из одной комнаты в другую. Модель персонажа и текстуры стен пусть будут какие-нибудь стандартные.&lt;!--/uzq--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzquote--&gt;&lt;br /&gt;&lt;br /&gt;Кто-нибудь может помочь?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Yulia</dc:creator>
			<guid>https://gcup.ru/forum/3-99839-1</guid>
		</item>
		<item>
			<title>Проблема setMode у Love2D (Решено)</title>
			<link>https://gcup.ru/forum/3-100030-1</link>
			<pubDate>Sun, 11 Mar 2018 07:25:03 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Проблема с изменением размера&lt;br /&gt;Автор темы: martuk&lt;br /&gt;Автор последнего сообщения: martuk&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Всех приветствую. Имею дело с игровым движком Love2D. Когда то стояла задача указать движку, какой нужен размер окна. Это все решалось функцией &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://love2d.org/wiki/love.window.setMode&quot; title=&quot;https://love2d.org/wiki/love.window.setMode&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;setMode&lt;/a&gt;&lt;br /&gt;Сама проблема: При использовании этой функции, даже если с использованием минимальных параметров - Ширина и высота, то было видно как окно &apos;Перезапускается&apos;.&lt;br /&gt;Это мерцание происходит каждый раз, при запуске приложения.&lt;br /&gt;Как решить данную проблему? Интересует именно как заложить заранее параметре до инициализации игрового окна? И возможно ли такое?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Добавлено&lt;/b&gt; (11 Марта 2018, 10:25)&lt;br /&gt;---------------------------------------------&lt;br /&gt;Прошу прощения, проблема решена. Не понимаю, почему я не нашел ее раньше? Проблема решается &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://love2d.org/wiki/Config_Files&quot; title=&quot;https://love2d.org/wiki/Config_Files&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;conf.lua&lt;/a&gt;.&lt;br /&gt;Данный файл загружается до загрузки основных модулей движка, этим самым все решается.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>martuk</dc:creator>
			<guid>https://gcup.ru/forum/3-100030-1</guid>
		</item>
		<item>
			<title>Blender</title>
			<link>https://gcup.ru/forum/3-99872-1</link>
			<pubDate>Fri, 09 Feb 2018 10:26:13 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Blender&lt;br /&gt;Автор темы: SKIF2002&lt;br /&gt;Автор последнего сообщения: Robinzon787&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Народ, что нужно знать чтобы освоить программу Blender? Для создания там разных объектов и всякое такое не для 3D моделирования. Я имею виду нужно ли знать программирование или можно сразу начать?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>SKIF2002</dc:creator>
			<guid>https://gcup.ru/forum/3-99872-1</guid>
		</item>
		<item>
			<title>RTS</title>
			<link>https://gcup.ru/forum/3-99850-1</link>
			<pubDate>Mon, 05 Feb 2018 11:00:59 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Jamal&lt;br /&gt;Автор последнего сообщения: Jamal&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Всем привет, собственно есть мечта стать геймдевом(ну а как иначе?).&lt;br /&gt;В этой сфере я юзлесс, естетсвенно не знаю языков программирования и 3д моделинга. Так только по наслышке.&lt;br /&gt;В мечтах есть создать игру похожу на Northgard.&lt;br /&gt;Собственно я хотел обратиться, подскажите с чего именно начать свой долгий кропотливый путь, и какой движок лучше использовать для данного проекта.&lt;br /&gt;Всем спасибо заранее</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Jamal</dc:creator>
			<guid>https://gcup.ru/forum/3-99850-1</guid>
		</item>
		<item>
			<title>Мануалы, уроки по Quake 2 engine, Id tech 4</title>
			<link>https://gcup.ru/forum/3-99740-1</link>
			<pubDate>Sat, 13 Jan 2018 17:55:46 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Nikitositsch29&lt;br /&gt;Автор последнего сообщения: Nikitositsch29&lt;br /&gt;Количество ответов: 0</description>
			<content:encoded>Ребят помогите пожалуйста, где можно найти какие нибудь мануалы или книги по Quake 2 enigne,либо по его форку Knightmare engine или Id tech 4, а то метод тыка в этих движках вообще отсутствует. Вопрос совсем нубский, но просто сил моих больше нет, кто-нибудь может уже использовал их в своих проектах???&lt;br /&gt;P.S. еще раз извиняюсь за глупый вопрос, и если запихнул в не тот раздел- прошу прощения.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Nikitositsch29</dc:creator>
			<guid>https://gcup.ru/forum/3-99740-1</guid>
		</item>
		<item>
			<title>Интеграция у Lumberyard</title>
			<link>https://gcup.ru/forum/3-99641-1</link>
			<pubDate>Tue, 26 Dec 2017 10:40:27 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: dima9595&lt;br /&gt;Автор последнего сообщения: dima9595&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Планирую с небольшой командой (если такова и будет) разработать простенькую игру на Lumberyard. Но в описании к этому движку было написанно, что интеграция с другими сервисами, отличные от Amazon запрещены. Не могли бы мне тут уточнить - какие именно &quot;другие&quot; сервисы запрещены?&lt;br /&gt;Для наглядности: Есть сайт у меня. Благодаря API я собираюсь делать авторизацию/регистрацию для игры и т.п. Т.е. игра будет связанна с моим сайтом (API). Такое можно будет сделать или нет?&lt;br /&gt;&lt;br /&gt;Заранее спасибо</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>dima9595</dc:creator>
			<guid>https://gcup.ru/forum/3-99641-1</guid>
		</item>
		<item>
			<title>Движок для псевдо-3д</title>
			<link>https://gcup.ru/forum/3-99576-1</link>
			<pubDate>Tue, 19 Dec 2017 15:51:32 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: отрисовка аля Top GEAR 2 sega&lt;br /&gt;Автор темы: sks00121&lt;br /&gt;Автор последнего сообщения: sks00121&lt;br /&gt;Количество ответов: 4</description>
			<content:encoded>Посоветуйте удобный движок для новичка(полного) под Windows&lt;br /&gt;https://youtu.be/8D0nWJGi7qA&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (17 декабря 2017, 20:42)&lt;br /&gt;---------------------------------------------&lt;br /&gt;никто ничего кроме unity как я уже понял не знает</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>sks00121</dc:creator>
			<guid>https://gcup.ru/forum/3-99576-1</guid>
		</item>
		<item>
			<title>Игровой цикл независимый от размер экрана и фреймрейта</title>
			<link>https://gcup.ru/forum/3-99584-1</link>
			<pubDate>Fri, 15 Dec 2017 22:00:55 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: DurianOdour&lt;br /&gt;Автор последнего сообщения: Psycho&lt;br /&gt;Количество ответов: 3</description>
			<content:encoded>Здравствуйте, нужно сделать очень простую игру для Android, ну очень простую.&lt;br /&gt;Даже в этом случае не могу понять в чем проблема.&lt;br /&gt;Собственно читал статьи на эту тему, сделал все как было описано, несколько раз проверял, но все равно что-то неправильно сделал.&lt;br /&gt;&lt;br /&gt;Мой игровой цикл выглядит следующим образом&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;&amp;nbsp;&amp;nbsp;public static final int PAUSE_SLEEP_TIME = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long totalElapsed = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long previousTime = TimeUtils.getCurrentTimeMillis(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long dt = 5;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long accumulator = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void run(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (mIsRunning&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Pause game&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (mIsPaused&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread.sleep(PAUSE_SLEEP_TIME&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (InterruptedException e&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long currentTime = TimeUtils.getCurrentTimeMillis(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long frameTime = currentTime - previousTime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;previousTime = currentTime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;totalElapsed += frameTime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accumulator += frameTime;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (accumulator &gt;= dt&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;processGameInput(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updateGameState(totalElapsed, dt&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;accumulator -= dt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;drawGame(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checkIfGameShouldStop(totalElapsed&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shutdownGracefully(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private void shutdownGracefully(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;&lt;br /&gt;В update game state я просто передвигаю шарик относительно текущих координат с какой-то константной скоростью без ускорения.&lt;br /&gt;&lt;br /&gt;Также для того чтобы поддерживать несколько экранов сделал концепцию абстрактного экрана. Идея в том что есть определенный размер экрана, по которому ведутся расчеты, но при отрисовке непосредственно все координаты транслируются в настоящие.&lt;br /&gt;&lt;br /&gt;&lt;!--uzcode--&gt;&lt;div class=&quot;bbCodeBlock&quot;&gt;&lt;div class=&quot;bbCodeName&quot; style=&quot;padding-left:5px;font-weight:bold;font-size:7pt&quot;&gt;Код&lt;/div&gt;&lt;div class=&quot;codeMessage&quot; style=&quot;border:1px inset;max-height:200px;overflow:auto;&quot;&gt;&lt;!--uzc--&gt;public class GameScreen implements AbstractCoordinatesConverter {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static final long DEFAULT_SCREEN_COEFFICIENT = 100;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static final long DEFAULT_ABSTRACT_SCREEN_WIDTH = 720;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static final long DEFAULT_ABSTRACT_SCREEN_HEIGHT = 1280;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private static final ScreenSize DEFAULT_ABSTRACT_SCREEN_SIZE = new ScreenSize(DEFAULT_ABSTRACT_SCREEN_WIDTH, DEFAULT_ABSTRACT_SCREEN_HEIGHT&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private Point2d mReusablePoint = new Point2d(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private ScreenAspectRatio mScreenAspectRatio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private ScreenSize mAbstractScreenSize;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private ScreenSize mRealScreenSize = new ScreenSize(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private ScreenAspectCoefficient mScreenAspectCoefficient = new ScreenAspectCoefficient(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private long mScreenCoefficient = DEFAULT_SCREEN_COEFFICIENT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void updateFromCanvasSize(CanvasSize canvasSize&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mRealScreenSize.setHeight(canvasSize.getHeight(&amp;#41;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mRealScreenSize.setWidth(canvasSize.getWidth(&amp;#41;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onScreenSizeUpdated(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.error(&quot;ABSTRACT SCREEN SIZE WIDTH : &quot; + mAbstractScreenSize.getWidth(&amp;#41; + &quot; HEIGHT &quot; + mAbstractScreenSize.getHeight(&amp;#41;&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private void onScreenSizeUpdated(&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mScreenAspectRatio = ScreenAspectRatio.fromScreenSize(mRealScreenSize&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mAbstractScreenSize = calculateAbstractScreenSize(mScreenAspectRatio, mScreenCoefficient&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mScreenAspectCoefficient = ScreenAspectCoefficient.fromScreenSizes(mAbstractScreenSize, mRealScreenSize&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Point2d convertPointToRealPosition(Point2d point2d&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mReusablePoint.x = convertXPointToRealPosition(point2d.x&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mReusablePoint.y = convertYPointToRealPosition(point2d.y&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return mReusablePoint;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public float convertXPointToRealPosition(float xAbstract&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return xAbstract * mScreenAspectCoefficient.getWidthCoefficient(&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public float convertYPointToRealPosition(float yAbstract&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return yAbstract * mScreenAspectCoefficient.getHeightCoefficient(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public float convertYRealToAbstract(float yReal&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return yReal / mScreenAspectCoefficient.getHeightCoefficient(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public float convertXRealToAbstract(float xReal&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return xReal / mScreenAspectCoefficient.getHeightCoefficient(&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static ScreenSize calculateAbstractScreenSize(ScreenAspectRatio aspectRatio, long coefficient&amp;#41; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return DEFAULT_ABSTRACT_SCREEN_SIZE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// return new ScreenSize(aspectRatio.getWidthRatio(&amp;#41; * coefficient, aspectRatio.getHeightRatio(&amp;#41; * coefficient&amp;#41;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;!--/uzc--&gt;&lt;/div&gt;&lt;/div&gt;&lt;!--/uzcode--&gt;&lt;br /&gt;Но все равно на разных устройствах по разному работает игра. На одних быстрее на одних медленнее. Вот пример видео &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://drive.google.com/file/d/1f-4U2CYOD_Dp3bgIdJ0rDOaDHs6Ba1Hc/view?usp=sharing&quot; title=&quot;https://drive.google.com/file/d/1f-4U2CYOD_Dp3bgIdJ0rDOaDHs6Ba1Hc/view?usp=sharing&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Video Game Loop&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Мне все равно с какой плавностью будет работать отрисовка в зависимости от фреймрейта, мне главное это чтобы за одно и тоже время шарик в данном случае проходил одно и тоже расстояние вне зависимости от экрана.&lt;br /&gt;&lt;br /&gt;Буду благодарен за любую помощь</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>DurianOdour</dc:creator>
			<guid>https://gcup.ru/forum/3-99584-1</guid>
		</item>
		<item>
			<title>Помогите найти.</title>
			<link>https://gcup.ru/forum/3-99344-1</link>
			<pubDate>Tue, 31 Oct 2017 10:03:33 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Или подобрать похожее.&lt;br /&gt;Автор темы: DrVooDoo&lt;br /&gt;Автор последнего сообщения: drcrack&lt;br /&gt;Количество ответов: 1</description>
			<content:encoded>Есть 2 игрули - Arena online и King of Kings 3. Ну второй уже на самом деле нет.&lt;br /&gt;Так вот, что за движок в них обеих? Можно опознать? Или может есть что-то похожее. Интересует именно система крафта и прокачки.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>DrVooDoo</dc:creator>
			<guid>https://gcup.ru/forum/3-99344-1</guid>
		</item>
		<item>
			<title>Алгоритм для движения объекта по времени</title>
			<link>https://gcup.ru/forum/3-99287-1</link>
			<pubDate>Sat, 28 Oct 2017 07:17:03 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: DurianOdour&lt;br /&gt;Автор последнего сообщения: drcrack&lt;br /&gt;Количество ответов: 6</description>
			<content:encoded>Здравствуйте, я только начинающий. &lt;br /&gt;&lt;br /&gt;Возник такой вопрос. Задача стоит в том чтобы объект двигался по времени, в зависимости от того какое время поставили. К примеру.&lt;br /&gt;&lt;br /&gt;Есть шарик. В настройках поставили, что игровое время 40 секунд и всего шарик должен сделать 10 полных проходов пути (туда и обратно).&lt;br /&gt;&lt;br /&gt;То есть считаем. Шарик должен пройти 1 проход (от 1 стенки к другой и обратно) за 40/10=4 секунды. &lt;br /&gt;&lt;br /&gt;Теперь собственно как это реализовать ? &lt;br /&gt;&lt;br /&gt;Если нельзя быть уверенным, в том что какой-то определенный фреймрейт будет. &lt;br /&gt;&lt;br /&gt;К примеру 1 цикл игры (отрисовка и вычисление) происходит за 30мс. Соответственно можно посчитать. &lt;br /&gt;&lt;br /&gt;4000/30 = 133 это у нас количество циклов для прохождения. Теперь допустим полное расстояние от 1 стенки к другой 1000px. Чтобы шарик сделал полный проходу нужно 2000px. &lt;br /&gt;&lt;br /&gt;Соответственно - 2000/133 = 15, то есть каждую итерацию шарик должен проходить + 15px. &lt;br /&gt;&lt;br /&gt;Это все хорошо, но как сделать в случае если фрейм рейт не известен + если он меняется часто и нужно коррелировать. &lt;br /&gt;&lt;br /&gt;Желательно точно чтобы выходило время заданное в настройках. Подскажите пожалуйста алгоритм или просто идеи как это реализовать можно ?&lt;br /&gt;&lt;br /&gt;Спасибо</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>DurianOdour</dc:creator>
			<guid>https://gcup.ru/forum/3-99287-1</guid>
		</item>
		<item>
			<title>Видеоуроки по 3D GameStudio , Blitz3D, Quest 3D</title>
			<link>https://gcup.ru/forum/3-960-1</link>
			<pubDate>Sat, 28 Oct 2017 04:57:17 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Уроки, Обучение 3DGS&lt;br /&gt;Автор темы: DungeonLord&lt;br /&gt;Автор последнего сообщения: Malvin&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>&lt;a class=&quot;link&quot; href=&quot;http://torrents.ru/forum/viewtopic.php?t=281065&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Видеоуроки по 3D GameStudio , Blitz3D, Quest 3D&lt;/a&gt; - достаточно неплохие видеоуроки для начинающих. Заранее материалы 2002г. так что по старым версиям, но вполне понятно.&lt;p&gt;&lt;b&gt;Добавлено&lt;/b&gt; (02.05.2009, 05:53)&lt;br /&gt;---------------------------------------------&lt;br /&gt;+ они на русском</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>DungeonLord</dc:creator>
			<guid>https://gcup.ru/forum/3-960-1</guid>
		</item>
		<item>
			<title>Движок, конструктор для Android?</title>
			<link>https://gcup.ru/forum/3-89931-1</link>
			<pubDate>Tue, 19 Sep 2017 15:29:58 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: посоветуйте .&lt;br /&gt;Автор темы: Donbass&lt;br /&gt;Автор последнего сообщения: hoanglong86&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Здравстуйте, на данный момент заинтересовался vr играми. и появилось желание склепать что то свое..но из навыков игростроя знаю только логические блоки Blender ... ну и ясное дело в блендере игру для андроида не собрать. посоветуйте что то более менее адекватное? (вроде как я заметил с юнити есть игры на андроид) на сколько сложно компилировать игру с юнити на APK? и интересует на сколько сложно осуществлять управление в игре за счет гироскопа в смартфоне? &lt;img rel=&quot;usm&quot; src=&quot;https://gcup.ru/SML/smile.gif&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;:)&quot; /&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Donbass</dc:creator>
			<guid>https://gcup.ru/forum/3-89931-1</guid>
		</item>
		<item>
			<title>С чего начать делать ММО? Движок или конструктор?</title>
			<link>https://gcup.ru/forum/3-98324-1</link>
			<pubDate>Fri, 08 Sep 2017 20:48:03 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: litovkin2004&lt;br /&gt;Автор последнего сообщения: litovkin2004&lt;br /&gt;Количество ответов: 23</description>
			<content:encoded>Здравствуйте. Я новичок глупый и амбициозный. Хочу сделать в одно лицо ММОRPG. Прошу помощи советом. Потому - что самостоятельное изучение форума не дает ответов, а только рождает все новые и новые вопросы. Постараюсь быть максимально кратким.&lt;br /&gt;&lt;br /&gt;Хочу сделать изометрическую MMORPG в 3D графике, с очень большим количеством локаций и общей картой по типу Альбион-онлайн (Принцип тот-же). Все модельки для игры буду делать и рисовать сам. Самое слабое место у меня программирование. Качество графики и стиль более мультяшный, чтобы люди не сильно придирались к реализму и не требовали очень крутого графона. Игра должна цеплять игровыми механиками и быть просто приятна глазу.&lt;br /&gt;&lt;br /&gt;Помогите найти золотую середину.&lt;br /&gt;&lt;br /&gt;Начать делать на движке или конструкторе? Если да, то на каком?&lt;br /&gt;&lt;br /&gt;А еще у моего компа виндоус 32 бита и оперативка 2000, процесоор 2х2400.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>litovkin2004</dc:creator>
			<guid>https://gcup.ru/forum/3-98324-1</guid>
		</item>
		<item>
			<title>Как собрать ID tech 4 в Visual Studio 2013?</title>
			<link>https://gcup.ru/forum/3-98965-1</link>
			<pubDate>Tue, 29 Aug 2017 10:53:16 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Nikitositsch29&lt;br /&gt;Автор последнего сообщения: bodya_WM&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Как собрать ID tech 4 в Visual Studio 2013? Вылетает ошибка с XKEYCHECK!!!! Помогите пожалуйста)))&lt;br /&gt;И можно ли будет продавать игры сделанные мной на этом движке?</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Nikitositsch29</dc:creator>
			<guid>https://gcup.ru/forum/3-98965-1</guid>
		</item>
		<item>
			<title>Сравнение BGE и Unreal Engine 4</title>
			<link>https://gcup.ru/forum/3-98807-1</link>
			<pubDate>Sat, 05 Aug 2017 03:05:57 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Сравнение BGE и Unreal Engine 4&lt;br /&gt;Автор темы: LinCof&lt;br /&gt;Автор последнего сообщения: Xakep&lt;br /&gt;Количество ответов: 15</description>
			<content:encoded>Я задумался о том на каком движке можно начать делать игру, дабы двиг имел &quot;бесплатность&quot; при создании коммерческих проектов с наименьшим количеством &quot;подводных камней&quot;, и что-бы была более менее нормальная графика. И вот уже несколько месяцев я изучаю так называемый BGE (Игровой двиг встроенный в Blender), и всем известный UE4.&lt;br /&gt;Так вот я решил провести сравнение графики движков на стандартной игровой сцене (для UE4). И я был немного удивлен, как по мне различия не очень велеки :&lt;br /&gt;http://s1.uploadpics.ru/images/Z1o5o9YFtz.jpg&lt;br /&gt;http://s1.uploadpics.ru/images/-yCqoqYYYG.jpg&lt;br /&gt;(Не вставлялся BB код)&lt;br /&gt;&lt;br /&gt;Так несмотря на это BGE имеет еще пару преимуществ. Одно из них это полная свобода использования. Как написано в лицензионном соглашении, за коммерческое использование мы не обязаны отчислять средства разработчикам. Еще неотъемлемым плюсом является то что Blender это полный набор инструментов позволяющий одновременно моделировать и вносить изменения в скрипты и логическую систему (без сторонних программ). Чуть ниже скрины на DEMO сцену в BGE (попытка воссоздать бетонное помещение) :&lt;br /&gt;http://s1.uploadpics.ru/images/by_z1nFFYz.jpg&lt;br /&gt;http://s1.uploadpics.ru/images/ZkofyhYFFf.jpg&lt;br /&gt;Я только начинаю вникать в это чудо под названием Blender, а особенно в Cycles, в котором судя по многочисленным видео можно достичь отличных результатов.&lt;br /&gt;&lt;br /&gt;При всем этом освещение также как и физика как по мне намного лучше в UE4.&lt;br /&gt;В общем везде есть свои плюсы и минусы, но мой выбор пал на BGE, и в ближайшее время я менять его не собираюсь.&lt;br /&gt;&lt;br /&gt;P.S. Сорри за плохое качество некоторых скринов и неточности в тексте (некоторых фразах).</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>LinCof</dc:creator>
			<guid>https://gcup.ru/forum/3-98807-1</guid>
		</item>
		<item>
			<title>Топовые игровые движки для создания 2D и 3D игр</title>
			<link>https://gcup.ru/forum/3-98684-1</link>
			<pubDate>Thu, 13 Jul 2017 15:00:01 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: by Flatingo&lt;br /&gt;Автор темы: flatingo&lt;br /&gt;Автор последнего сообщения: Hugarden&lt;br /&gt;Количество ответов: 14</description>
			<content:encoded>Итак, решил добить предыдущее &lt;a class=&quot;link&quot; href=&quot;https://gcup.ru/go?https://www.youtube.com/watch?v=pbd56CW0VvA&quot; title=&quot;https://www.youtube.com/watch?v=pbd56CW0VvA&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;видео&lt;/a&gt; о языках программирования, где я упомянул игровые движки. Думаю, это послужит явным дополнением базовой информации о востребованных игровых движках текущего года. Приятного аппетита.&lt;br /&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;!--BBvideo--&gt;&lt;span id=&quot;scr50Tj1DvcBD&quot;&gt;&lt;/span&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uVideoPlayer({&apos;url&apos;:&apos;https://www.youtube.com/watch?v=xMB-w5tK694&apos;,&apos;width&apos;:&apos;640&apos;,&apos;height&apos;:&apos;360&apos;},&apos;scr50Tj1DvcBD&apos;);&lt;/script&gt;&lt;!--/BBvideo--&gt;&lt;/div&gt;</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>flatingo</dc:creator>
			<guid>https://gcup.ru/forum/3-98684-1</guid>
		</item>
		<item>
			<title>Движок ориентированный на программистов</title>
			<link>https://gcup.ru/forum/3-98623-1</link>
			<pubDate>Fri, 30 Jun 2017 10:53:50 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: cherepets&lt;br /&gt;Автор последнего сообщения: MrNesh&lt;br /&gt;Количество ответов: 5</description>
			<content:encoded>Не сдружился я ни с одним из популярных движков. В первую очередь из-за того что они ориентированы на дизайнеров: много сложных для освоения визуальных элементов, код только в виде встраивания скриптов, которые не понятно кто и когда дернет и которые мы пишем в отдельном инструменте...&lt;br /&gt;В общем, хочется &quot;code first&quot;: пишем программу, использующую библиотеки движка, а все ресурсы тупо скидываем в папку проекта в своей любимой IDE.&lt;br /&gt;Нечто похожее предлагают Urho и Cocos, но там свои сложности.&lt;br /&gt;Может кто посоветует какие-то еще подобные движки?&lt;br /&gt;&lt;br /&gt;Из доп требований:&lt;br /&gt;- Удобный язык, желательно похожий на &quot;осовременный C&quot; (например, Java, C# или JS)&lt;br /&gt;- Кроссплатформенность (Win32, Android, iOS, UWP точно нужны)</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>cherepets</dc:creator>
			<guid>https://gcup.ru/forum/3-98623-1</guid>
		</item>
		<item>
			<title>Как собрать двиг Quake 2, чтобы создать игру???</title>
			<link>https://gcup.ru/forum/3-98472-1</link>
			<pubDate>Tue, 06 Jun 2017 11:50:24 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Автор темы: Nikitositsch29&lt;br /&gt;Автор последнего сообщения: AlexRabbit&lt;br /&gt;Количество ответов: 2</description>
			<content:encoded>Ребят, как собрать движок от Quake 2, а то MVS2013 не фига не получается??? Просто движок нравится)))</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Nikitositsch29</dc:creator>
			<guid>https://gcup.ru/forum/3-98472-1</guid>
		</item>
		<item>
			<title>Cryeng,Unrealeng и Unity, на распутье.</title>
			<link>https://gcup.ru/forum/3-98200-1</link>
			<pubDate>Fri, 21 Apr 2017 20:03:16 GMT</pubDate>
			<description>Форум: &lt;a href=&quot;https://gcup.ru/forum/3&quot;&gt;Общее обсуждение Игровых движков&lt;/a&gt;&lt;br /&gt;Описание темы: Я не гордый, меня можно и пнуть.&lt;br /&gt;Автор темы: Curokawa&lt;br /&gt;Автор последнего сообщения: beril&lt;br /&gt;Количество ответов: 10</description>
			<content:encoded>Сразу оговорюсь, я только 2-ой месяц осваиваю движки. И вот к каким выводам я пришёл (субъективно), может вы меня пнёте в правильное направление.&lt;br /&gt;&lt;br /&gt;Cryengine- сырой, забагованный двиг, но с какой-никакой песочницей, возможность спокойно делать кат-сцены, приемлимо с импортом собственного ландшафта, но го***ный импорт .fbx, к примеру, пытаешься засунуть персонажа со скелетом,так тебе сначала надо создать файл, в который засовываешь скелет, скин, материалы к нему, а затем &quot;радуешься&quot;, что проходишь сквозь модель, она блестит (даже с настройками материала) и вообще всё замечательно.&lt;br /&gt;&lt;br /&gt;Unity- двиг с подвохом, устанавливается только в C диск и вешает тебе комп, импорт ландшафта сложный, инструментария, как в песочнице, не увидел (типа сглаживать, экструдировать вершины/полигоны и другие прелести) поэтому, к сожалению, я прохожу мимо него.&lt;br /&gt;&lt;br /&gt;UDK или же Unreal engine- сначала я обрадовался, и ландшафт подгружает, и судя по видео, кат сцены можно делать спокойно, и персонаж перемещается с костьми, почти без ошибок (которые легко, в принципе, исправить, добавив свою анимацию, а не использовав внутреннюю). А потом понял: инструментария (песочницы) нет. Совсем нет. Или я его не увидел (см. выше-пните посильнее) А следовательно будет сложновато делать дороги и другие прелести ландшафта.&lt;br /&gt;&lt;br /&gt;Вообщем.. застрял я на распутье, причём это обидно, если то, в чём застрял, разрешится, я смогу начать что-то делать:&lt;br /&gt;В CryEngine - не могу разобраться с импортом скелета и скина (точнее скелет я засуну, а вот скин-нет, точнее да, но неправильно и он будет нерабочим, а ещё и создаётся только как geom entity, который нельзя изменять так, как хочешь) &lt;br /&gt;В UnrealEngine, в принципе, проблем почти нет, разве что, всё, что я хочу в нём увидеть, надо делать только в сторонних прогах. (пользуюсь блендером, мейкхуманом, на платные денег нет, хотя засматриваюсь на Zbrush), &lt;br /&gt;Unity не рассматриваю, хоть мне очень нравится условия покупки лицензии, но из-за вышесказанного (а именно про диск С) он мне не подходит.&lt;br /&gt;Так же мне нужно узнать как анимировать диалоги, но это уже не от движков зависит.&lt;br /&gt;Буду благодарен, если меня хорошенько пнут в сторону подробных уроков, среди тех, что я посмотрел, не нашёл нужных.</content:encoded>
			<category>Общее обсуждение Игровых движков</category>
			<dc:creator>Curokawa</dc:creator>
			<guid>https://gcup.ru/forum/3-98200-1</guid>
		</item>
	</channel>
</rss>