Я написал простой пример, который, как я ожидал, сделает это. Соответствующий код вставлен ниже, полный исходный код доступен здесь.
Во-первых, метод моего игрового класса, который рисует три круга в виде изображений холста, используя метод 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;
}
Значение альфа установлено равным 0,5 для каждого круга. Но это результат, когда я запускаю версию Java:
Редактировать: я обнаружил, что если я изменю альфа-значение в корневом слое, это сделает изображения прозрачными:
rootLayer.setAlpha(0.5f);
Однако я хочу сделать каждое из изображений круга независимо прозрачным с разными значениями альфа. Означает ли это, что я должен добавлять каждое изображение в отдельный слой и устанавливать прозрачность для этого слоя?