screens to your game – Screen is a interface and contains all the same methods than ApplicationListener. Also show() and hide() when screen is shown and hidden • Game – Game is an ApplicationListener that holds also methods for changing the screen: setScreen(Screen s)
Common objects to all screens! private SpriteBatch batch; // Returns the SpriteBatch public SpriteBatch getBatch() { return batch; } @Override public void create () { batch = new SpriteBatch(); // Create MainMenuScreen mainmenu = new MainMenuScreen(this); // Set it visible setScreen(mainmenu); } @Override public void render () { super.render(); // Remember this, otherwise nothing is shown! } }
– Rendering vector graphics is costly – Although you can use Freetype - extension • libGDX makes use of bitmap files (pngs) to render fonts • Use external tool to convert TTF to PNG! • Each glyph in the font has a corresponding TextureRegion • Default font Arial provided, other fonts you have to create! • If you use same font in different screens, create font once and share it with other screens.
meters • Create two cameras, one with a world with pixel resolution and on with a world of meter resolution • In render – use the resolution of the fontcamera – draw fonts – use the resolution of the "normal" camera – draw your game objects
• Windows, Linux, OS X: xml-file in home dir – Windows: %UserProfile%/.prefs/My Preferences – Mac: ~/.prefs/My Preferences • On Android, the system's SharedPreferences class is used. – Preferences will survive app updates, but are deleted when the app is uninstalled.
may want to use it. • May be useful for "board games" • Higher level framework for creating games • Provides UI Toolkit also: Scene2d.ui • Tutorial – https://github.com/libgdx/libgdx/wiki/Scene2d
FitViewport(width, heigth), batch); // PlayerActor extends Actor { .. } PlayerActor player = new PlayerActor(); // Let's add the actor to the stage gameStage.addActor(player);
dragged .. – Hit detection; dragging / touching within the bounds of actor • Action system: rotate, move, scale actors in parallel – Also rotation and scaling of group of actors
events from keyboard and touch • Add to your ApplicationAdapter – Gdx.input.setInputProcessor(myStage); • Stage distributes input to actors • Stage has act method, by calling this, every act method of every actor is called
• Position is the left corner of the actor • Position is relative to the actor’s parent • Actor may have actions – Change the presentation of the actor (move, resize) • Actor can react to events
of actors private Stage stage; // We will have player actor in the stage private BlueBirdActor playerActor; private float width = 8.0f; private float heigth = 4.8f; @Override public void create () { // Creating the stage stage = new Stage(new FitViewport(width, height), batch); // Creating the actors playerActor = new BlueBirdActor(); // add actors to stage stage.addActor(playerActor); } @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Call act on every actor stage.act(Gdx.graphics.getDeltaTime()); // Call draw on every actor stage.draw(); } }
input – Gdx.input.setInputProcessor(stage); • Stage will fire events to actors • Actor may receive events if it has a listener – actor.addListener(new InputListener() { … } ); • Actor must specify bounds in order to receive input events within those bounds! • To handle key input, actor has to have keyboard focus
of actors private Stage stage; // We will have player actor in the stage private BlueBirdActor playerActor; @Override public void create () { // Creating the stage stage = new Stage(...); // Sets the InputProcessor that will receive all touch and key input events. // It will be called before the ApplicationListener.render() method each frame. // // Stage handles the calling the inputlisteners for each actor. Gdx.input.setInputProcessor(stage); // Creating the actors playerActor = new BlueBirdActor(); // add actors to stage stage.addActor(playerActor); stage.setKeyboardFocus(playerActor); } @Override public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Call act on every actor stage.act(Gdx.graphics.getDeltaTime()); // Call draw on every actor stage.draw(); } }
Updated on every frame (act-method) • Many actions available – MoveToAction – RotateToAction – ScaleToAction • Example – MoveToAction action = new MoveToAction(); – action.setPosition(300f, 700f); – action.setDuration(2f); – actor.addAction(action);
add following to your project – uiskin.png, uiskin.atlas, uiskin.json, default.fnt, https://github.com/libgdx/libgdx/tree/master/test s/gdx-tests-android/assets/data • More skins available – https://github.com/libgdx/libgdx/wiki/Skin