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