Usando andEngine desde emacs

Hoy estaba hechando un vistazo a la programación de juegos en android, una librería con buena pinta para hacerlo es AndEngine, los tutoriales que he encontrado para hacerlo son para Eclipse, pero después de intentarlo y acabar un par de veces con un segfault ¡importando un proyecto! toca volver a los clásicos, vamos a ver como hacerlo con emacs.

Instalar android-mode

Partimos de tener android-mode, para instalarlo habrá que meterlo en el path, si queremos que sea global lo haremos en /usr/share/emacs/site-lisp/ (para esto harán falta permisos de root), sino tendremos que añadir el directorio al path con

1
(add-to-list 'load-path "<directorio>")

Después habrá que cargarlo y ajustar el path del SDK de android, en mi caso está en /home/kenkeiras/.android-sdk/, así que...

1
2
(require 'android-mode)
(setq android-mode-sdk-dir "/home/kenkeiras/.android-sdk/")

Estas cosas se pueden hacer en el buffer *Scratch* con lo que habría que repetirlas cada vez que vayamos a usar el plugin, o escribirlas en el archivo init.el para que lo haga automáticamente al iniciarse, si quisieramos aplicar los cambios al instante podríamos hacerlo pulsado C-x C-e (Control-x, Control-x) al final de cada línea.

Crear un proyecto

Una vez que tengamos eso instalado habrá que crear un proyecto, para esto desde emacs haremos M-x android-create-project (Alt-x android-create-project), el plugin nos preguntará en que directorio ubicar el proyecto, el nombre que se asignará al paquete, el de la actividad principal y un target. El target es la versión de Android para la que se “compilará” el código, pulsar tabulador dos veces probablemente hará que muestre las opciones (no se si será cosa de emacs-live).

Y con esto ya tendríamos el proyecto creado, si hicieramos

1
M-x android-build-debug (Alt-x android-build-debug)

y

1
M-x android-build-install (Alt-x android-build-install)

construiría el proyecto y lo transferiría al dispositivo que se encuentre activo, y ya se puede lanzar.

Hello world

Construyendo AndEngine

Para esto descargamos el proyecto en otro directorio, por ejemplo desde el repositorio

1
git clone https://github.com/nicolasgramlich/AndEngine

Dentro del directorio creado crearemos un archivo local.properties con la ubicación del SDK, en mi caso

1
sdk.dir=/home/kenkeiras/.android-sdk

Hecho esto, se puede construir (teniendo en cuenta que la versión del API por defecto es la 15, esto se puede cambiar en project.properties).

1
ant debug

Producirá un archivo classes.jar en el directorio bin, que deberá ser importado en el directorio libs de nuestro proyecto.

Código de ejemplo

Por último probaremos si funciona con algo tomado de Beggining andengine

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.example.sampleandengineapp;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.ui.activity.SimpleBaseGameActivity;

public class MainActivity extends SimpleBaseGameActivity{

    static final int CAMERA_WIDTH = 800;
    static final int CAMERA_HEIGHT = 480;


    @Override
    public EngineOptions onCreateEngineOptions(){
        Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        return new EngineOptions(
            true,
            ScreenOrientation.LANDSCAPE_SENSOR,
            new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
            mCamera);
    }


    @Override
    protected void onCreateResources(){
    }


    @Override
    protected Scene onCreateScene(){
        Scene scene = new Scene();
        scene.setBackground(new Background(0.09704f, 0.3454f, 0));
        return scene;
    }
}

No es gran cosa, pero funciona

solo un fondo

(Sí, es una pantalla en verde :P)

Escribiendo un port de Erlang » « Haciendo MySQLdumps más amigables