Project1

标题: 將腳本模組化後要如何帶入需要的資料對象? [打印本页]

作者: sai90306    时间: 2012-4-18 20:11
标题: 將腳本模組化後要如何帶入需要的資料對象?
本帖最后由 sai90306 于 2012-4-18 20:56 编辑

接續http://rpg.blue/thread-228664-1-1.html的問題 (前情提要,不是重點)因為在有裝載"角色跟隨腳本"的時候載入ZTBS戰鬥會出問題...所以想到一個解決的可能辦法
也就是進入ZTBS前關掉整個"角色跟隨腳本"...

於是產生藉由模組化"角色跟隨腳本"來實現的想法...利用module不會自動執行的特性
但相對的就要用另一個能自動執行的腳本依據情況來啟動 也就是開關
但是在啟動後這個module裡面要處理的目標或資料對象似乎不會自動從系統中抓取
要另外從自動執行的腳本帶入 猜測是因為模組中的變數和整個系統中沒有被模組化的腳本是獨立的
因此如果沒有重新指定對象 模組中的腳本會抓不到資料的?

於是自己另外寫了個開關來控制被我模組化的"角色跟隨腳本"(在整個腳本頭部加上module尾部加上end)
不過似乎在帶入的過程中 帶入了錯誤的對象...所以沒有效果

於是想想麻煩大大們方忙揪錯...把工程附上來... Project3.rar (190.34 KB, 下载次数: 19)
(角色根隨腳本部分沒有修改只有增加一些代碼 有用"#RTA修改部分"標記出來了)
寫的很爛或許會有很多錯誤 還請多多包函
感謝來關注和幫忙的大大們!

回覆明久君:上傳好了標題和問題名一樣叫"將腳本模組化後要如何帶入需要的資料對象"
http://rgss.9bu.org/30b7037105d1a707f2f9a2415c1558b6
dsu_plus_rewardpost_czw
作者: hys111111    时间: 2012-4-18 21:15
本帖最后由 hys111111 于 2012-4-18 21:26 编辑

报错连连……
首先,你在class打的是Rtaswutch,结果事件那里Rtaswitch.new由于找不到Rtaswitch这个class而报错……

修复了之后,角色跟隨SWITCH的
  1. rtaa_ctor = $data_actors[$partyid]
复制代码
又报错……
另外,我发现角色跟隨SWITCH的第2行有问题
if $Rtaswutch = 0应改为if $Rtaswutch == 0……

我当场吐血了……
整个脚本角色跟隨SWITCH,第二行到倒数第11行都是错的……
def放在了if里面……

终于不报错了……
Scripts.rxdata (122.48 KB, 下载次数: 5)
不过选任何选项都无反应……
作者: 吉井明久    时间: 2012-4-19 13:19
本帖最后由 吉井明久 于 2012-4-19 13:21 编辑

经验什么的都是身外之物所以是无所谓的。

是说拿module应该是无法实现随时加入随时拿掉的吧。

我拿一个简单的例子吧。
  1. class Sss
  2.   def initialize
  3.     @p = 0
  4.   end
  5.   def update
  6.     @p加=1
  7.     p @p
  8.   end
  9. end
复制代码
这假设是本来就有的类。
我们用这样的代码来调用他
  1. $sss=Sss.new
  2. $sss.update
  3. $sss.update
复制代码
现在我有一个插件代码可以让它变成每次加2
  1. class Sss
  2.   def update
  3.     @p加=2
  4.     p @p
  5.   end
  6. end
复制代码
可是现在遇到兼容性问题了,比如XXOO时加2太快了,用一个开关$doublespeed来控制是否使用那个插件吧。

于是把插件换成
  1. class Sss
  2.   alias oldupdate update
  3.   def update
  4.     if $doublespeed == true
  5.       @p加=1
  6.     end
  7.     oldupdate
  8.   end
  9. end
复制代码
现在来试试
  1. $doublespeed=false
  2. $sss=Sss.new
  3. $sss.update
  4. $doublespeed=true
  5. $sss.update
  6. $sss.update
  7. $doublespeed=false
  8. $sss.update
