[libGDX] рд╣рдо Android рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдЦреЗрд▓ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рднрд╛рдЧ 1

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдореИрдВрдиреЗ рдЦреЗрд▓-рджреЗрд╡ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рднреА рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рдерд╛ред рджреВрд╕рд░рд╛ рднрд╛рдЧ рдпрд╣рд╛рдБ рд╣реИ ред



рдЦреЗрд▓ рдПрдХ рд╕реНрдХреНрд░реАрди рд╣реИ рдЬрд┐рд╕ рдкрд░ рдирдХреНрд╖рддреНрд░ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрд╕ рдирдХреНрд╖рддреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд░реЗ рдХрд╛ рдЕрдкрдирд╛ рд░рдВрдЧ (рдиреЛрдЯ) рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЛрдЯ "рдбреВ" рдХреЛ рдЖрдорддреМрд░ рдкрд░ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ "Mi" - рдкреАрд▓реЗ рд░рдВрдЧ рдореЗрдВред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:



рдЫрд╡рд┐



рддреЛ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдПрдХ рдирдпрд╛ рддрд╛рд░рд╛рдордВрдбрд▓ рдФрд░ рдПрдХ рдирдпрд╛ рдорд╛рдзреБрд░реНрдп рд╣реИред рд╕рд┐рддрд╛рд░реЗ рдкрд╣рд▓реЗ рдЪрд╛рд░ рдиреЛрдЯ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░, рдкрд╣рд▓реЗ рдЪрд╛рд░ рдиреЛрдЯреЛрдВ рдореЗрдВ рдЪрд╛рд░ рдФрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдХрд┐ рд╕реНрддрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред



рд╣рдо libGDX рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗрдВрдЧреЗред рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╣ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдЖрдпрд╛ред рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реАред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред



рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:







рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдКрдВрдЧрд╛ред рдореЗрд░реЗ рд▓рд┐рдП gdx-setup рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рддреЛ, рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ:



java -jar gdx-setup.jar
      
      







рдЕрдЧрд▓рд╛ рд╣рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ:







рдЬрдирд░реЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╣рдг рдкрд░ рдЬрд╛рдПрдВред



рдЧреНрд░рд╣рдг рдореЗрдВ, рдЖрдпрд╛рдд -> рдЧреНрд░реЗрдбрд▓ -> рдЧреНрд░реЗрдбрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ ред рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░реЗрдВ .. рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдмрд┐рд▓реНрдб рдХрд░реЗрдВ ред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ ред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред рддреБрд░рдВрдд рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ ( рдХреЛрд░ ) -> MyGame.java рдкрд░ рдЬрд╛рдПрдВ ред рд╣рдордиреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬреЛ gdx рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛, рдФрд░ рд╣рдореЗрдВ ApplicationAdapter рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЧреЗрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдирддреАрдЬрддрди, рд╡рд░реНрдЧ рдХреЛ рдлреЙрд░реНрдо рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:



 public class MyGame extends Game { @Override public void create() { } @Override public void render() { super.render(); } }
      
      







рдЕрдЧрд▓рд╛ред рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред рдФрд░ рдЗрд╕рдореЗрдВ рддреАрди рд╡рд░реНрдЧ рд╣реИрдВ:





