查看: 4|回复: 0

[转载发布] 如何让你的rgss上浏览器

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    2022

    主题

    32

    回帖

    7144

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5074
    OK点
    16
    积分
    7144
    发表于 同元一千年七月八日(秋) | 显示全部楼层 |阅读模式
        首先,浏览器的运行机制和pc不一样,浏览器采用的是异步调用模式,并且是单线程的,所以不能像windows那样,通过消息循环来刷新游戏画面和处理游戏中的一些时间。
            在网页js中的循环,通常需要定义一个回调函数,将这个回调函数通过一定的途径注册到系统中去,然后让系统自动去调用,如下所示,我们定义main_update_loop为回调函数:

    $prev_scene = nil
    def main_update_loop
      if $scene != nil
        if $scene != $prev_scene
          if $prev_scene != nil
                  $prev_scene.dispose
          end
          $scene.main
          $prev_scene = $scene
        end
        # Update game screen
        Graphics.update
        # Update input information
        Input.update
        # Frame update
        $scene.update
      else
        raise "END"
      end
    end

    在rgss脚本,main模块中,移除如下代码:
      while $scene != nil
        $scene.main
      end

    此外,每一个场景(scene)里面,都会有一个循环更新的代码模块:
        loop do
          Graphics.update
          Input.update
          update
          if $scene != self
            break
          end
        end
            我们将这段模块移除,直接用end结尾,剩余部分再定义成另一个函数,给main_update_loop调用,
    其模板如下所示:
    class Scene_XXX
        ...
        def main
            ...
            Graphics.transition
                    # 这里的loop语句块被直接移除,并使用end结尾
        end

            # 余下代码,重新定义成dispose函数
        def dispose
            Graphics.freeze
            ...
        end

        def update
            ...
        end
    end

            最后是关于存储问题,由于浏览器不能直接访问计算机的文件,我们将游戏的记录保存再浏览器的缓存中,由于上面说到,浏览器的事件处理都是异步的,所以我们还需要再存储文件的地方加一段这样的代码:
    class Scene_Save < Scene_File
        ...

        def on_decision(filename)
            ...

            file = File.open(filename, "wb")
            write_save_data(file)
            file.close

                    # 这是额外加出的操作
            save_file_async(filename)

            ...
        end

        def write_save_data(file)
            ...
            Marshal.dump(characters, file)
            ...
            Marshal.dump($game_player, file)
            …
                    # 这是额外加出的操作
            Marshal.dump(1, file)
        end
    end

    完成以上操作后,还需要为rgss配置资源预加载表,操作如下:

    从百度网盘下载打包工具,并将其解压
    链接:https://pan.baidu.com/s/1xQh4tXwRzItGjWC21OAl9Q
    提取码:h2m6

    安装msys2-x86_64-latest

    安装完毕后,打开msys2,并运行命令安装ruby:
    pacman -S ruby

    将你游戏目录下所有的文件复制到gameasync

    运行游戏目录下make_mapping.sh脚本

    执行以下脚本:
    for f in Data/*
    do
            ./dump.sh “$f”
            echo “Processed file: $f”
    done

    将生成的preload文件夹移动到web-rgss同一层目录下

            最后一步,将打包工具下,除msys2-x86_64-latest以外的所有其他文件和文件夹放到你http服务器的目录下,你的游戏就能在网页上面运行了。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-3 12:07 , Processed in 0.048981 second(s), 48 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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