跟着网友教程,使用Godot复刻传奇游戏。
Github
我个人自动克隆的项目,每4小时自动一次。
他的官方网址
B站课程更新中
为了简单(懒),并没有按教程一步步搭建环境,毕竟那不是重点,利用现在有的PVE开一个Ubuntu即可,何况各端都可以导出Win程序。
为了更简单(更懒),尽可以减少每次Github新代码后的修改,于是:
- 端口映射
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 7000
在Ubuntu下执行此命令进行端口映射。因为Golang开发的server使用了7000端口,而Godot客户端访问的是https,即443端口。
- 修改golang的server代码
在server/framework/interface/interface.go的Init()函数中,修改为如下:
var HttpServer = &http.Server{
Addr: fmt.Sprintf(":%d", Config.Get.Service.HttpPort),
Handler: routers,
ReadTimeout: Config.Get.Service.ReadTimeout,
WriteTimeout: Config.Get.Service.WriteTimeout,
MaxHeaderBytes: 1 << 20,
}
go func() {
// 其实就改了这里,判断是否使用https
if true {
if err := HttpServer.ListenAndServeTLS("./server.pem", "./server.key"); err != nil {
}
} else {
if err := HttpServer.ListenAndServe(); err != nil {
}
}
}()
log.Println("[game]", color.Green.Text("server..."))
让golang自己实现https,并不需要nginx。
把作者/tools/centos/etc/nginx/ssl目录下的域名证书放到server目录下,改名为代码中的两个文件。
- 修改本机hosts,例如我现在用的Win
C:\Windows\System32\drivers\etc\hosts 添加类似
192.168.1.42 game.makeryang.com
这里的IP是我Ubuntu的IP
这样,就不用每次都修改godot里面的代码,而只需要修改golang服务端代码。
相信以后作者会把这些代码抽离出来,通过配置文件来完成。这样我也就只需要一次性的修改配置即可。
如果你更懒一点,在win下go run吧,把hosts文件中的IP改为127.0.0.1,即自己。端口映射也别做了,直接改配置代码中的7000为443。
而godot的网络连接,将godot导出为无头模式(专用服务器),直接运行即可。
也就完成了在Win运行三端:golang服务端 / godot服务端 / godot客户端
至于数据库mysql,win下面也可以一键绿色运行。
每次github更新,只需要修改golang服务端代码(如上),其它按作者的走。
2024.3.14
作者最近更新较慢,当前添加了1/3个登陆界面。
我在此增加了一点点效果。
# 显示Logo
logo.self_modulate = Color(0,0,0,0)
logo.scale = Vector2(15.0,15.0)
logo.pivot_offset = logo.size/2 # 轴心设置
var tween = create_tween()
tween.set_parallel()
tween.tween_property(logo,"self_modulate",Color(1,1,1,1),0.6)
tween.tween_property(logo,"scale",Vector2(1.0,1.0),0.3)
#await tween.finished
await get_tree().create_timer(1.0).timeout
# 显示右上角Logo
logo.visible = false
$RightLogo.visible = true
# 载入背景声音及登陆框
bg_music.play()
login.modulate = Color(0,0,0,0)
login.visible = true
create_tween().tween_property(login,"modulate",Color(1,1,1,1),0.2)
通过shader增加了一个扫光效果
shader_type canvas_item;
uniform sampler2D light_vector;
uniform float width = 0.08;
void fragment() {
vec4 color = texture(TEXTURE,UV);
if(color.a !=0.0){
float v = texture(light_vector,UV).r;
float diff = v - cos(TIME);
if(abs(diff)<width){
color = vec4(0.3,0.3,0.0,0.3) * (1.0 - abs(diff)/width) + color;
}
}
COLOR = color;
}
考虑到负载,可以将服务功能拆分:
- 网页服务
- 下载服务
- 游戏服务(6.登入登出等常规服务 + 7.游戏内数据同步服务)
- 聊天服务
- API服务
可以在game_server_data表中添加相关字段,定义各个服务的IP及端口。
中期可以将1.2.5合并到一起,6.4合并到一起,7单独为主力服务。
也可以将1.4.5.6合并,2采用分流到其它地方,7依然单独。
考虑网吧使用场景,减少下载服务器压力,将本地开通下载服务,A机下载完后,同局域网内主机将向A机请求下载。即A机作为服务器。