【问题标题】:AndEngine not displaying spriteAndEngine 不显示精灵
【发布时间】:2014-04-09 19:31:13
【问题描述】:

我正在尝试制作一个基本的 AndEngine 游戏,但精灵没有出现。我没有收到任何错误。

我找不到问题,帮助我的人也找不到,因此非常感谢任何帮助。

public class Game extends BaseGameActivity implements SensorEventListener {

Scene scene;
protected static final int CAMERA_WIDTH = 800;
protected static final int CAMERA_HEIGHT = 480;
private BuildableBitmapTextureAtlas playerTexture;
private TextureRegion regionCell;
private Sprite sprCell;
private SensorManager sensorManager;

private float accellSpeedX, accellSpeedY;
private float sprX, sprY;

@Override
public EngineOptions onCreateEngineOptions() {
    // TODO Auto-generated method stub
    Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    EngineOptions options = new EngineOptions(true,
            ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(
                    CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
    return options;
}

@Override
public void onCreateResources(
        OnCreateResourcesCallback pOnCreateResourcesCallback)
        throws Exception {
    // TODO Auto-generated method stub
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    // BitmapTextureAtlas must be power of 2 for width and height.
    playerTexture = new BuildableBitmapTextureAtlas(
            this.getTextureManager(), 256, 64);
    regionCell = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
            playerTexture, this.getAssets(), "player.png");
    playerTexture.load();

    pOnCreateResourcesCallback.onCreateResourcesFinished();
}

@SuppressWarnings("static-access")
@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
        throws Exception {
    // TODO Auto-generated method stub
    sensorManager = (SensorManager) getSystemService(this.SENSOR_SERVICE);
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            sensorManager.SENSOR_DELAY_GAME);

    this.mEngine.registerUpdateHandler(new FPSLogger());
    this.mEngine.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onUpdate(float pSecondsElapsed) {
            // TODO Auto-generated method stub
            updateSpritePosistion();
        }

        private void updateSpritePosistion() {
            // TODO Auto-generated method stub
            if (accellSpeedX != 0 || accellSpeedY != 0) {
                int tL = 0;
                int iL = 0;
                int rL = CAMERA_WIDTH - (int) sprCell.getWidth();
                int bL = CAMERA_HEIGHT - (int) sprCell.getHeight();

                if (sprX >= iL) {
                    sprX += accellSpeedX;
                } else {
                    sprX = iL;
                }
                if (sprX <= rL) {
                    sprX += accellSpeedX;
                } else {
                    sprX = rL;
                }
                if (sprY >= tL) {
                    sprY += accellSpeedY;
                } else {
                    sprY = tL;
                }
                if (sprY <= bL) {
                    sprY += accellSpeedY;
                } else {
                    sprY = bL;
                }
                if (sprX < iL) {
                    sprX = iL;
                } else if (sprX > rL) {
                    sprX = rL;
                }
                if (sprY < tL) {
                    sprY = tL;
                } else if (sprY > bL) {
                    sprY = bL;
                }

                sprCell.setPosition(sprX, sprY);

            }
        }
    });

    this.scene = new Scene();
    this.scene.setBackground(new Background(0, 122, 222));
    sprX = (CAMERA_WIDTH - this.regionCell.getWidth()) / 2;
    sprY = (CAMERA_HEIGHT - this.regionCell.getHeight()) / 2;
    sprCell = new Sprite(sprX, sprY, regionCell,
            getVertexBufferObjectManager());

    scene.attachChild(sprCell);
    pOnCreateSceneCallback.onCreateSceneFinished(this.scene);

}

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

}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    synchronized (this) {
        switch (event.sensor.getType()) {
        case Sensor.TYPE_ACCELEROMETER:
            accellSpeedX = (int) event.values[1];
            accellSpeedY = (int) event.values[0];
            break;
        }
    }
}
}

【问题讨论】:

  • 图片尺寸适合 Atlas 吗?
  • @jmroyalty 我会这么认为。图像是二的幂。如果这不是你的意思,你能解释一下吗?
  • 您是否进行了任何调试以确保变量(特别是您的精灵变量)与您认为的一样?
  • 那么“player.png”的尺寸是多少?它们是否小于 256x64
  • regionCell.load() 试试这个。它可能对你有帮助

标签: android andengine


【解决方案1】:

