国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

pvzclass是如何實(shí)現(xiàn)的?pvzclass源代碼初步分析(7)PVZ類的其他成員類

2021-08-02 12:31 作者:__W1thoutD0ubt  | 我要投稿

在第5篇中,我們已經(jīng)具體分析了Plant類和Zombie類的代碼。

本篇將對PVZ類剩余的成員類進(jìn)行分析。

強(qiáng)烈建議在閱讀本篇前先閱讀第3~5篇的內(nèi)容

注:本文以2021.6.27更新的版本為準(zhǔn)。

成員類介紹

PVZ類的直屬成員類共有22個,每一個都與PVZ本體中的變量存在直接的對應(yīng)關(guān)系。

其中,Grave(墓碑)、Crater(毀滅菇生成的坑洞)、Brain(腦子)、Snail(花園的蝸牛)和Vase(罐子)都是Griditem的派生類。

CardSlot類具有自己的成員類SeedCard,以控制每個卡槽的屬性。

SaveData類具有自己的成員類GardenPlant,以控制花園植物的屬性。

在官方Readme文件中,PVZ類的直屬成員類分為三種:

  • Animation類。

  • 唯一指定的類。這些類通常起控制作用,需要用pPVZ->GetXXX的方式獲得。

  • 游戲內(nèi)的對象實(shí)體類。這些類需要手動獲取PVZ中的第n個對象。部分類可以用pPVZ->GetAllXXX的方式獲得全部可用的對象。

以下類屬于唯一指定的類:

  • Lawn

  • Icetrace

  • Wave

  • Mouse

  • MousePointer

  • Caption

  • Miscellaneous

  • SaveData

  • Music

以下類屬于游戲內(nèi)的對象實(shí)體類:

  • Zombie

  • Projectile

  • Plant

  • Coin

  • Lawnmover

  • Griditem及其派生類

  • CardSlot

當(dāng)然,Animation類實(shí)際上也可以算作對象實(shí)體類。

SeedCard類和GardenPlant類在代碼上和Wave類更加相似,也可以算作“唯一指定的類”(即使它們顯然不是唯一指定的)。

代碼分析

PVZ類的成員類都由三部分構(gòu)成:基址和構(gòu)造函數(shù)、對象屬性、方法。

在構(gòu)造函數(shù)上,CardSlot類和所有唯一指定的類都以"address"或"Baseaddress"為參數(shù)。這些類的構(gòu)造函數(shù)都是“地址+偏移”型的:

(以上為CardSlot類的構(gòu)造函數(shù))

Animation類,以及除CardSlot類外游戲內(nèi)的對象實(shí)體類則以"indexoraddress"或"idoraddress"為參數(shù)。

這些類的構(gòu)造函數(shù)在“地址+偏移”型的基礎(chǔ)上添加了將編號轉(zhuǎn)換為基址的代碼:

(以上為Projectile類的構(gòu)造函數(shù))

各種類在對象屬性上都一樣,除了少數(shù)屬性使用PROPERTY_BINDING宏及其變種定義外,幾乎所有屬性都用T_PROPERTY宏及其變種定義。

方法上,所有方法都是在PVZ.h中聲明,在其他源代碼文件中定義。這些文件集中于Classes文件夾。

雖然PVZ類的成員類方法繁多,但在原理上可以大致分為以下多種:

直接寫入
直接讀取
調(diào)用Windows API
調(diào)用PVZ內(nèi)部函數(shù)

值得一提的是,Animation類的UnLock()方法使用了狀態(tài)壓縮,其狀態(tài)的定義在PVZ.h開頭:

看上去很長的代碼,實(shí)際上并不復(fù)雜。找到了原理層面的東西后,就不難分析pvzclass的代碼了。

下一篇將分析Creaters,pvzclass生成對象的代碼。


參考資料與文獻(xiàn)

pvzclass的Readme文檔

Lazuplis-Mei(Github名)于2019年6月11日上傳

YouTheB(Github名)于2020年3月更新

pvzclass是如何實(shí)現(xiàn)的?pvzclass源代碼初步分析(7)PVZ類的其他成員類的評論 (共 條)

分享到微博請遵守國家法律
九寨沟县| 桓仁| 长寿区| 阿勒泰市| 石柱| 陇南市| 千阳县| 仲巴县| 当雄县| 高要市| 武宁县| 正蓝旗| 阳曲县| 读书| 彭州市| 枣庄市| 常山县| 白沙| 宣武区| 伊春市| 临潭县| 镇康县| 广德县| 巩留县| 马鞍山市| 泰和县| 平原县| 镇原县| 奉贤区| 长顺县| 固阳县| 建始县| 洛隆县| 宁晋县| 汉川市| 循化| 吉林市| 紫金县| 大荔县| 土默特右旗| 若羌县|