рдЙрди рд╕рднреА рдХреЛ рд╕реНрдХреНрд░реАрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЙрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдорд╛рд░реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдореЗрдирдореЗрдиреНрд╕рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдмрдВрдж рдХрд░ рджреЗрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 public class MainMenuScreen implements Screen { //    final MyGame game; //     private Stage stage; private TextButton play, exit; private Table table; private LabelStyle labelStyle; //       ( ) public MainMenuScreen(final MyGame gam) { game = gam; //  --           stage = new Stage(new ScreenViewport()); //   .        Skin skin = new Skin(); TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal("images/game/images.pack")); skin.addRegions(buttonAtlas); TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.font = game.font; textButtonStyle.up = skin.getDrawable("button-up"); textButtonStyle.down = skin.getDrawable("button-down"); textButtonStyle.checked = skin.getDrawable("button-up"); labelStyle = new LabelStyle(); labelStyle.font = game.font; table = new Table(); table.setFillParent(true); //  .   listener,    .  ,       ,     play = new TextButton("", 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(); }; }); //  .    .   ,       . exit = new TextButton("", 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); //        (, ,  etc.) Gdx.input.setCatchBackKey(true); //    ,    ,          } @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() { //     game. stage.dispose(); game.dispose(); } }
      
      







рдЕрдЧрд▓рд╛ред рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ (Shift + Ctrl + O)ред рдФрд░ рдореБрдЦреНрдп рд╡рд░реНрдЧ MyGame.java рдкрд░ рдЬрд╛рдПрдВ ред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:



 public class MyGame extends Game { //        (    ) public BitmapFont font, levels; private static final String FONT_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;,{}\"┬┤`'<>"; @Override public void create() { //    RussoOne  Google Fonts.    TTF. (  ,  ttf  ) FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/russoone.ttf")); FreeTypeFontParameter param = new FreeTypeFontParameter(); param.size = Gdx.graphics.getHeight() / 18; //  .       .  ,     ,   . param.characters = FONT_CHARACTERS; //   font = generator.generateFont(param); //   param.size = Gdx.graphics.getHeight() / 20; levels = generator.generateFont(param); font.setColor(Color.WHITE); //   levels.setColor(Color.WHITE); generator.dispose(); //     . @Override public void render() { super.render(); } }
      
      



? public class MyGame extends Game { // ( ) public BitmapFont font, levels; private static final String FONT_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;,{}\"┬┤`'<>"; @Override public void create() { // RussoOne Google Fonts. TTF. ( , ttf ) FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/russoone.ttf")); FreeTypeFontParameter param = new FreeTypeFontParameter(); param.size = Gdx.graphics.getHeight() / 18; // . . , , . param.characters = FONT_CHARACTERS; // font = generator.generateFont(param); // param.size = Gdx.graphics.getHeight() / 20; levels = generator.generateFont(param); font.setColor(Color.WHITE); // levels.setColor(Color.WHITE); generator.dispose(); // . @Override public void render() { super.render(); } }



- '' '<>" \\ / + = () * рдФрд░ ;, {} \ред "; public class MyGame extends Game { // ( ) public BitmapFont font, levels; private static final String FONT_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;,{}\"┬┤`'<>"; @Override public void create() { // RussoOne Google Fonts. TTF. ( , ttf ) FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/russoone.ttf")); FreeTypeFontParameter param = new FreeTypeFontParameter(); param.size = Gdx.graphics.getHeight() / 18; // . . , , . param.characters = FONT_CHARACTERS; // font = generator.generateFont(param); // param.size = Gdx.graphics.getHeight() / 20; levels = generator.generateFont(param); font.setColor(Color.WHITE); // levels.setColor(Color.WHITE); generator.dispose(); // . @Override public void render() { super.render(); } }







рд╣рдо рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдмрдВрдзрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдирд╛рдордХ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ XMLparse.java рдХреНрд▓рд╛рд╕ рд╣реИред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдлрд┐рд░, рд╣рдо xml рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХрд┐рд╕ рд╕реНрддрд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдПрд╕реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ ( рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ -> рдПрд╕реЗрдЯреНрд╕ ) рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдЗрд╕рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░:







рдлрд╝реЙрдиреНрдЯ рдХреЛ рдлрд╝реЙрдиреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВред рдФрд░ xml рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╕реНрддрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред рдЕрдкрдиреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ (F5) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡рд╣ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░ рд╕рдХреЗред рдФрд░ рдЕрдм, рд╣рдорд╛рд░реЗ XMLparse.java рд╡рд░реНрдЧ рдХреЛ рдЖрдмрд╛рдж рдХрд░реЗрдВред рд╣рдо рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 public class XMLparse { public Array<String> XMLparseLevels() { Array<String> levels = new Array<String>(); Array<Integer> int_levels = new Array<Integer>(); FileHandle dirHandle; if (Gdx.app.getType() == ApplicationType.Android) { dirHandle = Gdx.files.internal("xml/levels"); } else { dirHandle = Gdx.files.internal(System.getProperty("user.dir") + "/assets/xml/levels"); //   desktop ,    -    .     assets    desktop-   assets android- } for (FileHandle entry : dirHandle.list()) { levels.add(entry.name().split(".xml")[0]); } //             .       .    Java .    :) for (int i = 0; i < levels.size; i++) { int_levels.add(Integer.parseInt(levels.get(i))); } int_levels.sort(); levels.clear(); for (int i = 0; i < int_levels.size; i++) { levels.add(String.valueOf(int_levels.get(i))); } return levels; } }
      
      







рд╡реИрд╕реЗ рдХреНрдпрд╛? рдЪрд▓рд┐рдП рдЖрдЦрд┐рд░ LevelScreen.java рд╡рд░реНрдЧ рдХреЛ рдЖрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдБ -> xml -> рд╕реНрддрд░ рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде 1.xml, 2.xml рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдФрд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



 public class LevelScreen implements Screen { final MyGame game; private Stage stage; private Table table; private LabelStyle labelStyle; private TextButton level; private Array<String> levels; public LevelScreen(MyGame gam) { game = gam; stage = new Stage(new ScreenViewport()); Skin skin = new Skin(); TextureAtlas buttonAtlas = new TextureAtlas(Gdx.files.internal("images/game/images.pack")); skin.addRegions(buttonAtlas); TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.font = game.levels; textButtonStyle.up = skin.getDrawable("level-up"); textButtonStyle.down = skin.getDrawable("level-down"); textButtonStyle.checked = skin.getDrawable("level-up"); //   XMLparse parseLevels = new XMLparse(); levels = parseLevels.XMLparseLevels(); labelStyle = new LabelStyle(); labelStyle.font = game.levels; //      MyGame table = new Table(); table.row().pad(20); //   +  table.center(); table.setFillParent(true); for (int i = 0; i < 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)); //     PlayScreen dispose(); }; }); table.add(level); //     ,               float indexLevel = Float.parseFloat(String.valueOf(i)) + 1; if (indexLevel % 5.0f == 0) table.row().padLeft(20).padRight(20).padBottom(20); } stage.addActor(table); //        Gdx.input.setInputProcessor(stage); Gdx.input.setCatchBackKey(true); //  ,         .      . 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(); } }
      
      







рд╡рд╛рд╣, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реИред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ (рдпрджрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ) рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ:





рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЗрдВ



рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!



рдЕрджреНрдпрддрди



рдореИрдВ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдЗрддрдиреА рдЬрд▓реНрджреА рдореЗрдВ рдерд╛ рдХрд┐ рдореИрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реНрдЯреЗрдЬ рдХреНрд▓рд╛рд╕ ( рд╕реНрдЯреЗрдЬ ) рднреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ libGDX рд╕реНрдЯреЗрдЬ рдХрд╛ рд╡рдВрд╢рдЬ рд╣реЛрдЧрд╛ред рд╣рдо рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ PlayStage.java рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:



 public class PlayStage extends Stage { public PlayStage(ScreenViewport screenViewport) { super(screenViewport); } //      @Override public boolean keyDown(int keyCode) { if (keyCode == Keys.BACK) { if (getHardKeyListener() != null) getHardKeyListener().onHardKey(keyCode, 1); } return super.keyDown(keyCode); } @Override public boolean keyUp(int keyCode) { if (keyCode == Keys.BACK){ if (getHardKeyListener() != null) getHardKeyListener().onHardKey(keyCode, 0); } return super.keyUp(keyCode); } public interface OnHardKeyListener { // ,     ,       (     ) public abstract void onHardKey(int keyCode, int state); } private OnHardKeyListener _HardKeyListener = null; public void setHardKeyListener(OnHardKeyListener HardKeyListener) { _HardKeyListener = HardKeyListener; } public OnHardKeyListener getHardKeyListener() { return _HardKeyListener; } }
      
      







рдЕрдм, LevelScreen рдореЗрдВ рд╣рдо рдХреНрд▓рд╛рд╕ рдкреНрд▓реЗрд╕реНрдЯреЗрдЬ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рд╕реНрдЯреЗрдЬ рдФрд░ рдХреЛрдИ рдФрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдФрд░ рдПрдХ рдФрд░ рдЬреЛрдбрд╝ред рдЪрд▓реЛ рдкреНрд▓реЗрд╕реНрдХреНрд░реАрди рдХреНрд▓рд╛рд╕ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЗрд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЗ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рдкрде рди рд▓реЗрдВред рдХреЛрдб:



 public class PlayScreen implements Screen { final MyGame game; //        ,     .     . public PlayScreen(final MyGame gam, String strLevel) { game = gam; } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); } @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() { game.dispose(); } }
      
      






All Articles