试试这个..我已经尝试过并解决了问题...只需在 mBitmapTextureAtlas 中设置和更改图像的大小,并在 onCreateResources 下的 mTextureRegion 中设置和更改图像的名称...

public class MainActivity extends BaseGameActivity implements
    SensorEventListener {

Scene scene;
private ITextureRegion mTextureRegion;
private BuildableBitmapTextureAtlas mBitmapTextureAtlas;

protected static final int CAMERA_WIDTH = 800;
protected static final int CAMERA_HEIGHT = 480;
private BuildableBitmapTextureAtlas playerTexture;
private Sprite sprCell;
private SensorManager sensorManager;

private float accellSpeedX, accellSpeedY;
private float sprX, sprY;

Rectangle rect;
@Override
public EngineOptions onCreateEngineOptions() 
{
    // TODO Auto-generated method stub
    Camera mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
    EngineOptions options = new EngineOptions(true,
            ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(
                    CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
    return options;
}

@Override
public void onCreateResources(
        OnCreateResourcesCallback pOnCreateResourcesCallback)
        throws Exception { 
    // TODO Auto-generated method stub
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    this.mBitmapTextureAtlas = new BuildableBitmapTextureAtlas(this.getTextureManager(), 100, 100);
    this.mTextureRegion = BitmapTextureAtlasTextureRegionFactory
            .createFromAsset(this.mBitmapTextureAtlas, this, "mo.png");

    try
    {
        this.mBitmapTextureAtlas
                .build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(
                        0, 0, 0));
        this.mBitmapTextureAtlas.load();
    } 
    catch (TextureAtlasBuilderException e) 
    {
        Debug.e(e);
    }

    pOnCreateResourcesCallback.onCreateResourcesFinished();
}

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

    this.scene = new Scene();
    this.scene.setBackground(new Background(0, 122, 222));

    sprX = (CAMERA_WIDTH - this.mTextureRegion.getWidth()) / 2;
    sprY = (CAMERA_HEIGHT - this.mTextureRegion.getHeight()) / 2;
    sprCell = new Sprite(sprX, sprY, mTextureRegion, getVertexBufferObjectManager());
    scene.attachChild(sprCell);

    sensorManager = (SensorManager) getSystemService(this.SENSOR_SERVICE);
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            sensorManager.SENSOR_DELAY_GAME);

    this.mEngine.registerUpdateHandler(new FPSLogger());
    this.mEngine.registerUpdateHandler(new IUpdateHandler() {

        @Override
        public void reset() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onUpdate(float pSecondsElapsed) {
            // TODO Auto-generated method stub
            updateSpritePosistion();
        }

        private void updateSpritePosistion() {
            // TODO Auto-generated method stub
            if (accellSpeedX != 0 || accellSpeedY != 0) {
                int tL = 0;
                int iL = 0;
                int rL = CAMERA_WIDTH - (int) sprCell.getWidth();
                int bL = CAMERA_HEIGHT - (int) sprCell.getHeight();

                if (sprX >= iL) {
                    sprX += accellSpeedX;
                } else {
                    sprX = iL;
                }
                if (sprX <= rL) {
                    sprX += accellSpeedX;
                } else {
                    sprX = rL;
                }
                if (sprY >= tL) {
                    sprY += accellSpeedY;
                } else {
                    sprY = tL;
                }
                if (sprY <= bL) {
                    sprY += accellSpeedY;
                } else {
                    sprY = bL;
                }
                if (sprX < iL) {
                    sprX = iL;
                } else if (sprX > rL) {
                    sprX = rL;
                }
                if (sprY < tL) {
                    sprY = tL;
                } else if (sprY > bL) {
                    sprY = bL;
                }

                sprCell.setPosition(sprX, sprY);

            }
        }
    });


    pOnCreateSceneCallback.onCreateSceneFinished(this.scene);

}

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

}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    synchronized (this) {
        switch (event.sensor.getType()) {
        case Sensor.TYPE_ACCELEROMETER:
            accellSpeedX = (int) event.values[1];
            accellSpeedY = (int) event.values[0];
            break;
        }
    }
}

}

【讨论】:

    【解决方案2】:

    您应该先加载您的纹理,然后再从它们创建纹理区域。

    【讨论】:

    • 如果您包含如何加载所述纹理的示例,这可能会更有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多