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

Project1

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

仿魔兽的replay(录象?)

 关闭 [复制链接]

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

跳转到指定楼层
1
发表于 2006-12-7 05:52:22 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
前言:上次听叶子说的那个录象脚本,感觉很好玩。。今天就做了…… -v-

脚本:replay脚本

作用:可用于制作攻略什么的,在通关之后附带一个通关录象?? - -b

     至于其他的。。。呵呵

     理解清楚了的人就可以随便怎么做了~ 要什么效果就做什么效果~ 呵呵

说明:可参考范例工程进行菜单的制作,现在的脚本没设计制作菜单的,只提供了核心脚本,下载范例 在调式模式下选择 观看录象即可。。 选择新游戏 然后保存之后 再选择观看就可以看到自己刚才玩的了。。。 - -b


点击此处下载范例工程

  1. #==============================================================================
  2. # ■ Kernel
  3. #------------------------------------------------------------------------------
  4. #  Kernel模块。
  5. #==============================================================================

  6. module Kernel
  7.   
  8.   #--------------------------------------------------------------------------
  9.   # ● 别名
  10.   #--------------------------------------------------------------------------
  11.   if @rand_redef.nil?
  12.     alias rand_old rand
  13.     @rand_redef = true
  14.   end
  15.   
  16.   #--------------------------------------------------------------------------
  17.   # ● 重定义
  18.   #--------------------------------------------------------------------------
  19.   def rand(max)
  20.     if $record != nil and $record.mode == "播放"
  21.       return $record.pop
  22.     end
  23.     result = rand_old(max)
  24.     if $record != nil and $record.mode == "录制"
  25.       Input.deal_repeat_key
  26.       $record.push(result)
  27.     end
  28.     return result
  29.   end

  30. end

  31. #==============================================================================
  32. # ■ Input
  33. #------------------------------------------------------------------------------
  34. #  Input模块。
  35. #==============================================================================

  36. module Input
  37.   
  38.   #--------------------------------------------------------------------------
  39.   # ● 记录
  40.   #--------------------------------------------------------------------------
  41.   @press = method("press?") if @press.nil?
  42.   @trigger = method("trigger?") if @trigger.nil?
  43.   @repeat = method("repeat?") if @repeat.nil?
  44.   @dir4 = method("dir4") if @dir4.nil?
  45.   @dir8 = method("dir8") if @dir8.nil?
  46.   
  47.   #--------------------------------------------------------------------------
  48.   # ● 作用函数
  49.   #--------------------------------------------------------------------------
  50.   module_function
  51.   
  52.   #--------------------------------------------------------------------------
  53.   # ● 记数
  54.   #--------------------------------------------------------------------------
  55.   @counts = 0
  56.   
  57.   #--------------------------------------------------------------------------
  58.   # ● 处理重复键
  59.   #--------------------------------------------------------------------------
  60.   def deal_repeat_key
  61.     return if @counts == 0
  62.     $record.push(false,@counts)
  63.     @counts = 0
  64.   end
  65.   
  66.   #--------------------------------------------------------------------------
  67.   # ● 通常01
  68.   #--------------------------------------------------------------------------
  69.   def common01(kind,num)
  70.     if $record != nil and $record.mode == "播放"
  71.       return $record.pop
  72.     end
  73.     result = eval(kind).call(num)
  74.     if $record != nil and $record.mode == "录制"
  75.       if result
  76.         self.deal_repeat_key
  77.         $record.push(result)
  78.       else
  79.         @counts += 1
  80.       end
  81.     end
  82.     return result
  83.   end
  84.   
  85.   #--------------------------------------------------------------------------
  86.   # ● 重定义 press?
  87.   #--------------------------------------------------------------------------
  88.   def press?(num)
  89.     return self.common01("@press",num)
  90.   end
  91.   
  92.   #--------------------------------------------------------------------------
  93.   # ● 重定义 trigger?
  94.   #--------------------------------------------------------------------------
  95.   def trigger?(num)
  96.     return self.common01("@trigger",num)
  97.   end
  98.   
  99.   #--------------------------------------------------------------------------
  100.   # ● 重定义 repeat?
  101.   #--------------------------------------------------------------------------
  102.   def repeat?(num)
  103.     return self.common01("@repeat",num)
  104.   end
  105.   
  106.   #--------------------------------------------------------------------------
  107.   # ● 通常02
  108.   #--------------------------------------------------------------------------
  109.   def common02(kind)
  110.     if $record != nil and $record.mode == "播放"
  111.       return $record.pop
  112.     end
  113.     result = eval(kind).call
  114.     if $record != nil and $record.mode == "录制"
  115.       if result != 0
  116.         self.deal_repeat_key
  117.         $record.push(result)
  118.       else
  119.         @counts += 1
  120.       end
  121.     end
  122.     return result
  123.   end
  124.   
  125.   #--------------------------------------------------------------------------
  126.   # ● 重定义 dir4
  127.   #--------------------------------------------------------------------------
  128.   def dir4
  129.     return self.common02("@dir4")
  130.   end
  131.   
  132.   #--------------------------------------------------------------------------
  133.   # ● 重定义 dir8
  134.   #--------------------------------------------------------------------------
  135.   def dir8
  136.     return self.common02("@dir8")
  137.   end
  138.   
  139. end

  140. #==============================================================================
  141. # ■ Sub_Hash
  142. #------------------------------------------------------------------------------
  143. #  Hash的子类。
  144. #==============================================================================

  145. class Sub_Hash < Hash
  146.   
  147.   #--------------------------------------------------------------------------
  148.   # ● 初始化
  149.   #--------------------------------------------------------------------------
  150.   def initialize
  151.     @pos = 0
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● push
  156.   #--------------------------------------------------------------------------
  157.   def push(value)
  158.     self[@pos] = value
  159.     @pos += 1
  160.   end
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # ● shift
  164.   #--------------------------------------------------------------------------
  165.   def shift
  166.     result = self[@pos]
  167.     @pos += 1
  168.     return result
  169.   end
  170.   
  171.   #--------------------------------------------------------------------------
  172.   # ● 更改位置
  173.   #--------------------------------------------------------------------------
  174.   def pos=(pos)
  175.     @pos = pos
  176.   end
  177.   
  178.   #--------------------------------------------------------------------------
  179.   # ● 判断
  180.   #--------------------------------------------------------------------------
  181.   def empty?
  182.     return @pos == self.size
  183.   end
  184.   
  185. end
  186.    
  187. #==============================================================================
  188. # ■ Record
  189. #------------------------------------------------------------------------------
  190. #  录制的类。
  191. #==============================================================================

  192. class Record
  193.   
  194.   #--------------------------------------------------------------------------
  195.   # ● 定义实例变量
  196.   #--------------------------------------------------------------------------
  197.   attr_reader   :mode
  198.   
  199.   #--------------------------------------------------------------------------
  200.   # ● 初始化
  201.   #--------------------------------------------------------------------------
  202.   def initialize
  203.     @mode = "空"
  204.     @infos = Sub_Hash.new
  205.   end
  206.   
  207.   #--------------------------------------------------------------------------
  208.   # ● 开始录制
  209.   #--------------------------------------------------------------------------
  210.   def start
  211.     @mode = "录制"
  212.   end
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # ● 开始播放
  216.   #--------------------------------------------------------------------------
  217.   def play
  218.     @mode = "播放"
  219.     @infos.pos = 0
  220.     @counts = 0
  221.     @kind = nil
  222.     @ended = false
  223.   end
  224.   
  225.   #--------------------------------------------------------------------------
  226.   # ● 播放结束
  227.   #--------------------------------------------------------------------------
  228.   def finish
  229.     @mode = "空"
  230.     p '播放结束'
  231.   end
  232.   
  233.   #--------------------------------------------------------------------------
  234.   # ● push
  235.   #--------------------------------------------------------------------------
  236.   def push(value,num = 1)
  237.     @infos.push([value,num])
  238.   end
  239.   
  240.   #--------------------------------------------------------------------------
  241.   # ● pop
  242.   #--------------------------------------------------------------------------
  243.   def pop
  244.     if @ended
  245.       self.finish
  246.       return
  247.     end
  248.     if @counts == 0
  249.       result = @infos.shift
  250.       @ended = true if @infos.empty?
  251.       @counts = result[1]
  252.       @counts -= 1
  253.       @kind = result[0]
  254.       return @kind
  255.     else
  256.       @counts -= 1
  257.       return @kind
  258.     end
  259.   end
  260.   
  261.   #--------------------------------------------------------------------------
  262.   # ● 记录
  263.   #--------------------------------------------------------------------------
  264.   def write(index = 1)
  265.     save_data(self,"Record/record#{index}.rxdata")
  266.   end
  267.   
  268.   #--------------------------------------------------------------------------
  269.   # ● 暂停
  270.   #--------------------------------------------------------------------------
  271.   def pause
  272.     @mode = "空"
  273.   end
  274.   
  275. end
