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

Project1

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

[已经解决] 將腳本模組化後要如何帶入需要的資料對象?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
跳转到指定楼层
1
发表于 2012-4-18 20:11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

点评

可以把 Scripts.rxdata 上传到 http://rgss.9bu.org 么  发表于 2012-4-18 20:34

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

2
发表于 2012-4-18 21:15:26 | 只看该作者
本帖最后由 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)
不过选任何选项都无反应……

点评

不好意思><這SWITCH是參考我現有腳本的語法改的 大概是我誤解了  发表于 2012-4-18 23:37
反覆改了好多次大概是頭暈了@@  发表于 2012-4-18 21:19
發現我打錯了rtaa_ctor影該是rta_actor才對  发表于 2012-4-18 21:19
對 我的主要問題就是原$data_actors[$partyid]的地方要帶什麼才是正確的><  发表于 2012-4-18 21:18
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
112 小时
注册时间
2011-10-6
帖子
182
3
发表于 2012-4-19 13:19:15 | 只看该作者
本帖最后由 吉井明久 于 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
复制代码
是说加号请自行脑补…(不知道为什么打不出…
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
4
 楼主| 发表于 2012-4-19 13:38:24 | 只看该作者
本帖最后由 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 14:06
那个回复的话点我帖子下的回复我才能收到提醒噢<3  发表于 2012-4-19 13:44
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
112 小时
注册时间
2011-10-6
帖子
182
5
发表于 2012-4-19 13:43:54 | 只看该作者
sai90306 发表于 2012-4-19 13:38
我將和分別作為兩個腳本插入了

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

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

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

点评

請問這裡用update是不是再系統中有特殊意義?和一般隨便命名的那種不同?  发表于 2012-4-19 13:58
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
6
 楼主| 发表于 2012-4-19 14:34:13 | 只看该作者
本帖最后由 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這裡沒東西的緣故吧?���

点评

明久一樣+2k  发表于 2012-4-19 14:48
抱歉這個問題我另開一帖來問...以面又一帖多問了  发表于 2012-4-19 14:46
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 08:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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