我写了一个我希望能做到的简单例子。相关代码粘贴在下面,完整的源代码在这里。
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 值使每个圆形图像独立透明。这是否意味着我必须将每个图像添加到自己的图层并在该图层上设置透明度?