复制代码


              [本贴由 柳柳 于 2006-12-12 0:14:20 进行了编辑]
神隐中,偶尔诈尸

Lv1.梦旅人

梦石
0
星屑
111
在线时间
74 小时
注册时间
2006-5-29
帖子
453
27
发表于 2007-3-20 06:24:32 | 只看该作者
很神奇的东西!!{/se}
有点像那个 模拟精灵。模拟精灵运行时模仿电脑的操作,鼠标移动,和行动等等。然后重复。

这个也这么强………………今天看到的强悍之作太多鸟,有点消化不良……
【我的百度空间】
 不定时更新绘画或像素图~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2006-2-10
帖子
176
26
发表于 2007-1-28 22:37:02 | 只看该作者
求楼主和高手解决自定义键盘和录象脚本的整合问题
附范例:
http://www.51aj.com/uwixaow/Files/2007128/142856oksh.rar
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2006-2-10
帖子
176
25
发表于 2007-1-24 06:01:02 | 只看该作者
能不能说一个实际的操作方法啊。

是把他里面3个方法加进来吗?怎么操作啊?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

24
发表于 2007-1-23 22:50:45 | 只看该作者
-___-这个东西的原理就是把Input里的那个几个东西的返回值储存起来`
然后播放的时候就直接加载文件里的`````

