在自定義控件和利用surfaceview時候利用serfaceHolder鎖定畫布畫圖做游戲的時候,在繪制tank的圖片的時候需要根據tank的方向來繪制,因此就用到canvas的rotate(float degrees)方法,試過很多次都導致屏幕上繪制的圖片都亂七八糟,不是按照想象的來的。經過了很多次的嘗試終於掌握了個規律:
canvas在繪制的時候旋轉遵循:
1、canvas.draw(bitmap , left , top , paint)中left 、 top始終是按照畫布的坐標來的,不管如何旋轉。
2、當我們調用rotate(degrees)時,首先是將前面繪制的圖像顯示在屏幕上(此時屏幕顯示同canvas布局是一致的),然后旋轉畫布,按照canvas的坐標繪制后面的圖像。
3、當我們再次調用rotate(degress)的時候,就將旋轉一次后面繪制的圖像顯示在窗口,(注意,因為屏幕旋轉過一次,因此屏幕顯示的第一次旋轉后的圖片相對屏幕是旋轉的,然后再一次旋轉)。
4、依次循環,每一次旋轉畫布,系統就會將之前繪制的圖像繪制到屏幕,然后旋轉繼續后面的繪制。
node: 為了不致於屏幕的混亂,同opengl繪圖一樣,當我們在繪制自己旋轉后的圖像時候將canvas復原,即如果說你旋轉了15度,繪制完了你想繪制的圖片時就再次旋轉-15度。