在玩家周围绘制瓷砖地图

时间:2017-09-09 13:59:51

标签: procedural-generation godot gdscript

在最后几天,我在这里做了:

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

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

我正在尝试在tilemap中绘制玩家周围的区域。有了这个功能,我就取了玩家的位置:

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&lt; y,当x == y时,但当x> y,由于这里出现了并发症,即使我检查上面的情况,如果有的话,它会不会按预期绘制:

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

1 个答案:

答案 0 :(得分: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)):