魔塔吧 关注:66,196贴子:2,173,257

【冥犬论技术】给魔塔制作录制和Replay功能。

只看楼主收藏回复

1L送风
☢注意:看清楚了,我是RFPS,是冥狗,不是正灌神触RPKS


1楼2011-05-30 11:13回复
    【1、基本思路】
    前几天我看到RPKS在东方吧发的贴。是讲东方REPLAY的。这一点启发了我。
    如果拆塔的人能通过录制功能把自己拆塔过程录下来,这样就不用那么麻烦的直播了……不仅如此,应该还有别的用处吧。
    东方REPLAY的研究贴里R触讲了一些REPLAY的内部构造。大致是说,东方的REPLAY是把直接输入信息写入文件的。这样,就意味着在观看REPLAY的时候,实际上可以理解为电脑在模仿你按键盘的动作打弹幕。
    利用输入信息录制的前提是,游戏过程必须【完全】依靠玩家的输入进行,即随机内容什么的都不能有。由于魔塔属于固定数值RPG,除非是那种像DOTA魔塔那样的傻缺塔,随机数通常用不到的。录制的时候,只需记录下输入信息,看录像是再根据当时的输入还原游戏过程就行了。强调,这种录制方法只适合魔塔这种输入一样结果就一样的游戏。一旦游戏中运用到了随机数,同样的输入就未必会造成同样的结果。


    2楼2011-05-30 11:21
    回复
      【2、实现方法】
      RGSS判断输入通常是和更新画面同步的,只要Graphics.update和Input.update放到一块执行。每执行一次Graphics.update,相当于时间前进一帧,同时再执行Input.update,就变成了每帧更新一次输入信息。
      那么这些输入信息是什么呢?
      我没看过Input模块的定义,但应该是直接获取键盘按下和松起的状态来起作用的(废话)。于是实现录制的方法就应该很容易的理解了。录制时,每帧将当帧的键盘状态记录下来,保存到文件里,这样就行了。
      那么。问题来了。
      1、看录像时,如何将REPLAY的信息还原呢?
      需要两个输入模块,其中一个平常用,另一个REPLAY用。REPLAY的输入模块在观看REPLAY时替代正常的Input模块,但并不从硬件获取输入信息,而是读取REPLAY文件上的输入信息。当调用trigger?、press?等方法时,正常的Input会根据键盘按下的状态(其实是每次update获取的)返回值,而相反REPLAY输入模块则会根据从文件上读取的输入信息返回值。
      如果直接用两个模块的方法来实现的话,是不太可行的,因为模块和类都是以常量的方式管理的。那怎么办呢?只好重新定义Input模块了,勉强有原模块的功能就行。在获取输入信息时,搞一个条件分歧,若不是REPLAY模式就调用Win32API获取按键信息,否则就从REPLAY文件中读取。


      3楼2011-05-30 11:37
      回复
        此贴无意义,要Replay功能者左转AMTT样板


        4楼2011-05-30 11:44
        回复
          另我的帖子没有研究Replay原理,是个人都知道,我研究的是ZUN的压缩方式


          5楼2011-05-30 11:44
          回复
            2、如何写入REPLAY文件?
            在重新定义的Input模块中,加上“若正在录制中则记录输入信息”的一段。Win32API中获取的按键信息共包括256个键,给每个键记录当帧的已按下帧数(如果是松起状态则为0)。已按下帧数占2个字节,范围在-32768~32767,这么多应该够用了(按照60FPS,32767帧相当于500秒,没人会按那么长时间)。每个键的信息占2个字节,一共256个键要用512字节每帧,假如录制1000秒,就需要三百万字节,不算太多。
            写入的时候用直接用字符写文本文档就可以,算法谁都会……读取时也一样。
            如果想省掉录制时一个键也没按的时间,也可以加上一种代表等待N帧的标识。


            6楼2011-05-30 11:47
            回复
              伸手党啊你


              7楼2011-05-30 11:48
              回复
                3MB要16分钟?这啥破效率 ZUN的30分钟才不到80kb


                8楼2011-05-30 11:48
                回复
                  而且正灌大人不务正业,这种时候也在上……


                  9楼2011-05-30 11:48
                  回复
                    你再怎么折腾也折腾不过AMTT的Replay,死心吧


                    10楼2011-05-30 11:49
                    回复
                      LZ是谁


                      IP属地:江苏11楼2011-05-30 11:49
                      回复
                        求AMTT我要拆开来看看


                        12楼2011-05-30 11:50
                        回复
                          所以说了什么键都不按的帧用别的方法写嘛。
                          还可以降低帧率


                          13楼2011-05-30 11:52
                          回复
                            看到你第一句话我无语
                            看到你第二句话我直接一口老血


                            14楼2011-05-30 11:57
                            回复
                              一阵才用512B一点都不多……
                              再说东方才几个有用的键啊?


                              15楼2011-05-30 12:01
                              回复