扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 59|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    2025-2-4 02:05
  • 签到天数: 110 天

    连续签到: 2 天

    [LV.6]常住居民II

    2327

    主题

    395

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10470
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13220

    灌水之王

    发表于 2024-4-18 19:12:29 | 显示全部楼层 |阅读模式
        首先,浏览器的运行机制和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服务器的目录下,你的游戏就能在网页上面运行了。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

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

    GMT+8, 2025-3-10 19:45 , Processed in 0.137435 second(s), 57 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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