所以如果是用了全键盘的话`要把全键盘里的那几个方法也加上来就好了````
-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2006-2-10
帖子
176
23
发表于 2007-1-22 03:06:54 | 只看该作者
这个脚本在存档后记录录象,我想在读档后继续记录,也就是把第二次存档之前的所有操作都记录下来,有办法做到吗?

另外这个脚本不能记录用户自定义的按键使用。

楼主,有什么办法能解决吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2006-12-2
帖子
201
22
发表于 2007-1-20 17:44:47 | 只看该作者
因为这个脚本是记录键盘按键次序,以达到录象效果,(解析脚本得出的结论)所以,只要更改一下注册表或者什么别的,就可以记录键盘,所以超级邪恶

哈哈(江民向外弹出*********了哦)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

21
发表于 2007-1-11 18:01:04 | 只看该作者
郁闷
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

有事烧纸

梦石
0
星屑
154
在线时间
509 小时
注册时间
2005-10-22
帖子
6982

贵宾VX城市地图大赛冠军第1届RMTV比赛冠军第1届TG大赛冠军

20
 楼主| 发表于 2007-1-10 23:48:00 | 只看该作者
唔 `` 感觉其实要完全的实现即时 确定挺麻烦 ``` 因为 rgss中写入记录文件的时候  对于
Sprite、Bitmap、Proc这些对象是不能进行 序列化的,也就是不能写入文件的,所以几乎就不可能是完全的即时,只能写入一些能够序列化的对象,变量值那些,然后在读取的时候重建Sprite、Bitmap对象等

至于精灵没释放那个问题,美兽可用这个试试 。 - -b  注意:会释放所有的Bitmap对象
ObjectSpace.each_object(Bitmap) do |btm|
  btm.dispose
end
神隐中,偶尔诈尸
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

19
发表于 2007-1-10 23:01:17 | 只看该作者
这个脚本本身就没看懂,有些方法甚至都没见过,只是感觉在记录操作流程。

后来想如果只记录变量状态是否可以,发现确实变量状态返回了,但生成的精灵并没有得到释放,也就是说,回到了记录的状态,但画面的精灵因为没得到释放变的乱七八糟,只能连按回车取消掉,有的时候又卡在地图上‘
于是利用那个“RGSS一些不常用的方法~”,返回实例变量名,判断是否为bitmap对象之后释放掉再返回,从此稀里糊涂被“T”的梦魇开始了.......
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-6 02:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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