では、Scene 関係のクラスを3本ほど。
 抽象クラスの BaseScene.java です。

package com.chabaori.sample;

import org.andengine.engine.Engine;
import org.andengine.engine.camera.BoundCamera;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.SpriteBackground;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.vbo.VertexBufferObjectManager;

import com.chabaori.sample.SceneManager.SceneType;

public abstract class BaseScene extends Scene{
	protected Engine engine;
	protected MainActivity activity;
	protected ResourcesManager resourcesManager;
	protected VertexBufferObjectManager vbom;
	protected BoundCamera camera;
	protected Sprite background;

	public BaseScene(){
		this.resourcesManager = ResourcesManager.getInstance();
		this.engine = resourcesManager.engine;
		this.activity = resourcesManager.activity;
		this.vbom = resourcesManager.vbom;
		this.camera = resourcesManager.camera;
		createScene();
	}
	
	public abstract void createScene();
	
	public abstract void disposeScene();

	public abstract void onBackKeyPressed();
	
	public abstract SceneType getSceneType();
	
	protected void createBackground(){
		background = new Sprite(MainActivity.CAMERA_WIDTH / 2, MainActivity.CAMERA_HEIGHT / 2, resourcesManager.background_region, vbom);
		setBackground(new SpriteBackground(background));
	}
}

 次に BaseScene を継承した SplashScene.java。

package com.chabaori.sample;

import org.andengine.entity.sprite.Sprite;

import com.chabaori.sample.SceneManager.SceneType;

public class SplashScene extends BaseScene{
	private Sprite splash;
	
	@Override
	public void createScene(){
		createBackground();
    	splash = new Sprite(MainActivity.CAMERA_WIDTH / 2, MainActivity.CAMERA_HEIGHT / 2, resourcesManager.splash_region, vbom);
    	attachChild(splash);
	}

	@Override
	public void onBackKeyPressed(){
		return;
	}

	@Override
	public SceneType getSceneType(){
		return SceneType.SCENE_SPLASH;
	}

	@Override
	public void disposeScene(){
		background.detachSelf();
		background.dispose();
		splash.detachSelf();
		splash.dispose();
		this.detachSelf();
		this.dispose();
	}
}

 そんでもって、BaseScene を継承した GameScene.javaです。Game じゃないけどね。

package com.chabaori.sample;

import org.andengine.entity.sprite.Sprite;

import com.chabaori.sample.SceneManager.SceneType;

public class GameScene extends BaseScene {
	private Sprite sprite;
	
	@Override
	public void createScene(){
		createBackground();
    	Sprite sprite = new Sprite(MainActivity.CAMERA_WIDTH / 2, MainActivity.CAMERA_HEIGHT / 2, resourcesManager.sprite_region, vbom);
    	attachChild(sprite);
	}

	@Override
	public void onBackKeyPressed(){
		System.exit(0);
	}

	@Override
	public SceneType getSceneType(){
		return SceneType.SCENE_GAME;
	}
	
	@Override
	public void disposeScene(){
		background.detachSelf();
		background.dispose();
		sprite.detachSelf();
		sprite.dispose();
		this.detachSelf();
		this.dispose();
	}
}

 これで、一通りの java ファイルが揃ったことになります。
 AndEngine GLES2-AnchorCenter を導入してライブラリに追加すれば動く・・はず。
 
 
 次回、ライブラリ参照を切った Eclipse のプロジェクトアーカイブを載っけます。

 シーン遷移を管理する SceneManager.java。

package com.chabaori.sample;

import org.andengine.engine.Engine;
import org.andengine.ui.IGameInterface.OnCreateSceneCallback;

public class SceneManager{
	private BaseScene splashScene;
	private BaseScene gameScene;
	
	private static final SceneManager INSTANCE = new SceneManager();
	private SceneType currentSceneType = SceneType.SCENE_SPLASH;
	private BaseScene currentScene;
	private Engine engine = ResourcesManager.getInstance().engine;
	
	public enum SceneType{
		SCENE_SPLASH,
		SCENE_GAME,
	}
	
