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

Project1

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

[原创发布] 如何让你的rgss上浏览器

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
跳转到指定楼层
1
发表于 2023-2-19 05:59:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
        首先,浏览器的运行机制和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服务器的目录下,你的游戏就能在网页上面运行了。

评分

参与人数 1+1 收起 理由
y967 + 1 塞糖

查看全部评分

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
6
 楼主| 发表于 2023-2-19 18:40:13 | 只看该作者
附带下改过的游戏下载地址,要改可以自己加
该功能目前还在测试中,可能存在bug
链接:https://pan.baidu.com/s/1rumPPrLnf4AHxtfJkOC4Pw
提取码:66l4

GET请求:
response = HTTPLite.get("网址")
if response[:status] == 200
    # 成功,打印结果
    p response[:body]
else
    # 失败,打印错误信息
    p response[:status]
end

# POST请求
# 定义请求参数
postdata = {
    "key1" => "value1",
    "key2" => "value2"
}
#发送请求
response = HTTPLite.post("网址", postdata)
# 解析返回值
postdata = HTTPLite::JSON.stringify(postdata)

目前没有更复杂的接口,也没有支持websocket
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
5
 楼主| 发表于 2023-2-19 18:24:03 | 只看该作者
y967 发表于 2023-2-19 16:43
厉害,玩了下,效果十分棒,加载有点慢,这个是单机网页版,还是可以在线交互,说话什么的? ...

可以在线交互,说话,本身支持这个接口,但这个游戏里面没有,因为这个游戏我是拿别人做的游戏改的。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13657
在线时间
3854 小时
注册时间
2013-7-18
帖子
2314
4
发表于 2023-2-19 16:43:56 | 只看该作者
厉害,玩了下,效果十分棒,加载有点慢,这个是单机网页版,还是可以在线交互,说话什么的?
山岚野人,快人快语,礼数不周,还望海涵....
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1117
在线时间
39 小时
注册时间
2023-2-17
帖子
66
3
 楼主| 发表于 2023-2-19 10:59:22 | 只看该作者
小怪兽奇奇侠 发表于 2023-2-19 10:26
我去,vx也能在线玩?这么厉害

忘记放示例了
http://124.70.196.6:8000/
由于买的服务器带宽不够,同时游戏引擎5m多,可能需要等一会儿

评分

参与人数 1+1 收起 理由
小怪兽奇奇侠 + 1 玩了一会儿,效果很赞!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
11185
在线时间
2067 小时
注册时间
2013-6-10
帖子
1516
2
发表于 2023-2-19 10:26:12 | 只看该作者
我去,vx也能在线玩?这么厉害
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 02:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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