Project1

标题: 我已丧心病狂! [打印本页]

作者: 余烬之中    时间: 2014-3-9 11:31
标题: 我已丧心病狂!
本帖最后由 余烬之中 于 2014-3-9 15:23 编辑

写脚本的时候常常需要动态移动窗口,每次都要重来很烦的有木有!

于是提高可重用性………………这个不是重点!

这是做好后用来测试的东西 莫名其妙戳中了笑点


@晴兰 @taroxd @无脑之人

附  操作方法:
脚本
RUBY 代码复制
  1. module Smomo
  2. module Kit
  3.   @@register = {
  4.     dynamical_move: []
  5.   } # @@register
  6.   module_function
  7.   def register
  8.     @@register
  9.   end
  10. end # Smomo::Kit
  11. module_function
  12. def dynamical_move(aim, x = :x, y = :y)
  13.   reg = Smomo::Kit.register[:dynamical_move]
  14.   id = aim.object_id
  15.   return reg[id] if reg[id]
  16.   reg[id] = Object.new
  17.   # class << reg[id]
  18.   class << reg[id]
  19.     attr_accessor :moving,:ox,:oy,:ax,:ay,:x,:y,:aim_id,:duration,:rx,:ry
  20.     # moveto
  21.     def moveto(tx, ty, duration)
  22.       unless moving
  23.         a = ObjectSpace._id2ref(@aim_id)
  24.         @ox, @oy = a.send(@x), a.send(@y)
  25.         @ax, @ay = tx, ty
  26.         @rx, @ry = *[@ox, @oy].collect(&:to_f)
  27.         @duration = duration
  28.         @moving = true
  29.       end
  30.       _moveto
  31.     end
  32.     # _moveto
  33.     def _moveto
  34.       a = ObjectSpace._id2ref(@aim_id)
  35.       @rx += (@ax - @ox).to_f / @duration
  36.       @ry += (@ay - @oy).to_f / @duration
  37.       a.instance_eval %!
  38.         self.#{@x} = #{@rx}
  39.         self.#{@y} = #{@ry}
  40.       !
  41.       stop if (@rx - @ax).to_i == 0 && (@ry - @ay).to_i == 0
  42.     end
  43.     # stop
  44.     define_method(:stop){@moving = false}
  45.     # apos
  46.     define_method(:apos){[@ax, @ay]}
  47.     # opos
  48.     define_method(:opos){[@ox, @oy]}
  49.   end # class << reg[id]
  50.   reg[id].moving, reg[id].x, reg[id].y, reg[id].aim_id = false, x, y, id
  51.   reg[id]
  52. end # dynamical_move
  53. end # Smomo


测试脚本
RUBY 代码复制
  1. def test
  2.   $adasdasdaf ||= []
  3.   ssssssss = $adasdasdaf.size
  4.   $adasdasdaf[ssssssss] = Window_Base.new(424 * rand, 206 * rand, 120, 210)
  5.   class << $adasdasdaf[ssssssss]
  6.     alias :old_update :update
  7.     def update
  8.       Smomo.dynamical_move(self).moveto(424 * rand, 206 * rand, 60 * rand)
  9.       old_update
  10.     end
  11.   end
  12.   $adasdasdaf[ssssssss + 1] = Window_Base.new(394 * rand, 356 * rand, 150, 60)
  13.   class << $adasdasdaf[ssssssss + 1]
  14.     alias :old_update :update
  15.     def update
  16.       Smomo.dynamical_move(self).moveto(394 * rand, 356 * rand, 30 * rand)
  17.       old_update
  18.     end
  19.   end
  20.   $game_variables[1] += 1
  21. end
  22.  
  23. class Scene_Map
  24.   alias :woyisangxinbingkuang :update
  25.   def update
  26.     woyisangxinbingkuang
  27.     $adasdasdaf.each_with_index{|w, i|
  28.       w.disposed? ? [$adasdasdaf[i] = nil, $adasdasdaf.compact!] : w.update
  29.     } if $adasdasdaf
  30.   end
  31. end


然后在地图上新建事件 事件内容为执行脚本
【test】
然后进入游戏按空格疯狂地触发事件~~












当然 既然disable了…………




作者: 失落迷白    时间: 2014-3-9 11:38
程序猿经常把自己弄得面目狰狞,然后又经常被自己做得逗笑
作者: 紫英晓狼1130    时间: 2014-3-9 12:49
所以直接加大窗口,移动图片
作者: 弗雷德    时间: 2014-3-9 12:52
还是会美工好,可以通过图片用一些傻B的方式来弥补俺脚本上的不足
作者: 无脑之人    时间: 2014-3-9 13:20
【程序猿的冷笑话系列么……
不开GC就会爆内存,不做死就不会死你怎么就是不明白www
作者: 美丽晨露    时间: 2014-3-9 13:38
我很好奇那个击破数是用来作什么用的
作者: 正太君    时间: 2014-3-9 13:46
$adasdasdaf 这个命名很棒




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