You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:23:15