后一修订版 | 前一修订版 |
攻略:dataarray [2024/01/31 14:11] – 创建 Ghastasaucey | 攻略:dataarray [2024/02/04 23:53] (当前版本) – [Iterate] Ghastasaucey |
---|
DataArray当前的对象数量。 | DataArray当前的对象数量。 |
| |
> 例如DataArray<Zombie>即为僵尸数 | > 例如DataArray<Zombie>的mSize属性即为僵尸数 |
| |
==== mNextKey ==== | ==== mNextKey ==== |
| |
==== Iterate ==== | ==== Iterate ==== |
尽管不是DataArray的操作,但是几乎所有的DataArray都有对应的迭代所有元素的方法。 | 尽管不是DataArray的操作,但是几乎所有的DataArray都有对应的迭代所有元素的方法(不会迭代到mNextKey位置为0,即已经释放掉的对象)。 |
| |
mMaxUsedCount在此使用,用于确定迭代的范围。顺序为从序号0遍历到序号最大,原版大部分遍历按照此顺序遍历,在无尽有关的交流中,由此产生的现象常被解释为“栈位”,但实际上DataArray的结构贴近数组而非栈,其符合栈后入先出特点的地方仅体现在后释放的对象位置先重复利用上。 | mMaxUsedCount在此使用,用于确定迭代的范围。顺序为从序号0遍历到序号最大,原版大部分遍历按照此顺序遍历,在无尽有关的交流中,由此产生的现象常被解释为“栈位”,这可能是由于其后释放的对象位置先重复利用,其符合栈后入先出的特点。不过DataArray本身结构更贴近数组而非栈。 |
| |
对于植物、僵尸、子弹、物品,也会排除掉已经死亡但是没有调用过Free方法的对象。 | 对于植物、僵尸、子弹、物品,也会排除掉已经死亡但是没有调用过Free方法的对象。 |
===== 使用情况 ===== | ===== 使用情况 ===== |
原版对于以下对象的管理均使用了DataArray: | 原版对于以下对象的管理均使用了DataArray: |
* 植物(Plant) | * 植物(Plant) |
* 僵尸(Zombie) | * 僵尸(Zombie) |
* 子弹(Projectile) | * 子弹(Projectile) |
* 物品(Coin) | * 物品(Coin) |
* * 与植物,僵尸等不同,除了游戏关卡界面外,商店界面也使用DataArray来管理物品 | ** 与植物,僵尸等不同,除了游戏关卡界面外,商店界面也使用DataArray来管理物品 |
* 小推车(LawnMower) | * 小推车(LawnMower) |
* 场地物品(GridItem) | * 场地物品(GridItem) |
* 粒子对象(TodParticleSystem) | * 粒子对象(TodParticleSystem) |
* 粒子发射器(TodParticleEmitter) | * 粒子发射器(TodParticleEmitter) |
* 粒子(TodParticle) | * 粒子(TodParticle) |
* 尾迹(Trail) | * 尾迹(Trail) |
* 动画(Reanimation) | * 动画(Reanimation) |
* 连接件(Attachment) | * 连接件(Attachment) |
| ===== 游戏漏洞 ===== |
==== 游戏漏洞 ==== | |
游戏内在保存DataArray时,只保存了mBlock,mSize,mMaxUsedCount,mFreeListHead。 | 游戏内在保存DataArray时,只保存了mBlock,mSize,mMaxUsedCount,mFreeListHead。 |
| |
这导致可以利用退出重进的方法刷新mNextKey,从而在游戏内建立错误的联系。可以用此方法实现缠绕海草抓取飞贼僵尸、舞王僵尸绑定非伴舞僵尸等效果。 | 这导致可以利用退出重进的方法刷新mNextKey,从而在游戏内建立错误的联系。可以用此方法实现缠绕海草抓取飞贼僵尸、舞王僵尸绑定非伴舞僵尸等效果。 |