1
我寫了一個簡單的例子,我期望能做到。相關代碼粘貼在下方,完整源代碼可用here。在PlayN中,如何創建透明的CanvasImage?
首先,我的遊戲類的,吸引我的Circle
類三圈與使用asCanvasImage
方法畫布圖像的方法:
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值使每個圓形圖像獨立透明。這是否意味着我必須將每個圖像添加到其自己的圖層並在該圖層上設置透明度?
我想出性能問題是由於rootLayer組積累圖層造成的。我通過清除它來解決它。或者,就我而言,限制它的大小。請參閱trimRootLayer方法[此處](http://code.google.com/p/klenwell/source/browse/trunk/projects/java/playndev/playndev/core/src/main/java/com/googlecode/klenwell/playndev /core/PlaynDev.java#100)。 – klenwell 2012-04-01 00:06:44