理解pygame里的Surface对象

最近在做嵌入式开发,发现有一个平时一点都不起眼甚至和嵌入式八杆子打不着的库简直是神器。它就是pygame,一个上世纪的python游戏框架。

刚开始接触pygame,很多人会对Surface这个对象很迷惑。
窗口是Surface对象,加载的图片、背景也是Surface对象,精灵还是Surface对象……
Surface,how old are you?

其实,Suface也没那么可怕,大家可以简单理解成一个会刷新的画布。还可以理解成一个状态机,它的当前状态就表现为显示在屏幕上的内容。

当调用pygame.display.set_mode(),也就是初始化一个窗口时,反回的就是一个Surface对象,这个对象就是一个要显示在屏幕上的内容(窗口);以后,无论你想在窗口里面显示什么内容(也是Surface对象),你都得直接或者间接地把内容绑定在窗口上面。

比如,你要显示一张图片,那么当你调用pygame.image.load()的时候,他返回的是你打开的图片,同样是一个Surface对象。好了,那么你怎么显示这张图片呢?很简单,绑定在窗口上面。只需要 窗口.blit(图片,坐标) 就可以了。

之所以说它是一个画布或者状态机,是因为你可以用一个大循环无限地在主窗口上绑定(添加)内容,甚至再绑定一个主窗口本身(为什么?因为只要是Surface对象就可以绑定在上面)。很多做游戏的人(尤其做过cocos2d什么的)都对这种模式有强迫症——在主窗口上不停、无限制绑定这么多的元素,他们不都压入栈了吗?岂不是内存迟早得溢出?太让人强迫症了!
其实,完全没必要这么担心。往主窗口添加内容,并不是压Surface对象入栈的过程,而更像是在一面画布上画画的过程。你可以想象,梵高在画油画,可是某个细节怎么话都画不好,他只好一遍又一遍地更新那个位置的细节,而油画的更新方式便是覆盖——你无论怎样更新覆盖那个位置,那层涂料也不会有多厚,画也还是一整幅画,就算在这幅画上面在画一幅一模一样的画,把原来的画彻彻底底覆盖掉,它也厚不到哪里去,这就是Surface的逻辑,Surface就是一张大大的画布,你想把东西显示在窗口上,就是要往窗口这张画布上画东西、覆盖东西(更新);

而且,还不用担心内存溢出~
————————————————
版权声明:本文为CSDN博主「蓝一潇、薛定谔的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42744102/article/details/90586006

版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=147
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
理解pygame里的Surface对象
最近在做嵌入式开发,发现有一个平时一点都不起眼甚至和嵌入式八杆子打不着的库简直是神器。它就是pygame,一个上世纪的python游戏框架。 刚开始接触pygam……
<<上一篇
下一篇>>