Я играю в AndEngine и изучаю это недокументированное, создавая заставку. Я знаю, что есть класс SplashScene, но когда я учусь, я пытаюсь разными способами.
Однако я не могу понять это правильно. Размер экрана составляет 240x320 (Ш x В), а текстура заставки - 480x640, поэтому я уменьшаю его до размеров экрана. Загрузка текстур и т. Д. Работает нормально, но когда отображается спрайт, я сначала вижу большую текстуру на 0,1 сек, затем она уменьшается. Я хочу, чтобы это было уменьшено до показа. Пробовал все, переместил вызов метода attachChild () в onLoadComplete (), используя setVisible (false) и т. Д., Но я вижу, что текстура уменьшается каждый раз.
Почему?
Вот мой код:
@Override
public Scene onLoadScene() {
this.scene = new Scene();
// Texture sizes
final int sX = mSplashTextureRegion.getWidth();
final int sY = mSplashTextureRegion.getHeight();
// Center on camera
final int cX = (CAMERA_WIDTH - sX) / 2;
final int cY = (CAMERA_HEIGHT - sY) / 2;
// Scale factor according to camera
final float scaleFactor = Math.min((float) CAMERA_WIDTH / sX, (float) CAMERA_HEIGHT / sY);
// Init sprite
splashScreen = new Sprite(cX, cY, mSplashTextureRegion);
splashScreen.setVisible(false);
// Rescale the splash-screen to fit the display, move it to (0, 0) and show it.
splashScreen.registerEntityModifier(new ScaleModifier(0.1f, 1.0f, scaleFactor));
//splashScreen.registerEntityModifier(new ScaleAtModifier(0.001f, 1.0f, scaleFactor, 0, 0));
// splashScreen.registerEntityModifier(new SequenceEntityModifier(
// new ScaleModifier(0.1f, 1.0f, scaleFactor),
// new DelayModifier(0.2f)
// ));
return scene;
}
@Override
public void onLoadComplete() {
scene.attachChild(splashScreen);
splashScreen.setVisible(true);
}
Если я переписываю onLoadComplete()
в это:
@Override
public void onLoadComplete() {
scene.attachChild(splashScreen);
mHandler.postDelayed(korv, 1000);
}
private Runnable korv = new Runnable() {
@Override
public void run() {
splashScreen.setVisible(true);
}
};
мерцание исчезло, но это не похоже на хорошее решение.