{"id":224175,"date":"2014-05-26T19:48:03","date_gmt":"2014-05-26T15:48:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=224175"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=224175","title":{"rendered":"<span class=\"post_title\">[ libGDX ] \u041f\u0438\u0448\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u043f\u043e\u0434 Android. \u0427\u0430\u0441\u0442\u044c 1<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043d\u0430 \u043f\u043e\u043f\u0440\u0438\u0449\u0435 game-dev&#8217;\u0430 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e.<\/p>\n<p>  \u0418\u0433\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0432\u0435\u0437\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442 (\u043d\u043e\u0442\u0430). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e\u0442\u0443 \u00ab\u0414\u043e\u00bb \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0430 \u00ab\u041c\u0438\u00bb \u2014 \u0436\u0435\u043b\u0442\u044b\u043c. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e04\/0bc\/894\/e040bc8947930b41e19684c3595e2174.png\" alt=\"image\"\/><\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u2014 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0438 \u043d\u043e\u0432\u0430\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u044f. \u0417\u0432\u0435\u0437\u0434\u044b \u0438\u0433\u0440\u0430\u044e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043d\u043e\u0442\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438\u0445 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0430\u0442\u0435\u043c, \u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u043d\u043e\u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043f\u043e\u043a\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0439\u0434\u0435\u043d.<\/p>\n<p>  \u041f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a libGDX. \u041c\u043d\u0435 \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u043a\u0430\u043a \u043d\u043e\u0432\u0438\u0447\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435. \u0414\u0430 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u044f \u043d\u0430\u0448\u0435\u043b \u0431\u043e\u043b\u044c\u0448\u0435. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0427\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>Eclipse<\/li>\n<li>Gradle<\/li>\n<li>Android SDK<\/li>\n<li>libGDX \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/li>\n<li>\u0413\u043e\u043b\u043e\u0432\u0430 + \u0440\u0443\u043a\u0438 + \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u0435<\/li>\n<\/ul>\n<p>  \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041c\u043d\u0435 \u043f\u0440\u043e\u0449\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f gdx-setup. \u0418\u0442\u0430\u043a, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0435\u0435:<\/p>\n<pre><code class=\"bash\">java -jar gdx-setup.jar <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u0432\u043e\u0434\u0438\u043c:<\/p>\n<ul>\n<li>Name:<b> \u00abSongs of the Space\u00bb<\/b><\/li>\n<li>Package:<b> \u00abru.yoursite.songs_of_the_space\u00bb<\/b><\/li>\n<li>Game Class: <b>\u00abMyGame\u00bb<\/b><\/li>\n<li>Destination: <b>path\/to\/your\/workspace\/songs_of_the_space<\/b><\/li>\n<li>Android SDK: <b>path\/to\/your\/sdk<\/b><\/li>\n<li>libGDX Version: <b>Nightlies<\/b><\/li>\n<li>Sub Projects:<b> Desktop, Android<\/b><\/li>\n<li>Extentions:<b> \u00abFreetype\u00bb<\/b><\/li>\n<\/ul>\n<p>  \u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <i>Generate<\/i> \u0438, \u043f\u043e\u0441\u043b\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438\u0434\u0435\u043c \u0432 Eclipse.<\/p>\n<p>  \u0412 Eclipse \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c <i>Import -&gt; Gradle -&gt; Gradle Project<\/i>. \u0417\u0430\u0442\u0435\u043c <i>Browse..<\/i> \u0438\u0449\u0435\u043c \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0437\u0430\u0442\u0435\u043c <i>Build<\/i>. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043d\u0430\u0436\u0438\u0432\u0430\u0435\u043c <i>Finish<\/i>. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443 \u0432\u0430\u0441 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043d\u0430\u0448\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u0421\u0440\u0430\u0437\u0443 \u0438\u0434\u0435\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (<i>core<\/i>) -&gt; <i>MyGame.java<\/i>. \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b <b>gdx<\/b>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0441\u044f \u043d\u0435 \u043e\u0442 <i>ApplicationAdapter<\/i>, \u0430 \u043e\u0442 <i>Game<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0438\u0434:<\/p>\n<pre><code class=\"java\">public class MyGame extends Game {      @Override     public void create() {     }      @Override     public void render() {         super.render();     } } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e <i>screens<\/i>. \u0418 \u0432 \u043d\u0435\u043c \u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430:  <\/p>\n<ul>\n<li>MainMenuScreen \u2014 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>LevelScreen \u2014 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439<\/li>\n<li>PlayScreen \u2014 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u044d\u043a\u0440\u0430\u043d<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0435 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <i>Screen<\/i>. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u0448\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435, \u043a\u0440\u043e\u043c\u0435 MainMenuScreen. \u0412 \u043d\u0435\u043c \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"java\">public class MainMenuScreen implements Screen {          \/\/ \u043d\u0430\u0448 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441     final MyGame game;      \/\/ \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b     private Stage stage;     private TextButton play, exit;     private Table table;     private LabelStyle labelStyle;      \/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0436\u0435)     public MainMenuScreen(final MyGame gam) {         game = gam;          \/\/ \u0421\u0446\u0435\u043d\u0430 -- \u043e\u043d\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u043c \u0436\u0438\u0437\u043d\u044c \tstage = new Stage(new ScreenViewport());          \/\/ \u0421\u043a\u0438\u043d \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043e\u043a. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u043d\u0438\u0437\u0443 \u0441\u0442\u0430\u0442\u044c\u0438          Skin skin = new Skin();         TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal(&quot;images\/game\/images.pack&quot;));         skin.addRegions(buttonAtlas);         TextButtonStyle textButtonStyle = new TextButtonStyle();         textButtonStyle.font = game.font;         textButtonStyle.up = skin.getDrawable(&quot;button-up&quot;);         textButtonStyle.down = skin.getDrawable(&quot;button-down&quot;);         textButtonStyle.checked = skin.getDrawable(&quot;button-up&quot;);          labelStyle = new LabelStyle();         labelStyle.font = game.font;         table = new Table();         table.setFillParent(true);                  \/\/ \u041a\u043d\u043e\u043f\u043a\u0430 \u0438\u0433\u0440\u0430\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 listener, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043a\u0430\u0441\u0430\u043d\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0441\u0430\u043d\u0438\u044f, \u0432\u044b\u0431\u0440\u0438\u0440\u0443\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0431\u043e\u0440\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u0430 \u044d\u0442\u043e\u0442 \u044d\u043a\u0440\u0430\u043d \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442\u0441\u044f         play = new TextButton(&quot;\u0418\u0433\u0440\u0430\u0442\u044c&quot;, textButtonStyle);         play.addListener(new ClickListener() {             @Override             public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {                 Gdx.input.vibrate(20);                 return true;             };             @Override             public void touchUp(InputEvent event, float x, float y, int pointer, int button) {                 game.setScreen(new LevelScreen(game));                 dispose();             };         });                  \/\/ \u041a\u043d\u043e\u043f\u043a\u0430 \u0432\u044b\u0445\u043e\u0434\u0430. \u0412\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b, \u0438\u0431\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0436\u043c\u0435\u0442 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.         exit = new TextButton(&quot;\u0412\u044b\u0445\u043e\u0434&quot;, textButtonStyle);         exit.addListener(new ClickListener() {             @Override             public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {                 Gdx.input.vibrate(20);                 return true;             };             @Override             public void touchUp(InputEvent event, float x, float y, int pointer, int button) {                 Gdx.app.exit();                 dispose();             };         });         table.add(play);         table.row();         table.add(exit);         stage.addActor(table);          Gdx.input.setInputProcessor(stage);  \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0441\u0446\u0435\u043d\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 (\u043d\u0430\u0436\u0430\u0442\u0438\u044f, \u043a\u0430\u0441\u0430\u043d\u0438\u044f, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 etc.)         Gdx.input.setCatchBackKey(true); \/\/ \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043d\u0430\u0437\u0430\u0434, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u041d\u0430\u0437\u0430\u0434 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435     }      @Override     public void render(float delta) {         \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u0447\u0435\u0440\u043d\u044b\u043c         Gdx.gl.glClearColor(0, 0, 0, 1);         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);                  \/\/ \u0420\u0438\u0441\u0443\u0435\u043c \u0441\u0446\u0435\u043d\u0443         stage.act(delta);         stage.draw();     }      @Override     public void resize(int width, int height) {}      @Override     public void show() {}      @Override     public void hide() {}      @Override     public void pause() {}      @Override     public void resume() {}      @Override     public void dispose() {         \/\/ \u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u043c \u0441\u0446\u0435\u043d\u0443 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 game.         stage.dispose();         game.dispose();     } } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435. \u0414\u0435\u043b\u0430\u0435\u043c \u0438\u043c\u0440\u043e\u0440\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 (Shift + Ctrl + O). \u0418 \u0438\u0434\u0435\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 <i>MyGame.java<\/i>. \u0412 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"java\">public class MyGame extends Game {      \/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u0448\u0440\u0438\u0444\u0442 \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u043b\u044f \u043d\u0435\u0433\u043e (\u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u043e\u0432\u043a\u0438)     public BitmapFont font, levels;     private static final String FONT_CHARACTERS = &quot;\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042fabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\\\\/?-+=()*&.;,{}\\&quot;\u00b4`'&lt;&gt;&quot;;      @Override     public void create() {         \/\/ \u042f \u0432\u0437\u044f\u043b \u0448\u0440\u0438\u0444\u0442 RussoOne \u0441 Google Fonts. \u0421\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432 TTF. (\u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b, \u0442\u043e\u043b\u044c\u043a\u043e ttf \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f)         FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal(&quot;fonts\/russoone.ttf&quot;));         FreeTypeFontParameter param = new FreeTypeFontParameter();         param.size = Gdx.graphics.getHeight() \/ 18; \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430. \u041f\u0440\u0430\u0432\u0434\u0430 \u043a\u043e\u0440\u044f\u0432\u043e, \u043d\u043e \u0432\u044b \u0441\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0432\u0430\u043c \u0443\u0433\u043e\u0434\u043d\u043e.         param.characters = FONT_CHARACTERS; \/\/ \u041d\u0430\u0448\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b         font = generator.generateFont(param); \/\/ \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0448\u0440\u0438\u0444\u0442         param.size = Gdx.graphics.getHeight() \/ 20;         levels = generator.generateFont(param);         font.setColor(Color.WHITE); \/\/ \u0426\u0432\u0435\u0442 \u0431\u0435\u043b\u044b\u0439         levels.setColor(Color.WHITE);         generator.dispose(); \/\/ \u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u043c \u043d\u0430\u0448 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e.  \t@Override \tpublic void render() { \t\tsuper.render(); \t} } <\/code><\/pre>\n<p>  \u0414\u0435\u043b\u0430\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 <b>package<\/b> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <i>managers<\/i> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440). \u0412 \u043d\u0435\u043c \u043a\u043b\u0430\u0441\u0441 <i>XMLparse.java<\/i>. \u0417\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e? \u0417\u0430\u0442\u0435\u043c, \u0447\u0442\u043e \u0443\u0440\u043e\u0432\u043d\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0438\u0437 xml \u0444\u0430\u0439\u043b\u043e\u0432. \u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 <b>assets<\/b> (<i>android \u043f\u0440\u043e\u0435\u043a\u0442 -&gt; assets<\/i>) \u043f\u0430\u043f\u043a\u0443 <b>xml<\/b>. \u0412 \u043d\u0435\u0439 \u043f\u0430\u043f\u043a\u0438:<\/p>\n<ul>\n<li>images<\/li>\n<li>fonts<\/li>\n<li>sounds<\/li>\n<li>xml<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0443 fonts \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435 \u0448\u0440\u0438\u0444\u0442. \u0410 \u0432 \u043f\u0430\u043f\u043a\u0435 <b>xml<\/b>, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 <b>levels<\/b>. \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 Desktop \u043f\u0440\u043e\u0435\u043a\u0442 ( F5 ), \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u043b \u0432\u0441\u0435 \u044d\u0442\u043e. \u0418 \u0442\u0435\u043f\u0435\u0440\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 <i>XMLparse.java<\/i>. \u0412 \u043d\u0435\u0433\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"java\">public class XMLparse {     public Array&lt;String&gt; XMLparseLevels() {         Array&lt;String&gt; levels = new Array&lt;String&gt;();         Array&lt;Integer&gt; int_levels = new Array&lt;Integer&gt;();          FileHandle dirHandle;         if (Gdx.app.getType() == ApplicationType.Android) {             dirHandle = Gdx.files.internal(&quot;xml\/levels&quot;);         } else {             dirHandle = Gdx.files.internal(System.getProperty(&quot;user.dir&quot;) + &quot;\/assets\/xml\/levels&quot;); \/\/ \u0445\u0430\u043a \u0434\u043b\u044f desktop \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043f\u0430\u043f\u043a\u0438 assets \u0432 \u0432 \u043a\u043e\u0440\u043d\u0435 desktop-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 assets android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430         }         for (FileHandle entry : dirHandle.list()) {             levels.add(entry.name().split(&quot;.xml&quot;)[0]);         }                  \/\/ \u042d\u0442\u0443 \u0436\u0435\u0441\u0442\u044c \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0432\u0435\u0440\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0443\u0440\u043e\u0432\u043d\u0438. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0443\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435. \u042f \u043d\u0435 \u043e\u0441\u043e\u0431\u043e Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u042f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0443\u0441\u044c :)         for (int i = 0; i &lt; levels.size; i++) {             int_levels.add(Integer.parseInt(levels.get(i)));         }         int_levels.sort();         levels.clear(); \t\t         for (int i = 0; i &lt; int_levels.size; i++) {             levels.add(String.valueOf(int_levels.get(i)));         }         return levels;     } } <\/code><\/pre>\n<p>  \u041d\u0443 \u0447\u0442\u043e? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <i>LevelScreen.java<\/i>. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0443 xml \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 <i>assets -&gt; xml -&gt; levels<\/i> \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 1.xml, 2.xml \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0410 \u0432 \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"java\">public class LevelScreen implements Screen {          final MyGame game;          private Stage stage;     private Table table;     private LabelStyle labelStyle;     private TextButton level;          private Array&lt;String&gt; levels;          public LevelScreen(MyGame gam) {         game = gam;                  stage = new Stage(new ScreenViewport());                  Skin skin = new Skin();         TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal(&quot;images\/game\/images.pack&quot;));         skin.addRegions(buttonAtlas);         TextButtonStyle textButtonStyle = new TextButtonStyle();         textButtonStyle.font = game.levels;         textButtonStyle.up = skin.getDrawable(&quot;level-up&quot;);         textButtonStyle.down = skin.getDrawable(&quot;level-down&quot;);         textButtonStyle.checked = skin.getDrawable(&quot;level-up&quot;);                  \/\/\u041f\u0430\u0440\u0441\u0438\u043c \u043d\u0430\u0448\u0438 \u0443\u0440\u043e\u0432\u043d\u0438         XMLparse parseLevels = new XMLparse();         levels = parseLevels.XMLparseLevels();          labelStyle = new LabelStyle();         labelStyle.font = game.levels; \/\/ \u0411\u0435\u0440\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 MyGame         table = new Table();         table.row().pad(20); \/\/ \u041d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 + \u043e\u0442\u0441\u0442\u0443\u043f\u044b         table.center();         table.setFillParent(true);          for (int i = 0; i &lt; levels.size; i++) {             final String cur_level = levels.get(i);             level = new TextButton(cur_level, textButtonStyle);             level.addListener(new ClickListener() {                 @Override                 public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {                     Gdx.input.vibrate(20);                     return true;                 };                 @Override                 public void touchUp(InputEvent event, float x, float y, int pointer, int button) {                     game.setScreen(new PlayScreen(game, cur_level)); \/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432 PlayScreen                     dispose();                 };             });             table.add(level);              \/\/ \u0410 \u044d\u0442\u0430 \u0436\u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432 \u043f\u044f\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435              float indexLevel = Float.parseFloat(String.valueOf(i)) + 1;             if (indexLevel % 5.0f == 0) table.row().padLeft(20).padRight(20).padBottom(20);         }         stage.addActor(table); \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u043d\u0430 \u0441\u0446\u0435\u043d\u0443           Gdx.input.setInputProcessor(stage);         Gdx.input.setCatchBackKey(true);         \/\/ \u042d\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u043c\u0435\u0442 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u041d\u0430\u0437\u0430\u0434 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041c\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u044d\u043a\u0440\u0430\u043d.         stage.setHardKeyListener(new OnHardKeyListener() {                       @Override             public void onHardKey(int keyCode, int state) {                 if(keyCode==Keys.BACK && state==1){                     game.setScreen(new MainMenuScreen(game));                     }                    }         });     }      @Override     public void render(float delta) {         Gdx.gl.glClearColor(0, 0, 0, 1);         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);                  stage.act(delta);         stage.draw();     }      @Override     public void resize(int width, int height) {}      @Override     public void show() {}      @Override     public void hide() {}      @Override     public void pause() {}      @Override     public void resume() {}      @Override     public void dispose() {         stage.dispose();         game.dispose();     } } <\/code><\/pre>\n<p>  \u0423\u0445, \u043c\u043d\u043e\u0433\u043e \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 (\u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438) \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:  <\/p>\n<ul>\n<li>\u041d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441 PlayScreen<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0437\u0432\u0435\u0437\u0434, \u043d\u043e\u0442 \u0438 \u0435\u0449\u0435 \u043a\u043e\u0435-\u0447\u0435\u0433\u043e<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/github.com\/newca9h\/Song-s-of-the-Space\">\u0424\u0430\u0439\u043b\u044b \u0443\u0440\u043e\u043a\u0430.<\/a><\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/224175\/\"> http:\/\/habrahabr.ru\/post\/224175\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u042f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043d\u0430 \u043f\u043e\u043f\u0440\u0438\u0449\u0435 game-dev&#8217;\u0430 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e.<\/p>\n<p>  \u0418\u0433\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0432\u0435\u0437\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0446\u0432\u0435\u0442 (\u043d\u043e\u0442\u0430). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e\u0442\u0443 \u00ab\u0414\u043e\u00bb \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0430 \u00ab\u041c\u0438\u00bb \u2014 \u0436\u0435\u043b\u0442\u044b\u043c. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0438\u0442\u043e\u0433\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e04\/0bc\/894\/e040bc8947930b41e19684c3595e2174.png\" alt=\"image\"\/><\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u2014 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0437\u0432\u0435\u0437\u0434\u0438\u0435 \u0438 \u043d\u043e\u0432\u0430\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u044f. \u0417\u0432\u0435\u0437\u0434\u044b \u0438\u0433\u0440\u0430\u044e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043d\u043e\u0442\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438\u0445 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0417\u0430\u0442\u0435\u043c, \u043a \u043f\u0435\u0440\u0432\u044b\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u043c \u043d\u043e\u0442\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043f\u043e\u043a\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0439\u0434\u0435\u043d.<\/p>\n<p>  \u041f\u0438\u0441\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a libGDX. \u041c\u043d\u0435 \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u043a\u0430\u043a \u043d\u043e\u0432\u0438\u0447\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435. \u0414\u0430 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u044f \u043d\u0430\u0448\u0435\u043b \u0431\u043e\u043b\u044c\u0448\u0435. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-224175","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/224175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224175"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/224175\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}