pygame中blit()參數的使用及臟矩形動畫形成的說明
pygame blit()參數使用及臟矩形動畫形成
pygame中surface的blit()想必是游戲入門經常用到的方法,但是看了網上的內容,都沒什么具體描述的文章,所以斗膽來做個說明,有錯的地方敬請指出,畢竟我也才用pygame庫沒幾天。
假設B是一張圖,即在pygame的surface對象
(pygame可以畫很多張圖,但只有一張圖是屏幕畫布,畫在屏幕畫布中的東西才能顯示出來)
- B.blit()的功能是把一張圖A粘貼到另一張圖B上,這意味著B上的圖將被A上的圖覆蓋,且永久不能恢復。
- blit()的原型是blit(source, dest, area=None, special_flags = 0),返回值為rect對象,返回被改變的畫面區(qū)域。
參數有
source
:一個surface對象,可以理解為一張圖;dest
:一個可以標識坐標的東西,可以是一個(x,y)元組。也可以是一個(x,y,height,width)元組,也可以是一個Rect對象,Rect對象可以理解為有位置有大小的矩形。area
:一個Rect對象
其中,source就是你要復制粘貼到B上的A圖片。
pygame的坐標體系中以左上角為原點,向右向下兩個方向作x軸y軸,構成坐標(x,y),注意是被畫的B對象的左上角,如果這個對象是屏幕,那就是屏幕的左上角了。
要講dest,先說Rect對象,Rect對象是一個含有坐標信息和大小的矩形(都是相對畫布而言的,非屏幕),所以可以用來表征畫布上的一個區(qū)域
粘貼的矩形圖片的左上角位置就是pygame坐標軸的坐標點。再次提醒我說的坐標都是相對于畫布而言的,畫布可不一定使屏幕。
更詳細一點說,用(x,y)時粘貼到A的大小不受限制,如果還用width和height參數,或是使用Rect對象,都將使超出這個Rect大小的內容不能顯示
最后area,作用是剪切要粘貼的圖片A的一部分,由于Rect對象含有位置信息(x,y),大小信息width,height。
所以用了area參數,將會以要畫的A的左上角為坐標體系,把Rect對象表征的區(qū)域的圖畫扣出來,然后把這部分給B畫布。
感覺有點暈是吧,那么這樣理解吧畫布B.blit(畫面A,區(qū)域1,區(qū)域2),作用是用畫面A的區(qū)域2的畫面摳出來粘貼到畫布B的區(qū)域1上,如果區(qū)域1只給了(x,y)坐標,那區(qū)域1就是(x,y)向右向下,無限大的區(qū)域了
圖示:rect_green.blit(rect_red,rect_black,rect_blue)
假如有兩個表面:
紅色邊框的表面代表rect_red(要復制的畫面),rect_blue的坐標就是藍色框框左上角到紅色框框左上角的位置,大小就是藍色框框那么大
畫布rect_green,由于調用了rect_black參數,所以會截取畫面的一部分,即黑色框框作為畫布
然后把藍色畫面剪切
然后左黑色框框左上角和藍色框框對齊,粘貼上去
注意藍色圖那么大,粘貼到黑色框框就只有左上角粘貼上去了。
然后臟矩形動畫,無非就是在把藍色框框復制粘貼到黑色框框前先把黑色框框所在的綠色框框區(qū)域保存,再扣藍色框框到黑色框框,最后再把保存的綠色框框里面的黑色框框扣回去,還原畫面,然后就能保持背景不變,繼續(xù)循環(huán)扣其他區(qū)域了。
總結
希望這篇文章會對你學習臟矩形動畫和動畫繪圖有幫助。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在vscode中啟動conda虛擬環(huán)境的思路詳解
這篇文章主要介紹了在vscode中啟動conda虛擬環(huán)境的思路詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Python實現SSH遠程登陸,并執(zhí)行命令的方法(分享)
下面小編就為大家?guī)硪黄狿ython實現SSH遠程登陸,并執(zhí)行命令的方法(分享)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05Python第三方庫qrcode或MyQr生成博客地址二維碼
使用第三方庫qrcode或者MyQr給自己的博客網址快速生成二維碼,一鍵分享,文中含有詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10