Android 不显示精灵的引擎
我正在尝试做一个基本的游戏,但是精灵没有出现。我没有发现任何错误 我找不到问题所在,也找不到帮助我解决问题的人,因此非常感谢任何帮助Android 不显示精灵的引擎,android,andengine,Android,Andengine,我正在尝试做一个基本的游戏,但是精灵没有出现。我没有发现任何错误 我找不到问题所在,也找不到帮助我解决问题的人,因此非常感谢任何帮助 public class Game extends BaseGameActivity implements SensorEventListener { Scene scene; protected static final int CAMERA_WIDTH = 800; protected static final int CAMERA_HEIGHT = 480
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;
}
}
}
}
试试这个……我已经试过了,解决了这个问题。。。只需在onCreateResources下设置并更改mBitmapTextureAtlas中图像的大小和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;
}
}
}
}在从纹理创建纹理区域之前,应该先加载纹理。图像尺寸是否适合在地图集中?我认为是这样。图像是二的幂。如果这不是你的意思,你能再解释一下吗。你有没有做过任何调试,以确保变量,特别是你的精灵变量是你认为他们是什么?那么player.png的维度是什么?这可能会对你有所帮助。如果你举个例子说明如何加载这些纹理,可能会更有帮助。