0

我想在 PlayN 中使用透明颜色覆盖/清除图像的一部分。这有可能吗?(PlayN 1.3.1)

这是我做的示例代码:

  @Override
  public void init() {
    // create and add background image layer
    Image bgImage = assetManager().getImage("images/bg.png");
    ImageLayer bgLayer = graphics().createImageLayer(bgImage);
    graphics().rootLayer().add(bgLayer);
    SurfaceLayer surfaceLayer = graphics().createSurfaceLayer(640, 480);
    CanvasImage image = graphics().createImage(640, 480);
    surfaceLayer.surface().setFillColor(0xff000000);
    surfaceLayer.surface().fillRect(100, 100, 200, 200);
    surfaceLayer.surface().setFillColor(0x00000000);
    surfaceLayer.surface().fillRect(150, 150, 50, 50);
    graphics().rootLayer().add(surfaceLayer);
    image.canvas().setFillColor(0xff000000);
    image.canvas().fillCircle(300, 300, 100);
    image.canvas().setFillColor(0x00000000);
    image.canvas().fillCircle(300, 300, 50);
    graphics().rootLayer().add(graphics().createImageLayer(image));
  }

所以我试过了SurfaceLayer,而且ImageLayer他们都没有帮助(我想这种方式不可能覆盖部分)。我想要两个相交的矩形和圆形,但我只看到一个。

4

1 回答 1

2

用透明颜色绘制或填充只会导致不绘制任何内容。在 PlayN 中清除像素数据的唯一操作是 Canvas.clear(),它会清除整个图像。您还可以利用 GWT 对画布像素操作的访问并手动设置这些像素>> https://stackoverflow.com/a/10492578/1117740

为了一个简单的解决方案...

...要清除矩形,您只需复制图像,然后清除图像并绘制您希望保留的部分。

显然你不能用一个圆那么容易地做到这一点,尽管你可以使用 Bresenham 的圆绘制算法并复制回你希望保留的每条扫描线的段。

于 2012-09-01T11:24:30.670 回答