2017-09-09 60 views
0

在过去的日子里,我确实在这里:涂料tilemap的各地玩家

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时,并发症发生,由于这里这里,即使我检查上面的情况,如果,有些情况下它不会如预期那样绘制:

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

回答

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)):