	public void setScene(BaseScene scene){
		engine.setScene(scene);
		currentScene = scene;
		currentSceneType = scene.getSceneType();
	}

	public void setScene(SceneType sceneType){
		switch (sceneType){
			case SCENE_GAME:
				setScene(gameScene);
				break;
			case SCENE_SPLASH:
				setScene(splashScene);
				break;
			default:
				break;
		}
	}
	
	public void createGameScene(){
		ResourcesManager.getInstance().loadResources();
		gameScene = new GameScene();
		SceneManager.getInstance().setScene(gameScene);
        disposeSplashScene();
	}
	
	public void createSplashScene(OnCreateSceneCallback pOnCreateSceneCallback){
		ResourcesManager.getInstance().loadSplashScreen();
		splashScene = new SplashScene();
		currentScene = splashScene;
		pOnCreateSceneCallback.onCreateSceneFinished(splashScene);
	}
	
	private void disposeSplashScene(){
		ResourcesManager.getInstance().unloadSplashScreen();
		splashScene.disposeScene();
		splashScene = null;
	}
	
	public static SceneManager getInstance(){
		return INSTANCE;
	}
	
	public SceneType getCurrentSceneType(){
		return currentSceneType;
	}
	
	public BaseScene getCurrentScene(){
		return currentScene;
	}
}

 今回は、ResourcesManager.java、画像などのリソースを一括管理するクラスです。

package com.chabaori.sample;

import org.andengine.engine.Engine;
import org.andengine.engine.camera.BoundCamera;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.vbo.VertexBufferObjectManager;
														
public class ResourcesManager{
	
	private static final ResourcesManager INSTANCE = new ResourcesManager();
	
	public Engine engine;
	public MainActivity activity;
	public BoundCamera camera;
	public VertexBufferObjectManager vbom;

	private BitmapTextureAtlas splashTextureAtlas;
	public ITextureRegion splash_region;
	private BitmapTextureAtlas backgroundTextureAtlas;
	public ITextureRegion background_region;
	private BitmapTextureAtlas spriteTextureAtlas;
	public ITextureRegion sprite_region;

	public void loadSplashScreen(){
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
        splashTextureAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
        splash_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashTextureAtlas, activity, "splash.png", 0, 0);
        splashTextureAtlas.load();
        backgroundTextureAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 512, 1024, TextureOptions.BILINEAR);
        background_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(backgroundTextureAtlas, activity, "background.png", 0, 0);
        backgroundTextureAtlas.load();
	}
	
	public void unloadSplashScreen(){
		splashTextureAtlas.unload();
		splashTextureAtlas = null;
		splash_region = null;
	}
	
	public void loadResources(){
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
        spriteTextureAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
        sprite_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(spriteTextureAtlas, activity, "sprite.png", 0, 0);
        spriteTextureAtlas.load();
	}
	
	public static void prepareManager(Engine engine, MainActivity activity, BoundCamera camera, VertexBufferObjectManager vbom){
		getInstance().engine = engine;
		getInstance().activity = activity;
		getInstance().camera = camera;
		getInstance().vbom = vbom;
	}
	
	public static ResourcesManager getInstance(){
		return INSTANCE;
	}
}

 画像は、background.png と splash.png、sprite.png を assets フォルダ内に gfx フォルダを作って置いておきます。
background splash sprite

 タッチ制御のプログラムを抜書きしても「全体がわからないから使いどころがわからない」というご意見もあるかもしれないと思ったので、プサンプルプロジェクトを作ってみました。
 
 起動後スプラッシュ画面を表示し、2秒後にメイン Scene に遷移し Sprite を表示します。(タッチ制御は書いてない!)

 スプラッシュ画面を表示し、
device-2014-06-08-002913
 Sprite を表示する。
device-2014-06-08-002834
 登場するクラスファイルは、
  MainActivity.java
  ResourcesManager.java
  SceneManager.java
  BaseScene.java
  SplashScene.java
  GameScene.java

 今日は、MainActivity.java を載せましょう。

package com.chabaori.sample;

import java.io.IOException;

