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

Project1

 找回密码
 注册会员
搜索

【教程】【不定期更新】实用型XP脚本编写小技巧#13

查看数: 14721 | 评论数: 20 | 收藏 29
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-1-17 12:55

正文摘要:

本帖最后由 RyanBern 于 2017-1-5 20:45 编辑 这个帖子记录了我在编写RMXP脚本时候学会的若干技巧,在编写脚本的时候我会把一些有价值的想法记录在这个帖子中,此帖会不定期更新。 此帖涉及到的技巧多实用性,没 ...

回复

笹舟丶萚 发表于 2018-7-16 09:16:29
  1. class Window_Choice < Window_Selectable
  2.   def initialize
  3.     x = 2
  4.     super(0, 0, x, 248)
复制代码

那个,新人问一下,多个选项脚本里这么写为啥出错啊
RyanBern 发表于 2017-8-25 23:47:58
本帖最后由 RyanBern 于 2017-8-25 23:49 编辑
lcr 发表于 2017-8-25 15:06
关于技巧12:数据突破
是复制在什么地方  是复制在自己新建的地方吗? 不知道怎么用 我是小白 求大神详细 ...


第一步:复制第一段脚本到脚本编辑器的任何地方。
第二步:新建一个事件,在事件指令中选择【脚本】,然后里面命令写入
RUBY 代码复制
  1. set_item_max("CommonEvent", 1200)

即可修改公共事件的最大值为 1200。如果是别的数字请改动第二个参数。
第三步:启动游戏,并执行这个事件(执行的时候没有任何外在的效果,只要确认触发这个事件就行)
第四步:关闭游戏,关闭工程,重新载入工程即可看到效果。
lcr 发表于 2017-8-25 15:06:42

关于技巧12:数据突破
是复制在什么地方  是复制在自己新建的地方吗? 不知道怎么用 我是小白 求大神详细
云海尘清 发表于 2016-8-1 11:46:52
关于技巧8:椭圆形状的blt
我还在学习脚本,对此有一些困难
能否发一个范例供学习
谢谢
RyanBern 发表于 2016-7-16 13:22:17
jiushiainilip19 发表于 2016-7-15 14:07
技巧3 能够做到一个图片原地旋转的效果吗?

当然可以,需要你定义一个rotate_effect,这个旋转效果是指定一个速度然后永远旋转下去,如果想要改成旋转一个固定角度则和前面的move_effect类似。
RUBY 代码复制
  1. def rotate_effect(speed)
  2.   @rotate_speed = speed
  3.   if @rotate_speed == 0
  4.     @rotate_effect = false
  5.     return
  6.   end
  7.   @rotate_effect = true
  8. end
  9. def rotating?
  10.   return @rotate_effect
  11. end

然后你需要自己定义update
RUBY 代码复制
  1. def update
  2.   if self.rotating?
  3.     self.angle += @rotate_speed
  4.   end
  5. end

代码未测试,可能有BUG,遇到笔误等问题请自行修改。

点评

3Q 3Q!  发表于 2016-7-17 07:28
jiushiainilip19 发表于 2016-7-15 14:07:09
技巧3 能够做到一个图片原地旋转的效果吗?{:2_249:}
工藤~新一じ 发表于 2016-5-26 23:48:58
求不算挖坟。
技巧5的事件和脚本结合——给地图事件做个计时器解释效果是我想实现的
于是我重新开一个工程,把脚本放到Main之上
再这样做事件,发现没有效果啊

1.png (78.13 KB, 下载次数: 7)

1.png

2.png (82.42 KB, 下载次数: 12)

2.png

3.png (78.6 KB, 下载次数: 9)

3.png
taroxd 发表于 2015-9-15 16:09:10
本帖最后由 taroxd 于 2015-9-15 16:29 编辑

在较新版本的 Ruby 中:

RUBY 代码复制
  1. C = Class.new
  2.  
  3. class C < C.clone # 这里是打开 C 而不是覆盖常量 C,而 C.clone 不是原来 C 的父类 Object,因此会报错
  4. end
  5.  
  6. # superclass mismatch for class C (TypeError)


