0

我正在制作一个棋盘游戏,但我被困在一个已经让我消磨了 3-4 个小时的问题上。任何地方都没有文档,所以我只是在没有运气的情况下进行猜测。

考虑一下:

public void highlightBlockTest(BoardCoordinate bc) {
  Log.i("highlightBlock()", "entered.");

  Point p = new Point(bc.getPuzzlePiece().getDestination());
  Rect rect = getBoardCoordinateRectFromPoint(p);

  int x = rect.getX();
  int y = rect.getY();
  int w = rect.getWidth();
  int h = rect.getHeight();

  Entity e = new Entity(0, 0);
  Rectangle r;

  r = new Rectangle(x, y, w, 5);
  e.attachChild(r);
  r = new Rectangle(x, y, 5, h);
  e.attachChild(r);
  r = new Rectangle(x + w - 5, y, 5, h);
  e.attachChild(r);
  r = new Rectangle(x, y + h - 5, w, 5);
  e.attachChild(r);

  SequenceEntityModifier sem = new SequenceEntityModifier(
      new DelayModifier(1f),
      new AlphaModifier(1f, 0.0f, 1.0f, new IEntityModifierListener() {
        @Override
        public void onModifierStarted(IModifier<IEntity> arg0, IEntity arg1) {
          System.out.println("Alpha start!");
        }

        @Override
        public void onModifierFinished(IModifier<IEntity> arg0, IEntity arg1) {
          System.out.println("Alpha stop!");
        }
      })
  ); 

  e.registerEntityModifier(sem);
  this.mScene.attachChild(e);

  return;
}

此代码应该为特定块绘制一个“突出显示”矩形。矩形绘制正常,但 AlphaModifier 不会将其值应用于相关实体。DelayModifier 工作得很好。

我添加了 ModifierListener 只是为了查看它是否被调用,并且确实如此;我在 Logcat 中看到“Alpha 开始”和“Alpha 停止”。但是突出显示的矩形仍然存在,在板上清晰可见。

作为最后的手段,我还添加了一个 MoveModifier 以在 5 秒内将矩形向右移动 50 像素,并且矩形瞬间移出屏幕。

为什么这些修饰符没有按预期工作?

4

1 回答 1

0

您需要设置混合功能,调用.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);实体。

于 2012-04-04T11:09:44.967 回答