1

我写了一个我希望能做到的简单例子。相关代码粘贴在下面,完整的源代码在这里

asCanvasImage首先,我的游戏类使用我的类上的方法绘制三个圆圈作为画布图像的方法Circle

public void drawThreeTransparentCircles() {
    // create an immediate layer and add to root layer
    ImmediateLayer circleLayer = graphics().createImmediateLayer(
            new ImmediateLayer.Renderer() {
                public void render(Surface surf) {
                    Circle redCircle = new Circle(-25, 0, 50, Color.rgb(
                            255, 0, 0), 0.5f);
                    Circle whiteCircle = new Circle(0, 0, 50, Color.rgb(
                            255, 255, 255), 0.5f);
                    Circle blueCircle = new Circle(25, 0, 50, Color.rgb(0,
                            0, 255), 0.5f);
                    surf.drawImage(redCircle.asCanvasImage(),
                            redCircle.getScreenX(), redCircle.getScreenY());
                    surf.drawImage(whiteCircle.asCanvasImage(),
                            whiteCircle.getScreenX(),
                            whiteCircle.getScreenY());
                    surf.drawImage(blueCircle.asCanvasImage(),
                            blueCircle.getScreenX(),
                            blueCircle.getScreenY());
                }
            });

    rootLayer.add(circleLayer);
}

然后asCanvasImage是我Circle班级的方法:

public CanvasImage asCanvasImage() {
    int diameter = radius * 2;
    CanvasImage circleImage = graphics().createImage(diameter, diameter);
    Canvas canvas = circleImage.canvas();
    canvas.setFillColor(color);
    canvas.fillCircle((float) radius, (float) radius, (float) radius);
    canvas.setAlpha(alpha);
    return circleImage;
}

每个圆的 alpha 值设置为 0.5。但这是我运行 Java 版本时的结果:

在此处输入图像描述

编辑:我发现如果我更改 rootLayer 上的 alpha 值,它会使图像透明:

rootLayer.setAlpha(0.5f);

但是,我希望使用不同的 alpha 值使每个圆形图像独立透明。这是否意味着我必须将每个图像添加到自己的图层并在该图层上设置透明度?

4

1 回答 1

2

我能够使用图像层创建独立的透明圆圈。这是实现这一目标的最佳方法吗?

我在我的类中添加了一个asImageLayer方法,该方法Circle使用上述方法创建一个圆形图像asCanvasImage,然后从中创建一个图像层并成功应用 alpha 值:

public ImageLayer asImageLayer() {
    CanvasImage image = asCanvasImage();
    ImageLayer imageLayer = graphics().createImageLayer(image);
    imageLayer.setAlpha(alpha);
    imageLayer.transform().translate(getScreenX(), getScreenY());
    return imageLayer;
}

我调用的游戏类方法asImageLayer又被该paint方法调用:

public void drawTransparentImageLayers() {
    GroupLayer groupLayer = graphics().createGroupLayer();
    groupLayer.add(bgLayer);
    groupLayer.add(redCircle.asImageLayer());
    groupLayer.add(whiteCircle.asImageLayer());
    groupLayer.add(blueCircle.asImageLayer());
    rootLayer.add(groupLayer);
}

结果(圆圈随机轻微移动,留下痕迹):

在此处输入图像描述

它有效,但随着时间的推移,运动似乎会减慢。性能问题?

于 2012-03-31T17:39:27.537 回答