求助:Godot 2D minimap系统负方向房间无法正常工作问题
Godot 2D小地图负方向(左上)显示异常问题
我在Godot中制作了一个2D小地图绘制工具,该工具在右方和下方(正方向)运行正常,但在上方和左方(负方向)无法正常工作,尝试修复后没有效果。
房间生成脚本
if roompos.size() <= 0: $Player.position = Vector2(1920, 1080) var startroom = room.instantiate() startroom.pixelsize = tilesize startroom.position = previousposition startroom.enemies["1"] = {"enemytype" : enemy1} startroom.tilecolor = Color(randf(), randf(), randf()) startroom.roomcoords = Vector2((previousposition.x - 960 )/tilesize, (previousposition.y - 540)/tilesize) startroom.roomtype = 1 roompos.append(previousposition) roomdata["1"] = {"location" : previousposition, "color" : startroom.tilecolor, "enemies" : startroom.enemies.duplicate(), "roomcoords" : Vector2((previousposition.x - 960)/tilesize, (previousposition.y - 540)/tilesize), "roomtype" : 1} add_child(startroom) var counter = 1 for i in range(15): var enemies = {} counter += 1 #await get_tree().create_timer(0.2).timeout var roomspawn = room.instantiate() roomspawn.pixelsize = tilesize roomspawn.tilecolor = Color(randf(), randf(), randf()) roomspawn.enemies[str(counter)] = {"enemytype" : enemy1} roomspawn.roomtype = 2 var upordown = randi_range(1, 2) var dirs = [-1, 1] var direction = dirs[randi() % dirs.size()] var tries = 0 while true: if upordown == 1: roomspawn.position = Vector2(previousposition.x + (tilesize * direction), previousposition.y) else: roomspawn.position = Vector2(previousposition.x, previousposition.y + (tilesize * direction)) if roomspawn.position not in roompos: break else: upordown = randi_range(1, 2) direction = dirs[randi() % dirs.size()] tries += 1 if tries > 100: previousposition = roompos.pick_random() tries = 0 if upordown == 1: previousposition.x = previousposition.x + (tilesize * direction) elif upordown == 2: previousposition.y = previousposition.y + (tilesize * direction) #$Player.position = previousposition roompos.append(previousposition) roomspawn.roomcoords = Vector2((previousposition.x - 960)/tilesize, (previousposition.y - 540)/tilesize) roomdata[str(counter)] = {"location" : previousposition, "color" : roomspawn.tilecolor, "enemies" : roomspawn.enemies.duplicate(), "roomcoords" : Vector2((previousposition.x - 960)/tilesize, (previousposition.y - 540)/tilesize), "roomtype" : 2} add_child(roomspawn) gamedata.set_value("gamedata", "roompos", roompos) gamedata.set_value("gamedata", "roomdata", roomdata) gamedata.set_value("gamedata", "playerpos", player.currentpos) gamedata.set_value("gamedata", "visitedrooms", player.visitedrooms) gamedata.save("user://gamedata.cfg") gameready = true else: #player.position = Vector2(1920, 1080) var temp = 1 for i in roompos: var roomspawn = room.instantiate() roomspawn.position = i roomspawn.pixelsize = tilesize roomspawn.tilecolor = roomdata[str(temp)]["color"] roomspawn.roomcoords = roomdata[str(temp)]["roomcoords"] roomspawn.enemies = roomdata[str(temp)]["enemies"] roomspawn.roomtype = roomdata[str(temp)]["roomtype"] add_child(roomspawn) temp += 1 gameready = true
小地图绘制脚本
extends Control @onready var game = get_node("/root/Game") @onready var player = get_node("/root/Game/Player") var tile = preload("res://Scenes/minimap_tile.tscn") var room_pixel_size = 15 func _draw(): for room in player.visitedrooms: var presettile = tile.instantiate() presettile.position = Vector2((room.roomcoords.x) * (room_pixel_size + 2), (room.roomcoords.y) * (room_pixel_size + 2)) presettile.tilecolor = Color(0.3,0.3,0.3) if room.roomcoords == player.currentpos: presettile.tilecolor = Color(1,1,1) add_child(presettile) func _process(delta): queue_redraw() position = Vector2(64, 64) - player.currentpos * (room_pixel_size + 2)
内容的提问来源于stack exchange,提问作者TheRealDSAL
相关产品推荐
相关产品推荐

