这是之前用python已经处理好了的地中海的二值化地图


extends Node2D

func _on_ready() -> void:
	#https://docs.godotengine.org/en/4.3/tutorials/io/runtime_file_loading_and_saving.html
	#读写文件的文档在上面
	var file = FileAccess.open("res://maps/cropped_image_5_8.png", FileAccess.READ)
	print(file)
	var file_size = file.get_length()
	print("file_size:",file_size)
	
	var file_buffer = file.get_buffer(file_size)
	#print(file_buffer)
	
	#https://docs.godotengine.org/en/4.3/classes/class_image.html#class-image-method-load-png-from-buffer
	#接着是处理png文件的Image类的文档
	var img_instance = Image.new()
	var error = img_instance.load_png_from_buffer(file_buffer)
	print("Map Size:",img_instance.get_size())
	#拿到地图的长和宽
	var map_weight = img_instance.get_width()
	var map_height = img_instance.get_height()
	#沿着y向下递增的扫描整个图像
	for y in range(0,map_height):
		#print(y)
		for x in range(0,map_weight):
			var color = img_instance.get_pixel(x,y)
			#print(color)
			pass
			#拿到的color是类似于以下这样的东西,我想应该是r,g,b,alpha这样的四元组吧
			#(0, 0, 0, 1)
			#(0, 0, 0, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
	pass # Replace with function body.

 https://www.youtube.com/watch?v=dDihRqJZ_-M&ab_channel=JackieCodes 

extends Node2D


@onready var land_layer: TileMapLayer = %LandLayer
@onready var sea_layer: TileMapLayer = %SeaLayer

var terrain_land_index = 0
var terrain_sea_index =0
var land_array = []
var sea_array  = []

func _on_ready() -> void:
	#https://docs.godotengine.org/en/4.3/tutorials/io/runtime_file_loading_and_saving.html
	#读写文件的文档在上面
	var file = FileAccess.open("res://maps/cropped_image_5_8.png", FileAccess.READ)
	print(file)
	var file_size = file.get_length()
	print("file_size:",file_size)
	
	var file_buffer = file.get_buffer(file_size)
	#print(file_buffer)
	
	#https://docs.godotengine.org/en/4.3/classes/class_image.html#class-image-method-load-png-from-buffer
	#接着是处理png文件的Image类的文档
	var img_instance = Image.new()
	var error = img_instance.load_png_from_buffer(file_buffer)
	print("Map Size:",img_instance.get_size())
	#拿到地图的长和宽
	var map_weight = img_instance.get_width()
	var map_height = img_instance.get_height()
	#沿着y向下递增的扫描整个图像
	
	for y in range(0,map_height):
		#print(y)
		for x in range(0,map_weight):
			var color = img_instance.get_pixel(x,y)
			#print(color)
			if color == Color.BLUE:
				#print("I am bule")
				sea_array.append(Vector2i(x,y))
				pass
			if color == Color.BLACK:
				#print("I am black")
				land_array.append(Vector2i(x,y))
				pass
			pass
			#拿到的color是类似于以下这样的东西,我想应该是r,g,b,alpha这样的四元组吧
			#(0, 0, 0, 1)
			#(0, 0, 0, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
			#(0, 0, 1, 1)
	land_layer.set_cells_terrain_connect(land_array,terrain_land_index,0)
	sea_layer.set_cells_terrain_connect(sea_array,terrain_sea_index,0)
	pass # Replace with function body.

好的,现在的问题来了,这个程序跑起来。。。。。直接程序就假死了

哈哈哈

哎~~~

一个1,440,000,一个一百四十四万的地图块,好像是挺吓人哈

声明头部变量

读取处理好了的二值化的地图

转换成Image类型待处理

将黑色和蓝色分别压入两个数组

最后一步:程序化渲染

一共五步

但最后这一步,哈哈哈哈

直接1.8G的内存

以及30%左右的CPU占用,而且

就是

假死出不来

这个问题再看看咋整

我调整了一下参数,为20x80,顺利渲染了

但是我的图像是一个1200x1200的,我刚才试了一下200x200,程序都是假死状态,笑死

这个效率。。。啊,这,咋整啊