import org.andengine.engine.Engine;
import org.andengine.engine.LimitedFPSEngine;
import org.andengine.engine.camera.BoundCamera;
import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.WakeLockOptions;
import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.ui.activity.BaseGameActivity;
import android.view.KeyEvent;

public class MainActivity extends BaseGameActivity {
	private BoundCamera camera;
	static final int CAMERA_WIDTH = 480;
	static final int CAMERA_HEIGHT = 800;
	   
	@Override
	public Engine onCreateEngine(EngineOptions pEngineOptions){
		return new LimitedFPSEngine(pEngineOptions, 60);
	}
	
	@Override
	public EngineOptions onCreateEngineOptions(){
		camera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		camera.setBoundsEnabled(true);
		EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, new FillResolutionPolicy(), this.camera);
		engineOptions.getRenderOptions().getConfigChooserOptions().setRequestedMultiSampling(true);
		engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
		return engineOptions;
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event){  
	    if (keyCode == KeyEvent.KEYCODE_BACK){
	    	SceneManager.getInstance().getCurrentScene().onBackKeyPressed();
	    }
	    return false; 
	}
	
	@Override
	protected void onPause(){
	    super.onPause();
	}

	@Override
	protected synchronized void onResume(){
	    super.onResume();
	    System.gc();
	}

	@Override
	public void onCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback) throws IOException{
		ResourcesManager.prepareManager(mEngine, this, camera, getVertexBufferObjectManager());
		pOnCreateResourcesCallback.onCreateResourcesFinished();
	}

	@Override
	public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws IOException{
		SceneManager.getInstance().createSplashScene(pOnCreateSceneCallback);
	}

	@Override
	public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws IOException{
		mEngine.registerUpdateHandler(new TimerHandler(2.0f, new ITimerCallback(){
            @Override
			public void onTimePassed(final TimerHandler pTimerHandler){
                mEngine.unregisterUpdateHandler(pTimerHandler);
                SceneManager.getInstance().createGameScene();
            }
		}));
		pOnPopulateSceneCallback.onPopulateSceneFinished();
	}
}

「コメントもなしでホントに載せるだけ!?」と、思われたかもいらっしゃるでしょうか。
 
 
 えぇ、載せるだけです。

 画面タッチの制御関係は度々書かざるを得ないから、前回のロングタップに続けて書き留めておきます。
 用いるは、AndEngine GLES2-AnchorCenter です。
 
 ピンチズームとスクロールは「Polygons Lights Out」と「Polygons Mine Sweeper」で実装済みなので、コードを抜書きします。
 MainActivity での Camera の設定です。

import org.andengine.engine.Engine;
import org.andengine.engine.LimitedFPSEngine;
import org.andengine.engine.camera.ZoomCamera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.andengine.ui.activity.BaseGameActivity;

public class MainActivity extends BaseGameActivity {
	private ZoomCamera camera;
	static final int CAMERA_WIDTH = 480;
	static final int CAMERA_HEIGHT = 800;
	
	@Override
	public Engine onCreateEngine(EngineOptions pEngineOptions){
		return new LimitedFPSEngine(pEngineOptions, 60);
	}
	
	@Override
	public EngineOptions onCreateEngineOptions(){
		camera = new ZoomCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		camera.setBounds(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		camera.setBoundsEnabled(true);
		EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, new FillResolutionPolicy(), this.camera);
		return engineOptions;
	}

 もちろん ZoomCamera を選択します。
で、Scene を継承したサブクラスで実装します。私の場合、最大3倍止まりの設定です。

import org.andengine.entity.scene.IOnSceneTouchListener;
import org.andengine.entity.scene.Scene;
import org.andengine.input.touch.TouchEvent;
import org.andengine.input.touch.detector.PinchZoomDetector;
import org.andengine.input.touch.detector.ScrollDetector;
import org.andengine.input.touch.detector.SurfaceScrollDetector;
import org.andengine.input.touch.detector.PinchZoomDetector.IPinchZoomDetectorListener;
import org.andengine.input.touch.detector.ScrollDetector.IScrollDetectorListener;

public class GameScene extends Scene implements IOnSceneTouchListener, IScrollDetectorListener, IPinchZoomDetectorListener{
	final static float MIN_ZOOM = 1.0f;
	final static float MAX_ZOOM = 3.0f;
	private SurfaceScrollDetector mScrollDetector;
	private PinchZoomDetector mPinchZoomDetector;
	private float mPinchZoomStartedCameraZoomFactor;
	private float zoomValue = 1.0f;
	private boolean isTouchOK = true;
	private boolean isMove;
	
