tk.makigas.makipong.Makipong.java Source code

Java tutorial

Introduction

Here is the source code for tk.makigas.makipong.Makipong.java

Source

/*
 * Makipong, just another Pong clone
 * Copyright (C) 2013 Dani Rodrguez
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package tk.makigas.makipong;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.GL11;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Stage;

public class Makipong implements ApplicationListener {

    /** El gestor de recursos que usa todo el juego. */
    public static final AssetManager MANAGER = new AssetManager();

    /** Escenario donde agruparemos los objetos. */
    private Stage stage;

    /** Palas usadas en nuestro juego. */
    private PalaActor pala1, pala2;

    /** Bola usada en el juego. */
    private BolaActor bola;

    @Override
    public void create() {
        // Antes que nada, preparamos la carga de texturas.
        // TODO: Esto podra moverse a otra parte y optimizarse ms adelante.
        MANAGER.load("bola.png", Texture.class);
        MANAGER.load("paleta.png", Texture.class);
        MANAGER.finishLoading();

        // Construimos los elementos que vamos a usar en nuestro juego.
        pala1 = new PalaActor();
        pala1.addListener(new PalaUserInput(pala1));
        pala2 = new PalaActor();
        bola = new BolaActor();

        // Posicionamos los objetos en la pantalla. La pelota se sita en el
        // centro de toda la pantalla. Ambas paletas se centran verticalmente,
        // una se alinea a la izquierda y la otra se alinea a la derecha
        // separadas 30 pxeles de los bordes de la pantalla.

        // Para centrar cosas en la pantalla simplemente hay que restar el
        // ancho o el alto de la pantalla (segn la coordenada en la que
        // estemos) al ancho o el alto del objeto que pretendamos centrar,
        // y dividir esa resta entre dos. Geomtricamente puede demostrarse
        // esto, que tambin puede expresarse como restar la mitad del ancho
        // o del alto de la pantalla a la mitad del ancho o el alto del objeto.
        int w = Gdx.graphics.getWidth(), h = Gdx.graphics.getHeight();
        pala1.setPosition(30, (h - pala1.getHeight()) / 2);
        pala2.setPosition(w - pala2.getWidth() - 30, (h - pala2.getHeight()) / 2);
        bola.setPosition((w - bola.getWidth()) / 2, (h - bola.getHeight()) / 2);

        // Finalmente construimos el escenario y aadimos los actores.
        stage = new Stage();
        stage.addActor(pala1);
        stage.addActor(pala2);
        stage.addActor(bola);

        // El escenario es un InputProcessor. Como vamos a gestionar la entrada
        // directamente desde los actores, podemos capturar la entrada usando
        // el escenario directamente.
        Gdx.input.setInputProcessor(stage);

    }

    @Override
    public void resize(int width, int height) {
        // TODO: Aadir cdigo al escalar el escenario.
    }

    @Override
    public void render() {
        Gdx.gl.glClear(GL11.GL_COLOR_BUFFER_BIT); // Limpiamos la pantalla
        //      stage.act();      // Dejamos que el escenario se actualice...
        stage.draw(); // Y lo renderizamos todo.
    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void dispose() {
        stage.dispose();
        MANAGER.dispose();
    }
}