

这是之前用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,程序都是假死状态,笑死
这个效率。。。啊,这,咋整啊