	GameScene(){
		setOnSceneTouchListener(this);
		setOnAreaTouchTraversalFrontToBack();
		mScrollDetector = new SurfaceScrollDetector(this);
		mScrollDetector.setTriggerScrollMinimumDistance(15f);
		mPinchZoomDetector = new PinchZoomDetector(this);
		setOnSceneTouchListener(this);
		setTouchAreaBindingOnActionDownEnabled(true);
		isTouchOK = true;
	}

	@Override
	public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent){
		if(isTouchOK){
			mPinchZoomDetector.onTouchEvent(pSceneTouchEvent);

			if(mPinchZoomDetector.isZooming()){
				mScrollDetector.setEnabled(false);  // ピンチズームする時はスクロールはしない
				isMove = true; // これはなくてもイイのかな
			}
			else{
				if (pSceneTouchEvent.isActionMove()){
					mScrollDetector.setEnabled(true); // 動き出したらスクロールをセット
				}
				else if (pSceneTouchEvent.isActionUp()){
					// スクロール後はタップ処理をしない
					if(!isMove){
						isTouchOK = false;
						// タップ時の処理
						// 処理が終わったら isTouchOK = true とする
					}
					isMove = false;
				}
				else if (pSceneTouchEvent.isActionOutside()){
					isMove = false;
				}
				mScrollDetector.onTouchEvent(pSceneTouchEvent);
			}
		}
		return true;
	}

	@Override
	public void onScrollStarted(final ScrollDetector pScollDetector, final int pPointerID, final float pDistanceX, final float pDistanceY) {
		final float zoomFactor = camera.getZoomFactor();
		camera.offsetCenter(-pDistanceX / zoomFactor, pDistanceY / zoomFactor);
		isMove = true;
	}

	@Override
	public void onScroll(final ScrollDetector pScollDetector, final int pPointerID, final float pDistanceX, final float pDistanceY) {
		final float zoomFactor = camera.getZoomFactor();
		camera.offsetCenter(-pDistanceX / zoomFactor, pDistanceY / zoomFactor);
	}
	
	@Override
	public void onScrollFinished(final ScrollDetector pScollDetector, final int pPointerID, final float pDistanceX, final float pDistanceY) {
		final float zoomFactor = camera.getZoomFactor();
		camera.offsetCenter(-pDistanceX / zoomFactor, pDistanceY / zoomFactor);
	}

	@Override
	public void onPinchZoomStarted(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent) {
		mPinchZoomStartedCameraZoomFactor = camera.getZoomFactor();
	}

	@Override
	public void onPinchZoom(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent, final float pZoomFactor) {
		float zoomValue = mPinchZoomStartedCameraZoomFactor * pZoomFactor;
		if(zoomValue < 1.1) zoomValue = MIN_ZOOM; // 1.1倍未満になったら原寸に戻す
		else if(zoomValue > MAX_ZOOM) zoomValue = MAX_ZOOM;
		camera.setZoomFactor(zoomValue);
	}

	@Override
	public void onPinchZoomFinished(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent, final float pZoomFactor) {
		float zoomValue = mPinchZoomStartedCameraZoomFactor * pZoomFactor;
		if(zoomValue < 1.1) zoomValue = MIN_ZOOM;
		else if(zoomValue > MAX_ZOOM) zoomValue = MAX_ZOOM;
		camera.setZoomFactor(zoomValue);
	}

}

 写し漏れで、何かが足りないかもしれませんが、概ねこんな感じ。
 
 onScrollStarted() 内の isMove = true; は、 onSceneTouchEvent() のif (pSceneTouchEvent.isActionMove()){} 内に入れても動く気がするのですが、このロジックで現に動いているので試してはいません。
 
 毎度、同じような言いっぷりで申し訳ない。