[英]Surface View not redrawing rect correctly
我試圖讓rect從左到右在屏幕上徘徊。 在MyPaddle類中,X坐標在每個循環中遞增。 在SurfaceView中,我試圖繪制矩形,因此它們似乎在屏幕上徘徊。 我的代碼:
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread(this);
sc = (StartingClass) context;
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
}
@Override
protected void onDraw(Canvas canvas) {
PongPaddle myPaddle = sc.getMyPaddle();
PongPaddle compPaddle = sc.getCompPaddle();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(0);
canvas.drawRect(Math.round(myPaddle.getCenterX()-sc.getPaddleWidth()/2), getHeight() -30, Math.round(myPaddle.getCenterX()+sc.getPaddleWidth()/2), getHeight(), paint);
canvas.drawRect(Math.round(compPaddle.getCenterX()-sc.getPaddleWidth()/2),0, Math.round(compPaddle.getCenterX()+sc.getPaddleWidth()/2), 30, paint);
// super.onDraw(canvas);
}
繪制了rect,但似乎沒有重置屏幕,但是將rect繪制在彼此的頂部。 結果是矩形向右生長,在覆蓋屏幕之后創建了一條線。 有任何想法嗎? 多謝您的努力!
我可以看到您的代碼有幾個問題:
Android不會為您清除屏幕。 您需要通過擦除屏幕來開始每個繪圖會話,否則您將看到以前渲染的內容。 這就是為什么屏幕上會出現一條線污跡的原因。 此外,輸出表面可能是雙緩沖或三緩沖的,因此在某些情況下,如果不進行擦除,則在動畫時它實際上會“閃爍”。
您沒有在Surface上繪圖。 SurfaceView有兩個部分,Surface和View。 通過覆蓋onDraw()
您就像在自定義視圖上一樣在View上繪圖,除了使用SurfaceView浪費了系統資源。 如果要在Surface上繪制,則需要從SurfaceHolder獲取畫布。 (如果在View上進行繪制,請繼續進行此操作,以便您可以利用硬件加速。)
另請參閱圖形體系結構文檔的“ 表面生命周期”部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.