0

在过去的几天里,我在这里做了:

https://github.com/PerduGames/SoftNoise-GDScript-

现在我可以生成我的“无限”地图,但是当玩家在 Godot(GDScript) 中的 2D 场景中移动时,我在处理仅生成部分地图时遇到了问题。

我正在尝试在瓷砖地图中绘制玩家周围的区域。使用此功能,我占据了玩家的位置:

func check_posChunk(var _posChunk, var _posPlayer):

var pos = $"../TileMap".world_to_map(_posPlayer)

for i in range(0, mapSize, 16):
    if pos >= Vector2(i, i) && pos <= Vector2(i + 16, i + 16):
        if pos.x > pos.y:
            _posChunk = Vector2(i, i) - Vector2(32, 48)
        else:
            _posChunk = Vector2(i, i) - Vector2(16, 16)         
        break
return _posChunk

我将位置存储在变量“posChunk”中并在这里绘制:

func redor(var posPlayer):

posChunk = check_posChunk(posChunk, posPlayer)

for x in range(64):
    for y in range(64):
        $"../TileMap".set_cell(posChunk.x + x, posChunk.y + y, biomes(elevation_array[posChunk.x + x][posChunk.y + y], umidade_array[posChunk.x + x][posChunk.y + y]))

我可以在 x < y 和 x == y 时在播放器周围绘制,但是当 x > y 时,会出现并发症,因此在这里,即使我检查了上面的情况 if,有些情况下它不会按预期绘制:

https://github.com/godotengine/godot/issues/9284

4

1 回答 1

0

如何正确处理 Vector2 比较?

我能够找到这个案例的答案,在另一个论坛上回答,比较Vector2不是最好的方法,使用Rect2(获取两个Vector2,第一个参数是位置,第二个参数是大小)你可以检查如果玩家在一个盒子里,那么下面的代码就会发生:

https://godotengine.org/qa/17982/how-to-compare-two-rect2?show=17994#c17994

#Verify that the pos that is the player's position 
#is inside the rect_chunk rectangle with the has_point function of Rect2.

var rect_chunk = Rect2(Vector2(i, i), Vector2(16, 16))
if(rect_chunk).has_point(pos)):
于 2017-09-09T14:56:22.043 回答