赞 | 23 |
VIP | 0 |
好人卡 | 0 |
积分 | 11 |
经验 | 0 |
最后登录 | 2023-6-5 |
在线时间 | 39 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1117
- 在线时间
- 39 小时
- 注册时间
- 2023-2-17
- 帖子
- 66
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
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服务器的目录下,你的游戏就能在网页上面运行了。 |
评分
-
查看全部评分
|