所以,要用这种方式的话,应该是这样的代码
RUBY 代码复制
  1. class C
  2.   def c
  3.     1
  4.   end
  5. end
  6.  
  7. class C < Object.send :remove_const, :C
  8.   def c
  9.     super + 1
  10.   end
  11. end


然而这种方式不仅会让继承链变得很难看,而且很容易导致问题。

RUBY 代码复制
  1. class Game_BattlerBase
  2.   # 默认脚本
  3. end
  4.  
  5. class Game_Battler < Game_BattlerBase
  6.   # 默认脚本
  7. end
  8.  
  9. # 若这一行是
  10. # class Game_BattlerBase < Object.send :remove_const, :Game_BattlerBase
  11. # 也一样会导致问题
  12. class Game_Battler < Object.send :remove_const, :Game_Battler
  13.   # A 的插件脚本
  14. end
  15.  
  16. class Game_Battler < Game_BattlerBase
  17.   # B 的插件脚本
  18. end
  19.  
  20. # superclass mismatch for class Game_Battler (TypeError)


很明显,这个脚本冲突就是 A 的锅

不想发生命名冲突的话,应该是这样的方式比较好

RUBY 代码复制
  1. class C
  2.   def c
  3.     1
  4.   end
  5. end
  6.  
  7. class C
  8.   original_c = instance_method :c
  9.   define_method :c do
  10.     original_c.bind(self).call + 1
  11.   end
  12. end


接着推销一下这个:http://taroxd.github.io/rgss/Tar ... AE%BE%E7%BD%AE.html

当然,还是更高版本 Ruby 中的 prepend 和 refine 最舒服。

RUBY 代码复制
  1. class C
  2.   def c
  3.     1
  4.   end
  5. end
  6.  
  7. module MyPatchToC
  8.   def c
  9.     super + 1
  10.   end
  11. end
  12.  
  13. C.prepend MyPatchToC


RUBY 代码复制
  1. # 在我自己的脚本里,我就直接把 id 猴补到 Fixnum 里面了。
  2. # 为了在某些场合既能传物品(装备、角色等等)id作为参数,也能传入物品的实例作为参数
  3. # 其实我挺希望能这样用 refine 的
  4. module MyPatchToFixnum
  5.   refine Fixnum do
  6.     alias_method :id, :to_int
  7.   end
  8. end
  9.  
  10. class AnotherClass
  11.   using MyPatchToFixnum
  12.  
  13.   def self.show(item_or_item_id)
  14.     puts item_or_item_id.id
  15.   end
  16. end
  17.  
  18. # assume that $data_items exists
  19. AnotherClass.show($data_items[1]) # 1
  20. AnotherClass.show(1)              # 1
  21.  
  22. 1.id # undefined method `id' for 1:Fixnum (NoMethodError)

以及,如果不是做 RM 插件的话,这种技术的实际应用真的很少……
喵呜喵5 发表于 2015-9-15 14:02:26
技巧11 另类alias 在RMVA的Ruby1.9中能用吗?

点评

不能 superclass mismatch  发表于 2015-9-15 16:08
没有进行测试,仅仅在1.8里面试过。  发表于 2015-9-15 14:11
gonglinyuan 发表于 2015-9-15 08:15:13
关于技巧10:记录事件位置

我先前没有忘了这个帖子里有这个内容,搜了半天也没有搜到,只好自己写了一个。现在回来看看这个部分,对比了以下各种实现细节,发现这样实现好像还是有点问题的,就是如果一个事件【固定朝向】了之后turn_left、turn_right等方法会失效,导致事件的朝向不能被记录下来。

点评

看看我的新帖吧http://rm.66rpg.com/thread-383466-1-1.html  发表于 2015-9-15 09:12
没想到也会出这这样的一个小BUG。  发表于 2015-9-15 08:30
我以前曾经发过一个比这里的这个简洁一些的脚本,当时那个脚本直接clone了$game_map对象,但是这个脚本我为了省一些资源所以就仅保存了位置  发表于 2015-9-15 08:28
这个问题当时确实没有考虑到,不过刚才稍微想了一下没想到什么比较好的解决办法。  发表于 2015-9-15 08:24
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-3-31 18:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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