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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 真紅樂章
打印 上一主题 下一主题

[已经解决] 脚本新手试写失败 想再请教错在哪里 关於增设选单

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
316 小时
注册时间
2018-3-4
帖子
57
11
 楼主| 发表于 2018-3-31 23:37:27 | 只看该作者
本帖最后由 真紅樂章 于 2018-3-31 23:38 编辑
RaidenInfinity 点评于 2018-3-25 21:20
建议来QQ群,即时聊天会比发帖回复还好很多。(按交流讨论分类可以看到帖子)

然而小紅并没有QQ

来继续蚊香眼的说

-----------------------------------

上回解读到Game_Party里的menu_actor的说
  1.   def menu_actor
  2.     $game_actors[@menu_actor_id] || members[0]
  3.   end
复制代码

然後在$game_actors[@menu_actor_id]里的$game_actors是被等於Game_Actors的
於是又要来去看Game_Actors了

  1. class Game_Actors
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     @data = []
  7.   end
  8.   #--------------------------------------------------------------------------
  9.   # ● 获取角色
  10.   #--------------------------------------------------------------------------
  11.   def [](actor_id)
  12.     return nil unless $data_actors[actor_id]
  13.     @data[actor_id] ||= Game_Actor.new(actor_id)
  14.   end
  15. end
复制代码

非常简洁的一个class
就只有一个def的说……

那麽再来逐行解读了
首先是def initialize
def ← 有这个的意思应该是在定义一个名叫initialize的东西
不过全局查找能找出来的全部是名种定义这个initialize而完全没有在哪里使用过
於是找教程去然後……看不懂(蚊香眼……)
直到网上找找看才找到完来initialize是会在.new的时候自动用上的……
难怪会叫做「初始化」呢

於是继续第二行@data = []
一个@东西被等於了[]
小紅记得[]是空的数组来着

然後第三行就end了

接下来是def [](actor_id)
定义一个叫做「[]」的方法然後用actor_id作为参数……吗?
所以上面那个@data = []的时候的[]是空的数组还是方法名称……?
◢▆▅▄▃ 崩╰(〒皿〒)╯溃 ▃▄▅▆◣


……
………

看不懂只好跳过……
话说各种跳过都跳成这样了让小紅其实很怀疑这个解读还有没有意义……(蚊香眼 x2)

总之跳过def [](actor_id)之後继续下一行
return nil unless $data_actors[actor_id]
返回 空值 除非 $data_actors[actor_id]
所以$data_actors[actor_id]如果是nil或者false都会返回nil

那麽$data_actors[actor_id]又是甚麽
$data_actors在module DataManager
  1.     $data_actors        = load_data("Data/Actors.rvdata2")
复制代码

就是说读取「Data/Actors.rvdata2」这个文件
然後回去找教程……
这次有找到喔
原来$data_actors就是储存角色资料的数组
然後[actor_id]……教程里面写着[]里面是一个数字就是代表角色ID
不过这里[]里面是英文actor_id……
所以这个是啥来着?
变量吗?
但是又没看到这个class里有actor_id =的句子喔……
反倒是各种actor_id充斥整个class……
果然写给电脑看的东西就不是人脑能够理解的吗?
跳过……(蚊香眼 x3)

下一行……等等这不就最後一行了
结果小紅不就整个class都跳过了吗……

算了继续最後一行
@data[actor_id] ||= Game_Actor.new(actor_id)
很好
立即来个小紅看不懂的符号||=……
不过小紅记得有个类似的东西是+=
当成相同的东西好了
於是@data[actor_id] ||= Game_Actor.new(actor_id)其实就是@data[actor_id] = @data[actor_id] || Game_Actor.new(actor_id)
|| ← 如果前面有就前面
如果前面nil或者false就後面
前後都没有就false
所以说就是如果已经有@data[actor_id] 就继续沿用
没有就Game_Actor.new(actor_id)作为新的@data[actor_id]

然後先看@data[actor_id]
[actor_id]又是你!
上面说过看不懂所以……
跳……(蚊香眼 x4)

然後到Game_Actor.new(actor_id)
看到.new就知道要转去另一个class了
结果上面整个class Game_Actors真的被跳光光了呢……
再◢▆▅▄▃ 崩╰(〒皿〒)╯溃 ▃▄▅▆◣


……
………

於是跳到class Game_Actor了
记得刚才找initialize的时候看到教程说.new後面跟着()就是递入参数
果然class Game_Actor的initialize里有个(actor_id)来接受参数
所以actor_id到底是甚麽
这个疑似是变量但是到处都没有定义过的东西到底是从哪里来的……

