为什么ScaleModifier会使sprite闪烁?

时间:2012-03-07 20:36:38

标签: android andengine

我正在和AndEngine一起玩,并在制作闪屏时学习这些没有记录。我知道有一个SplashScene课程,但正如我所知,我正在尝试各种方式。

然而,我似乎无法正确对待这一点。屏幕为240x320(宽x高),闪屏纹理为480x640,因此我将其缩小以适应屏幕。纹理加载等工作正常,但是当显示精灵时,我首先看到0.1secs的大纹理,然后缩小。我想让它在显示前缩小。尝试了一切,将调用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 个答案:

答案 0 :(得分:2)

ScaleModifier调整超过指定时间因素的比例 - 在您的情况下为0.1f

ScaleModifier(0.1f, 1.0f, scaleFactor)

您可能想要的是使用

直接缩放Sprite
SplashScreen.setScale(scaleFactor);

在安抚孩子之前这样做,你应该没事。