Andengine BlackBoxes Sprites无法正确加载

时间:2013-08-15 05:46:54

标签: java android andengine sprite

嗨,我刚刚开发的Android和我有一些麻烦我的精灵没有正确加载。在我开始添加AnalogOnScreenControl之前,我的代码非常好,现在我的所有精灵包括我的AnalogOnScreenControl只显示一个黑盒子。控件上的小块也是黑色的。唯一不是黑色的东西是黑地和地面本身。继承我的代码:

public class MainActivity extends BaseGameActivity {

Scene scene;
protected static final int CAMERA_WIDTH = 256;
protected static final int CAMERA_HEIGHT = 144;
BitmapTextureAtlas playerTexture;
ITextureRegion playerTextureRegion;
PhysicsWorld physicsWorld;
private Camera mCamera;

private TextureRegion controlTextureRegion;
private TextureRegion controlNubTextureRegion;

@Override
public EngineOptions onCreateEngineOptions() {
    // TODO Auto-generated method stub
    mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); // Camera
                                                                    // Defines
                                                                    // How
                                                                    // we
                                                                    // see
                                                                    // the
                                                                    // screen
    EngineOptions options = new EngineOptions(true,
            ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(
                    CAMERA_WIDTH, CAMERA_HEIGHT), mCamera); // set screen
                                                            // orientation
                                                            // and camera to
                                                            // engine
                                                            // options
    return options; // return those options
}

@Override
public void onCreateResources(
        OnCreateResourcesCallback pOnCreateResourcesCallback)
        throws Exception {
    // TODO Auto-generated method stub
    loadGfx(); // load graphics
    pOnCreateResourcesCallback.onCreateResourcesFinished(); // add callback
}

private void loadGfx() {
    // TODO Auto-generated method stub
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    playerTexture = new BitmapTextureAtlas(getTextureManager(), 88, 23);
    playerTextureRegion = BitmapTextureAtlasTextureRegionFactory
            .createFromAsset(playerTexture, getBaseContext(),
                    "mrsaispritesheet.png", 0, 0);

    this.controlTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(new BuildableBitmapTextureAtlas(getTextureManager(), 32, 32), this.getAssets(), "basecontrol.png", false);
    this.controlNubTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(new BuildableBitmapTextureAtlas(getTextureManager(), 32, 32), this.getAssets(), "controlnub.png", false); 


}

@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
        throws Exception {
    // TODO Auto-generated method stub


    final AnalogOnScreenControl control = new AnalogOnScreenControl(0,
            CAMERA_HEIGHT - this.controlTextureRegion.getHeight(),
            this.mCamera, this.controlTextureRegion,
            this.controlNubTextureRegion, 200,
            getVertexBufferObjectManager(),
            new IAnalogOnScreenControlListener() {

                @Override
                public void onControlChange(
                        BaseOnScreenControl pBaseOnScreenControl,
                        float pValueX, float pValueY) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onControlClick(
                        AnalogOnScreenControl pAnalogOnScreenControl) {
                    // TODO Auto-generated method stub

                }

    });




    this.scene = new Scene();
    this.scene.setBackground(new Background(0, 125, 58));

    physicsWorld = new PhysicsWorld(new Vector2(0,
            SensorManager.GRAVITY_MOON), false);
    this.scene.registerUpdateHandler(physicsWorld);
    createWalls();
    this.scene.setChildScene(control);
    pOnCreateSceneCallback.onCreateSceneFinished(this.scene);

}

private void createWalls() {
    // TODO Auto-generated method stub
    FixtureDef WALL_FIX = PhysicsFactory.createFixtureDef(0.0f, 0.0f, 0.0f);
    Rectangle ground = new Rectangle(0, CAMERA_HEIGHT - 15, CAMERA_WIDTH,
            15, this.mEngine.getVertexBufferObjectManager());
    ground.setColor(new Color(15, 50, 0));
    PhysicsFactory.createBoxBody(physicsWorld, ground, BodyType.StaticBody,
            WALL_FIX);
    this.scene.attachChild(ground);
}

@Override
public void onPopulateScene(Scene pScene,
        OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
    // TODO Auto-generated method stub

    Sprite sPlayer = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2,
            playerTextureRegion,
            this.mEngine.getVertexBufferObjectManager());

    final FixtureDef PLAYER_FIX = PhysicsFactory.createFixtureDef(10.0f,
            0.0f, 0.0f);

    Body body = PhysicsFactory.createBoxBody(physicsWorld, sPlayer,
            BodyType.DynamicBody, PLAYER_FIX);
    this.scene.attachChild(sPlayer);
    physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer,
            body, true, false));

    pOnPopulateSceneCallback.onPopulateSceneFinished();
}

}

知道我做错了什么?帮助是apreciated:]

1 个答案:

答案 0 :(得分:1)

创建它们之后,需要调用load函数来加载纹理。像这样:

playerTexture.load();

此行必须在创建它们之后