-----------------------------------

竟然解读头痛……
只好先休息
有缘再续……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
316 小时
注册时间
2018-3-4
帖子
57
12
 楼主| 发表于 2018-4-6 02:32:56 | 只看该作者
本帖最后由 真紅樂章 于 2018-4-6 02:40 编辑

没人来救只好继续自救的说

-----------------------------------

上回跳到class Game_Actor了
然後第一行
  1.   def initialize(actor_id)
复制代码

因为看不懂(actor_id)是啥所以跳过

第二行
  1.     super()
复制代码

super所以又要找父类了
Game_Actor < Game_Battler
跳到Game_Battler

第一行initialize初始化

第二丶三丶四丶五行
  1.     @battler_name = ""
  2.     @battler_hue = 0
  3.     @actions = []
  4.     @speed = 0
复制代码

分别设定了四个@变量做空白丶零丶空的数组丶零

第六行
  1.     @result = Game_ActionResult.new(self)
复制代码

设定了个@变量做……
虽然不知道(self)是甚麽不过跳去Game_ActionResult

第一行
  1.   def initialize(battler)
复制代码

(battler)是递入参数
而被递入的(self)上面已经说了看不懂所以跳……

第二行
  1.     @battler = battler
复制代码

设定@变量做battler
battler就是上面说了的被递入的不知道是甚麽的(self)
嗯……既然不知道只好跳……

第三行
  1.     clear
复制代码

然後clear的内容就在同一class的下面
  1.   def clear
  2.     clear_hit_flags
  3.     clear_damage_values
  4.     clear_status_effects
  5.   end
复制代码


又来第一行
  1.     clear_hit_flags
复制代码

内容也在同class下面
  1.   def clear_hit_flags
  2.     @used = false
  3.     @missed = false
  4.     @evaded = false
  5.     @critical = false
  6.     @success = false
  7.   end
复制代码

把五个@变量设为false了

然後clear的第二行
  1.     clear_damage_values
复制代码

内容同class下面
  1.   def clear_damage_values
  2.     @hp_damage = 0
  3.     @mp_damage = 0
  4.     @tp_damage = 0
  5.     @hp_drain = 0
  6.     @mp_drain = 0
复制代码

这次是把五个@变量设为零的说

然後clear的第三行
  1.     clear_status_effects
复制代码

内容同class
  1.   def clear_status_effects
  2.     @added_states = []
  3.     @removed_states = []
  4.     @added_buffs = []
  5.     @added_debuffs = []
  6.     @removed_buffs = []
  7.   end
复制代码

把五个@变量设为空的数组

於是clear完了也initialize完了
可以回去Game_Battler了
虽然还是不知道(self)是甚麽就是了……

然後继续Game_Battler的initialize的第七丶八行
  1.     @last_target_index = 0
  2.     @guarding = false
复制代码

又有两个@变量分别被设定为零和false

第九行
  1.     clear_sprite_effects
复制代码

内容同class
  1.   def clear_sprite_effects
  2.     @animation_id = 0
  3.     @animation_mirror = false
  4.     @sprite_effect_type = nil
  5.   end
复制代码

把三个@变量分别设零丶false丶空值

第十行
  1.     super
复制代码

又要来去找父类Game_BattlerBase的initialize了呢

  1.   def initialize
  2.     @hp = @mp = @tp = 0
  3.     @hidden = false
  4.     clear_param_plus
  5.     clear_states
  6.     clear_buffs
  7.   end
复制代码

  1.   def clear_param_plus
  2.     @param_plus = [0] * 8
  3.   end
复制代码

  1.   def clear_states
  2.     @states = []
  3.     @state_turns = {}
  4.     @state_steps = {}
  5.   end
复制代码

  1.   def clear_buffs
  2.     @buffs = Array.new(8) { 0 }
  3.     @buff_turns = {}
  4.   end
复制代码


前面还好
只是把@变量设为零丶false丶只有一个零的数组乘八(看不太懂?)丶空的数组丶空的哈希表
直到@buffs = Array.new(8) { 0 }……
於是要找Array了呢
在置顶教程里面有找到呢
是指创建一个[0,0,0,0,0,0,0,0]的数组的说

这样就顺利解读完Game_BattlerBase和Game_Battler的initialize了呢
所以回到Game_Actor的initialize去

第二行
  1.     setup(actor_id)
复制代码

