设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2379|回复: 5
打印 上一主题 下一主题

[讨论] 和我一起读脚本--Sprite_Battler和Game_Battler剪不断理还乱。

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14146
在线时间
2144 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2022-2-26 22:01:15 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 miantouchi 于 2022-2-26 22:04 编辑

虽然XP我已经前前后后用了3年多,但是还是有许多地方是死记硬背,有很多基础的概念还是混淆的。
比如Sprite_Battler和Game_Battler的关系。用着用着自己就迷茫了。带着这个疑问,
我来根据自己理解去尝试的分析下。


一。首先先来梳理下基础关系。
Sprite_Battler 表示战斗者精灵(用来显示精灵用的)、Game_Battler表示战斗者(战斗者的一些数值)
Game_Battler 还有两个子类Game_Actor和Game_Enemy。
Sprite_Battler 的父类是RPG::Sprite

二。说到Sprite_Battler ,我们得看他究竟用在什么地方?
通过全局搜索Sprite_Battler

我们发现Sprite_Battler的实例都是在Spriteset_Battle里面使用的。
Spriteset_Battle则是在战斗场景中使用的。

三。接下来我们看看Spriteset_Battle是如何使用Sprite_Battler 的?



大家可以看到
敌人的活动类传入的是battler是队伍中每一个敌人enemy,
而角色的活动类只传入的是@viewport2,后面的battler没有传入,
Sprite_Battler 初始化里面如果没有传入则battler默认是nil

四。那角色的battler是什么时候传入的呢?
请看下图


第一个红框,也就是在Spriteset_Battle的update里面 把队伍成员赋值给 actor_sprites这个数组里面
第二个红框,就是启用了Sprite_Battler类当中的update刷新功能。
这样就达成了通过Spriteset_Battle类当中实例化所需要的敌人和角色的Sprite_Battler类,
实例和刷新Sprite_Battler的同时注入了队伍当中Game_Battler 角色数据。
结合这个结论大家仔细看看Sprite_Battler类是不是使用了@battler.xxxx,
达到用判断@battler.xxxx战斗者数值去设置self.xxx显示精灵类的效果。
也就是感觉到精灵类包含了战斗者,多了个插件的感觉。


所以可以使用
@spriteset.actor_sprites             #队伍的角色精灵
@spriteset.actor_sprites.battler  #队伍的战斗者

根据菜刀大大的提示 如果队伍不足4人会,会对应的传入nil,容易引起bug。
另外这些也不是本人想出来的,有之前KB大大的解读。

欢迎大家参与讨论,下次准备讨论Game_Actors和Game_Party


点评

哈哈,我正在研究猫大下面发的脚本解读。  发表于 2022-2-28 21:38

评分

参与人数 2+2 收起 理由
flashfox + 1 同约
taeckle + 1 大神下次什么时候读脚本,我们要预约!.

查看全部评分

Lv4.逐梦者

梦石
0
星屑
14146
在线时间
2144 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

2
 楼主| 发表于 2022-3-1 20:14:14 | 显示全部楼层
SailCat 发表于 2022-2-27 08:24
首先更正一下,这样做可不行,因为@actor_sprite没有暴露给外面,要么用反射去取,要么自己定义actor_spr ...

感谢猫大细心讨论。
1.要么用反射去取,能具体介绍下,这个是什么方法吗?
2.猫大没说之前真没发现敌人上限是8个,我通过数据库队伍测试了下,但是代码里面并没有相关的设定。
3.dump、uniq!、reject!等等,如concat连接数组的用法,都没有用过,我的基础还不太行。不过看了这个代码,感觉还是应该把SEP插件下载下来,读一读,总的来说还得继续读读猫大代码,然后看看自己能理解多少,问问题感觉都问不过来。。。
4.猫大思路的扩展来说,让我突然又发现了XP代码的无限可能,估计这也是猫大热衷于探索XP这个老家伙的动力吧。

点评

反射是@spriteset.instance_variable_get(:@actor_sprites)  发表于 2022-3-1 20:17
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 18:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表