comisaw   ♂  喵他  
 这里啥也没有( ̄_, ̄ )

一个多小时整了个联机游戏,真香~~

代码漏洞百出,请各位有心人多多指教!

#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
   
[投稿须知]
投稿邮箱:hareqj@163.com
教程投稿:可提供B站视频BV号,会直接生成视频播放页。
游戏投稿:须原创,请提供 作品web版文件、作者、简要操控说明。
内容举报邮箱:hareqj@163.com,请告知内容编号(右上角)及违规说明。
Copyright Godot社区 Godot2D.com All Rights Reserved.
京ICP备13032831号