又是万恶的(actor_id)……
反正setup在下面就对了

  1.   def setup(actor_id)
  2.     @actor_id = actor_id
  3.     @name = actor.name
  4.     @nickname = actor.nickname
  5.     init_graphics
  6.     @class_id = actor.class_id
  7.     @level = actor.initial_level
  8.     @exp = {}
  9.     @equips = []
  10.     init_exp
  11.     init_skills
  12.     init_equips(actor.equips)
  13.     clear_param_plus
  14.     recover_all
  15.   end
复制代码


第一行
  1.     @actor_id = actor_id
复制代码

始终不知道actor_id是啥呢……跳……

第二行
  1.     @name = actor.name
复制代码

actor内容同class
  1.   def actor
  2.     $data_actors[@actor_id]
  3.   end
复制代码

上一回有找到过$data_actors就是储存角色资料的数组嘛
只不过不知况[actor_id]是啥所以跳过了
这次则是[@actor_id]
而[@actor_id]在上行是等於[actor_id]的……
所以这个不断出现的[actor_id]到底是甚麽……
◢▆▅▄▃ 崩╰(〒皿〒)╯溃 ▃▄▅▆◣

不过看置顶教程如果小紅没有理解错误的话
.name应该就是指这个不知道从哪来的[actor_id]的角色的名字了吧

第三行
  1.     @nickname = actor.nickname
复制代码

不知道从哪来的[actor_id]的角色的称号

第四行
  1.     init_graphics
复制代码

内容同class
  1.   def init_graphics
  2.     @character_name = actor.character_name
  3.     @character_index = actor.character_index
  4.     @face_name = actor.face_name
  5.     @face_index = actor.face_index
  6.   end
复制代码

四个@变量分别设为不知道从哪来的[actor_id]的角色的那四个同名的@变量就是了

第五丶六行
  1.     @class_id = actor.class_id
  2.     @level = actor.initial_level
复制代码

继续@变量 = 不知道从哪来的[actor_id]的角色里的同名@变量

第七丶八行
  1.     @exp = {}
  2.     @equips = []
复制代码

两个@变量设为空的哈希表和空的数组

第九行
  1.     init_exp
复制代码

内容同class
  1.   def init_exp
  2.     @exp[@class_id] = current_level_exp
  3.   end
复制代码

置顶教程里的哈希表的键值配对呢
所以是@exp这个哈希表里面的@class_id这个键值被配对为current_level_exp的说

current_level_exp在同class下面
  1.   def current_level_exp
  2.     exp_for_level(@level)
  3.   end
复制代码


exp_for_level在同class的……这次是上面呢
  1.   def exp_for_level(level)
  2.     self.class.exp_for_level(level)
  3.   end
复制代码


……
………
…………

-----------------------------------

这个class跳很大
跳到蚊香眼……睡去……待续
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
316 小时
注册时间
2018-3-4
帖子
57
13
 楼主| 发表于 2018-4-8 05:20:36 | 只看该作者
本帖最后由 真紅樂章 于 2018-4-8 05:29 编辑

承上回

-----------------------------------

上回读到
  1.   def exp_for_level(level)
  2.     self.class.exp_for_level(level)
  3.   end
复制代码

self这个在置顶教程有说到
不过小紅有看没有懂就是了……

所以说这exp_for_level(level)的定义就是它自己的class的它自己吗……
总之先跳class好了
class的内容又在同class的下面呢

  1.   def class
  2.     $data_classes[@class_id]
  3.   end
复制代码

这次到$data_classes
  1.     $data_classes       = load_data("Data/Classes.rvdata2")
复制代码

读取一个文件
好吧小紅从classes看出来应该是职业的意思
然後[@class_id]在class Game_Actor最上面setup的时候被等於了actor.class_id
结果因为看不懂@actor_id是啥所以跳过了……所以再跳……

然後.exp_for_level(level)在小紅看来完全是逻辑回圈了……
总之不懂……跳……


回到def init_exp
因为剩下的[@class_id]是不懂的所以跳……

这麽一来init_exp的解读就像没读过一样被跳光光了
於是回到def setup(actor_id)

跳过init_exp来到第十行
  1.     init_skills
复制代码

内容同class
  1.   def init_skills
  2.     @skills = []
  3.     self.class.learnings.each do |learning|
  4.       learn_skill(learning.skill_id) if learning.level <= @level
  5.     end
  6.   end
复制代码


第一行
  1.     @skills = []
复制代码

一个@变量被等於一个空的数组

第二行
  1.     self.class.learnings.each do |learning|
