一个多小时整了个联机游戏,真香~~
代码漏洞百出,请各位有心人多多指教!
#start.gd
extends Control
onready var _name=$name
onready var ip=$ip
func _ready():
get_tree().connect("network_peer_connected",self,"_player_connected")
if "--server" in OS.get_cmdline_args():
var net=NetworkedMultiplayerENet.new()
net.create_server(20033,25)
print("[]已建立服务器,端口:20033")
get_tree().set_network_peer(net)
rpc_unreliable("_server",Auto.player1name)
pass
func _player_connected(id):
Auto.player2id=id
var game=preload("res://Game.tscn").instance()
print("[]游戏已启动!")
get_tree().get_root().add_child(game)
self.hide()
pass
func _on_Server_pressed():
Auto.player1name=_name.text
var net=NetworkedMultiplayerENet.new()
net.create_server(20033,2)
get_tree().set_network_peer(net)
rpc_unreliable("_server",Auto.player1name)
pass # Replace with function body.
func _on_Client_pressed():
Auto.player1name=_name.text
rpc_unreliable("_server",Auto.player1name)
var net=NetworkedMultiplayerENet.new()
net.create_client(ip.text,20033)
get_tree().set_network_peer(net)
pass # Replace with function body.
remote func _server(_text):
Auto.player2name=_text
pass
#Game.gd
extends Node2D
onready var player1Pos=$player1Pos
onready var player2Pos=$player2Pos
onready var richtext=$Control/richtext
onready var line=$Control/line
var i=false
func _ready():
if "--server" in OS.get_cmdline_args():
Auto.player1name="Server"
richtext.add_text("[]服务器已开启\n端口:20033\n")
var player1=preload("res://Player.tscn").instance()
player1.position=player1Pos.position
player1.set_name(str(get_tree().get_network_unique_id()))
player1.set_network_master(get_tree().get_network_unique_id())
add_child(player1)
printf(0,"[]玩家%s已进入游戏!\n"%str(Auto.player1name))
#richtext.push_mono("")
var player2=preload("res://Player.tscn").instance()
player2.position=player2Pos.position
player2.set_name(str(Auto.player2id))
player2.set_network_master(Auto.player2id)
add_child(player2)
#richtext.add_text("<System>玩家%s已进入游戏!\n"%str(Auto.player2name))
pass # Replace with function body.
func _on_Button_pressed():
if line.text[0]=="$":
if line.text=="$clear":
if i==true:
richtext.clear()
rpc_unreliable("_clear")
printf(0,"<%s>调用了清屏\n"%Auto.player1name)
else:
richtext.add_text("[]没有权利调用:%s:请使用$root-true指令申请管理员权限,详情请调用$help指令!\n"%Auto.player1name)
elif line.text=="$root-true":
i=true
printf(0,"[]%s:激活了管理员权限!\n"%Auto.player1name)
elif line.text=="$root-false":
i=false
printf(0,"[]$s:关闭了管理员权限!\n"%Auto.player1name)
elif line.text=="$root-false-all":
if i==true:
i=false
rpc_unreliable("_root",false)
printf(0,"[]%s:关闭了所有管理员权限!\n"%Auto.player1name)
else:
richtext.add_text("[]没有权利调用:%s:请使用$root-on指令申请管理员权限,详情请调用$help指令!\n"%Auto.player1name)
elif line.text=="$root-true-all":
if i==true:
i=true
rpc_unreliable("_root",true)
printf(0,"[]%s:打开了所有管理员权限!\n"%Auto.player1name)
else:
richtext.add_text("[]没有权利调用:%s:请使用$root-ture指令申请管理员权限,详情请调用$help指令!\n"%Auto.player1name)
elif line.text=="$help":
richtext.add_text("[]帮助文档:\n$clear:清屏,需要管理员权限\n$root-true:开启管理员权限,不需要管理员权限\n$root-false:关闭管理员权限,不需要管理员权限\n$clear:清屏,需要管理员权限\n$root-[bool]-all:关闭/开启所有成员的管理员权限,需要管理员权限\n$help:帮助文档,不需要管理员权限\n")
else:
printf(0,"[]调用了非法语句:%s:调用了%s,详情请调用$help指令!\n"%[Auto.player1name,line.text])
else:
printf(0,"<%s>%s\n"%[Auto.player1name,line.text])
line.text=""
pass # Replace with function body.
remote func _text(_text):
richtext.add_text(_text)
pass
remote func _clear():
richtext.clear()
remote func _print(_text):
printraw(_text)
remote func _root(flag:bool):
i=flag
pass
func printf(id,dir):
if id==0:
richtext.add_text(dir)
rpc_unreliable("_text",dir)
printraw(dir)
rpc_unreliable("_print",dir)
pass
func get_server(_player):
pass
func _process(_delta):
if get_tree().get_network_unique_id()==0:
printf(0,"[]%s已断开连接\n"%Auto.player1name)
get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)
pass
#player.gd
extends Sprite
#onready var richtext=$richtext
var speed=200
var dir=Vector2()
func _ready():
pass
remote func _set_position(pos):
position=pos
func _process(_delta):
dir=Vector2()
if Input.is_action_pressed("ui_left"):
dir.x-=1
if Input.is_action_pressed("ui_right"):
dir.x+=1
if Input.is_action_pressed("ui_up"):
dir.y-=1
if Input.is_action_pressed("ui_down"):
dir.y+=1
dir=dir.normalized()
if dir!=Vector2():
if is_network_master():
position+=speed*dir*_delta
rpc_unreliable("_set_position",position)
pass
#Auto.gd
extends Node
var player=[]
var player2id=0
var playernum=1
var player1name=""
var player2name=""
var serverplayer=true
func _ready():
pass