Почему ScaleModifier заставляет спрайт мерцать? - PullRequest
0 голосов
/ 08 марта 2012

Я играю в 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);

  }
};

мерцание исчезло, но это не похоже на хорошее решение.

1 Ответ

2 голосов
/ 08 марта 2012

ScaleModifier регулирует масштаб по указанному временному фактору - в вашем случае 0,1f

ScaleModifier(0.1f, 1.0f, scaleFactor)

Что вам, вероятно, нужно, это масштабировать Sprite напрямую, используя

SplashScreen.setScale(scaleFactor);

сделай это до того, как прикрепить ребенка, и с тобой все будет в порядке.

...