复制代码

置顶教程有写说each do的前面会是一个数值范围来迭代後面被||包着的东西
所以先来看前面的self.class.learnings
虽然因为self.class在上面已经跳过了所以小紅知道这次一定又要跳
不过还是先试着找找看.learnings是甚麽好了

结果全局查找是只找到这个和另一个同样是self.class.learnings……
……
小紅能怎麽办
小紅也很绝望啊
……
跳……

看迭代内容
  1.       learn_skill(learning.skill_id) if learning.level <= @level
复制代码


嗯……因为if前if後都是要用上learning的
然後小紅压根解不出来learning是甚麽
所以跳……

init_skills的解读比init_exp更绝望的完全跳过了
於是又回到def setup(actor_id)

第十一行
  1.     init_equips(actor.equips)
复制代码

内容同class
  1.   def init_equips(equips)
  2.     @equips = Array.new(equip_slots.size) { Game_BaseItem.new }
  3.     equips.each_with_index do |item_id, i|
  4.       etype_id = index_to_etype_id(i)
  5.       slot_id = empty_slot(etype_id)
  6.       @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id
  7.     end
  8.     refresh
  9.   end
复制代码


第一行
  1.     @equips = Array.new(equip_slots.size) { Game_BaseItem.new }
复制代码

一个@变量被等於一个数组
数组长度是(equip_slots.size)然後内容是{ Game_BaseItem.new }

先看equip_slots.size
equip_slots内容同class
  1.   def equip_slots
  2.     return [0,0,2,3,4] if dual_wield?
  3.     return [0,1,2,3,4]
  4.   end
复制代码

dual_wield?的内容在class Game_Actor的父类的父类class Game_BattlerBase里
  1.   def dual_wield?
  2.     slot_type == 1
  3.   end
复制代码

slot_type的内容就在def dual_wield?上面
  1.   def slot_type
  2.     features_set(FEATURE_SLOT_TYPE).max || 0
  3.   end
复制代码

features_set的内容在同class的上面
  1.   def features_set(code)
  2.     features(code).inject([]) {|r, ft| r |= [ft.data_id] }
  3.   end
复制代码

.inject在置顶教程里有找到是集合迭代计算
所以前面的看不懂的features(code)应该是一个不知道从哪里来的数组
然後()里的[]是後面变量的初始值
所以初始值是一个空的数组吗
然後後面的因为是一个{}包起来的东西而不是教程里被||包起来的东西所以小紅无法解读
能怎麽办……也很绝望……跳……

於是一跳就跳回def init_equips(equips)的第一行的後半部份
{ Game_BaseItem.new }
好吧……小紅看不懂把整个class Game_BaseItem弄成数组的内容是怎麽弄的
所以很绝望……跳……
跳………
跳…………
跳不起来了……

-----------------------------------

其实小紅是觉得自己很努力想要学习
但是这个自学过程
自学教程给小紅的感觉就是绝大部份说着入门结果里面各种专业术语……
对於已经学懂了的人来说大概是显浅易明而对於未学懂的人来说……就是看不懂
至於那能看懂教程小部份小紅觉得自己是有个小成果的毕竟都写出一个不能动的新窗口出来了喔
只不过是在能动不能动之间的细节用了两个月时间还是弄不清而已

小紅是有试过想要参考其他分页脚本
结果网上压根找不到简单的分页脚本
能找到的全是各种自定义数值各种自定义功能各种各样看不懂东西全部写在一起的超级复杂大佬级多元化图鉴脚本的说

等到小紅找到这里来还以为终於找到一个可以求教的地方了呢
结果小紅在这一帖里都死皮赖脸地秀下限了喔
看不见援手……看不见援手……看不见援手……

这个从Scene_Item开始试着解读基本上连Scene_Item第一句的super还没解完小紅就已经解不下去了呢
跳过的地方已经多到小紅都不知道自己浪费半个月时间到底解出甚麽来
这样解下去大概也不会有甚麽义意了吧
其实小紅曾经以为总会有路过的大佬愿意提携一下的说
所以有大佬愿意来给小紅答案
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33238
在线时间
10501 小时
注册时间
2009-3-15
帖子
4757
14
发表于 2018-4-8 15:53:25 | 只看该作者
本帖最后由 soulsaga 于 2018-4-8 16:06 编辑

脚本白痴路过..既然是LZ自己写的选单脚本..建议上传工程比较好找到要改的脚本
话说..我这回复有可能会被版主删呢..
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-7 20:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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