SurfaceView キャンバスにビットマップ (ボール) を描画し、新しいビットマップ (シャイン) を描画してボール ビットマップの上に表示させた直後に、シャイン ビットマップ アルファを上下に調整してアニメートします。輝き/輝きとして。しかし、シャイン ビットマップは、描画時に奇妙なピクセル エラーが発生するようで、アルファを多く与えるほど悪化します。
ここで結果を見てください:これらの青/赤のピクセルは、私が使用するpngには存在しません。
ボールオブジェクトの初期化は次のとおりです。
sparklePaint = new Paint();
sparklePaint.setAlpha(0);
そして、ボールオブジェクトのアニメーションメソッド:
public void doAnimate() {
if (sparkleAnimating) {
if (sparklePaint.getAlpha() == 255) {
sparkleOpcatyUp = false;
}
if (sparkleOpcatyUp) {
int opacity = sparklePaint.getAlpha() + sparkleOpacityStep;
if (opacity > 255) {
opacity = 255;
}
sparklePaint.setAlpha(opacity);
} else {
int opacity = sparklePaint.getAlpha() - sparkleOpacityStep;
if (opacity < 0) {
opacity = 0;
}
sparklePaint.setAlpha(opacity);
if (opacity == 0) {
sparkleOpcatyUp = true;
sparkleAnimating = false;
}
}
} else {
sparkleAnimTick++;
if (sparkleAnimTick == sparkleAnimDelay) {
sparkleAnimTick = 0;
sparkleAnimating = true;
}
}
}
そして私の描画ループで:
for (Ball ball : balls) {
if (ball != null && ball.getBitmap() != null) {
int[] pos = ball.getPos();
canvas.drawBitmap(ball.getBitmap(), pos[0], pos[1], null);
pos = ball.getSparklePos();
canvas.drawBitmap(ball.getSparkle(), pos[0], pos[1], ball.getSparklePaint());
ball.doAnimate();
}
}
ここで何がうまくいかないかについてのアイデアはありますか? それは別のビットマップの上にビットマップを描画する方法ではありませんか? 設定する必要があるのはブレンドモードですか?
問題は、エミュレーターとデバイスの両方に存在します。
ありがとうござい
ます