Documentación AndEngine

Por David G. Shannon y David Pérez Camacho AndEngine es un game engine para la plataforma android. Un game engine es un motor que tiene funciones para básicamente todo lo que necesita un juego, gráficos, sonido, control de entrada, física, etc. AndEngine en concreto solo soporta gráficos 2D y es una api privada desarrollada por el programador Nicolas Gramlich, que sea una api privada significa que hay que tener cuidado con el soporte para las versiones de android, ya que todo depende de que versiones ha decidido soportar el programador y si la api tiene futuro o no, y esto resulta ser un gran problema si quieres que tu aplicación perdure en el market de android. Ahora vamos a ver qué aspecto tiene una clase hecha con AndEngine.

public class PhysicsExample extends BaseGameActivity implements IAccelerometerListener, IOnSceneTouchListener { // =========================================================== // Constants // =========================================================== private static final int CAMERA_WIDTH = 720; private static final int CAMERA_HEIGHT = 480; private static final FixtureDef FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); // =========================================================== // Fields // =========================================================== private BitmapTextureAtlas mBitmapTextureAtlas; private TiledTextureRegion mBoxFaceTextureRegion; private TiledTextureRegion mCircleFaceTextureRegion; private TiledTextureRegion mTriangleFaceTextureRegion; private TiledTextureRegion mHexagonFaceTextureRegion; private Scene mScene; private PhysicsWorld mPhysicsWorld; private int mFaceCount = 0; // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public Engine onLoadEngine() { Toast.makeText(this, "Touch the screen to add objects.", Toast.LENGTH_LONG).show(); final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); final EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera); engineOptions.getTouchOptions().setRunOnUpdateThread(true); return new Engine(engineOptions); } @Override public void onLoadResources() { /* Textures. */ this.mBitmapTextureAtlas = new BitmapTextureAtlas(64, 128, TextureOptions.BILINEAR_PREMULTIPLYALPHA); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); /* TextureRegions. */ this.mBoxFaceTextureRegion =

enableAccelerometerSensor(this). this. } @Override public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) { final Vector2 gravity = Vector2Pool.mPhysicsWorld. "face_hexagon_tiled.5f.setBackground(new ColorBackground(0. } @Override public void onLoadComplete() { } @Override public boolean onSceneTouchEvent(final Scene pScene. PhysicsFactory. this.createBoxBody(this.mBitmapTextureAtlas.mScene. return this. this.createFixtureDef(0. PhysicsFactory.createBoxBody(this. "face_box_tiled.mTriangleFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory. 96.mScene.mPhysicsWorld = new PhysicsWorld(new Vector2(0.mPhysicsWorld.mEngine.attachChild(roof). // 64x32 this. this.png".registerUpdateHandler(new FPSLogger()).attachChild(right).mHexagonFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory. 0. } } return false.addFace(pSceneTouchEvent. 0. false).mPhysicsWorld. roof.attachChild(ground). 64.GRAVITY_EARTH). this.isActionDown()) { this.obtain(pAccelerometerData. return true. 2. "face_circle_tiled.mScene. 0. final TouchEvent pSceneTouchEvent) { if(this. this. BodyType. 2. CAMERA_WIDTH.mPhysicsWorld != null) { if(pSceneTouchEvent.mScene = new Scene(). BodyType. 2). this.createTiledFromAsset(this.mScene. pSceneTouchEvent. 0. } @Override public Scene onLoadScene() { this.StaticBody. } @Override public void onResumeGame() { super. PhysicsFactory.2. this.setGravity(gravity). 0. 2.BitmapTextureAtlasTextureRegionFactory. CAMERA_HEIGHT .loadTexture(this.png". wallFixtureDef). final Shape ground = new Rectangle(0.setOnSceneTouchListener(this).mScene. final FixtureDef wallFixtureDef = PhysicsFactory.getY()).mPhysicsWorld). BodyType.png". SensorManager. 0. 2.attachChild(left). 0. 2.StaticBody. this.recycle(gravity). BodyType.mBitmapTextureAtlas.createBoxBody(this. CAMERA_WIDTH. Vector2Pool.StaticBody. 1). this.mEngine. CAMERA_HEIGHT).registerUpdateHandler(this.onPauseGame(). 1). right. this. 1).mBitmapTextureAtlas). ground.createTiledFromAsset(this. left. this. wallFixtureDef). 0. wallFixtureDef). final Shape right = new Rectangle(CAMERA_WIDTH .mPhysicsWorld.createTiledFromAsset(this.5f).2.getX(). 0)). final Shape roof = new Rectangle(0.mCircleFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.png". // 64x32 this.mPhysicsWorld. // 64x32 this.disableAccelerometerSensor(). this. 2). 2. pAccelerometerData. PhysicsFactory. } . 32.createTiledFromAsset(this.getX(). } @Override public void onPauseGame() { super. "face_triangle_tiled.onResumeGame().mBitmapTextureAtlas. this. this. // 64x32 this.mScene.mBitmapTextureAtlas. 1). 0. this.getY()).createBoxBody(this.getTextureManager(). 0.StaticBody. 0.mScene. final Shape left = new Rectangle(0.mScene. wallFixtureDef). CAMERA_HEIGHT).

mPhysicsWorld != null) { if(pSceneTouchEvent. public void onLoadComplete(): Esta función se ejecuta cuando el juego ha acabado de cargar todo. que como su nombre indica.mPhysicsWorld. y todos los elementos que queremos ver por pantalla. BaseGameActivity. como nosotros.getY()). enemigos. tenemos una función para detectar cuando se toca la pantalla y otro evento para el acelerador del dispositivo. Lo primero que hay que tener en cuenta es la clase de la que heredamos.isActionDown()) { this. a la clase Scene se le tienen que añadir los loops.getX(). es mejor descargarse el código fuente y los ejemplos que son realmente útiles. Vector2Pool.com/p/andengine/source/checkout .obtain(pAccelerometerData. final TouchEvent pSceneTouchEvent) { if(this. http://code. Para más información recomiendo ir a la página web de andengine donde tienen un foro para dudas muy útil. Todas las Activities de AndEngine deberían heredar de BaseGameActivity e implementar las funciones básicas que son: public void onLoadEngine(): Esta función se ejecuta al principio del todo y sirve para configurar aspectos del motor como la cámara. todos los loops.google. return true.recycle(gravity). Sinceramente no le hemos dado mucha importancia. nuestras clases de personaje.org/forums/ De todas formas. si eres una persona impaciente. Aquí tenemos que inicializar el motor físico. } } return false. etc. public void onLoadScene(): Esta función ya ejecuta el juego en si. pSceneTouchEvent.andengine. this. etc. } @Override public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) { final Vector2 gravity = Vector2Pool. mapas.setGravity(gravity). la orientación de la pantalla. public void onLoadResources(): Desde esta función cargaremos todas las texturas.Este es un ejemplo que demuestra lo que puede hacer el motor físico del game engine. Este ejemplo concreto está bien porque también implementa eventos para la interacción. sonidos y música que necesitemos. los juegos con AndEngine funcionan por escenas.getX(). pAccelerometerData. } Se entienden bastante bien con solo leer el código. @Override public boolean onSceneTouchEvent(final Scene pScene.getY()). como el de la física. pero para explicar los conceptos básicos nos servirá.addFace(pSceneTouchEvent. es un tipo de Activity. http://www. Si nos fijamos.

Sign up to vote on this title
UsefulNot useful