复制代码
是说加号请自行脑补…(不知道为什么打不出…
作者: sai90306    时间: 2012-4-19 13:38
本帖最后由 sai90306 于 2012-4-19 13:53 编辑

我將腳本1
  1. class Sss
  2.   def initialize
  3.     @p = 0
  4.   end
  5.   def update
  6.     @p+=1
  7.     p @p
  8.   end
  9. end
复制代码
和腳本2
  1. class Sss
  2.   alias oldupdate update
  3.   def update
  4.     if $doublespeed == true
  5.       @p+=1
  6.     end
  7.     oldupdate
  8.   end
  9. end
复制代码
分別作為兩個腳本插入了

然後事件調用
  1. $doublespeed=false
  2. $sss=Sss.new
  3. $sss.update                    ->彈出1
  4. $doublespeed=true
  5. $sss.update                    ->彈出3
  6. $sss.update                    ->彈出5
  7. $doublespeed=false
  8. $sss.update                    ->彈出6
复制代码
得到彈出1 3 5 6的結果

也就是...在$doublespeed=false的況下 第一個$sss.update 執行了一次腳本1的@p+=1 所以彈出1
然後在$doublespeed=true的況下 第二個$sss.update 執行了一次腳本1和腳本2的@p+=1 所以彈出1+1+1=3
第三個$sss.update 執行了一次腳本1和腳本2的@p+=1 所以彈出3+1+1=5
最後在$doublespeed=false的況下 第四個$sss.update 執行了一次腳本1的@p+=1 所以彈出5+1=6

是這樣子嗎?
作者: 吉井明久    时间: 2012-4-19 13:43
sai90306 发表于 2012-4-19 13:38
我將和分別作為兩個腳本插入了

然後事件調用得到彈出1 3 5 6的結果

对啊。你看不是起到了打开开关就加二的效果了么?

可以举一反三么应用到你那个脚本里面嘛。
作者: sai90306    时间: 2012-4-19 14:34
本帖最后由 sai90306 于 2012-4-19 14:38 编辑
吉井明久 发表于 2012-4-19 13:43
对啊。你看不是起到了打开开关就加二的效果了么?

可以举一反三么应用到你那个脚本里面嘛。  ...


我試著依照角色跟隨腳本的調用方式將腳本1改成這樣了...不知道對不對
RUBY 代码复制
  1. class Game_Party
  2. def initialize
  3. #
  4. end
  5. def update
  6. if $doublespeed == true
  7. include Train_Actor_Game_Party_Module
  8. end
  9. end
  10. end
  11.  
  12. class Game_Player
  13. def initialize
  14. #
  15. end
  16. def update
  17. if $doublespeed == true
  18. include Train_Actor_Game_Player_Module
  19. end
  20. end
  21. end
  22.  
  23. class Spriteset_Map
  24. def initialize
  25. #
  26. end
  27. def update
  28. if $doublespeed == true
  29. include Train_Actor_Spriteset_Map_Module
  30. end
  31. end
  32. end
  33.  
  34. class Scene_Map
  35. def initialize
  36. #
  37. end
  38. def update
  39. if $doublespeed == true
  40. include Train_Actor_Scene_Map_Module
  41. end
  42. end
  43. end


腳本2
RUBY 代码复制
  1. class Game_Party
  2. def initialize
  3. #
  4. end
  5. def update
  6. if $doublespeed == true
  7. include Train_Actor_Game_Party_Module
  8. end
  9. end
  10. end
  11.  
  12. class Game_Player
  13. def initialize
  14. #
  15. end
  16. def update
  17. if $doublespeed == true
  18. include Train_Actor_Game_Player_Module
  19. end
  20. end
  21. end
  22.  
  23. class Spriteset_Map
  24. def initialize
  25. #
  26. end
  27. def update
  28. if $doublespeed == true
  29. include Train_Actor_Spriteset_Map_Module
  30. end
  31. end
  32. end
  33.  
  34. class Scene_Map
  35. def initialize
  36. #
  37. end
  38. def update
  39. if $doublespeed == true
  40. include Train_Actor_Scene_Map_Module
  41. end
  42. end
  43. end


調用
RUBY 代码复制
  1. $doublespeed=true
  2. $sss1=Game_Party.new
  3. $sss1.update
  4. $sss2=Game_Player.new
  5. $sss2.update
  6. $sss3=Spriteset_Map.new
  7. $sss3.update
  8. $sss4=Scene_Map.new
  9. $sss4.update


不過在
def initialize
#
end
的地方不知道要填什麼?
因為我這樣寫雖然沒報錯
但調用後螢幕整個是黑的
想是因為initialize這裡沒東西的緣故吧?���




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1