Answers:
(或者如您所说,将所有内容都浮动。)
世界坐标就是您通常使用的坐标,这有很多原因。它们是代表您在世界上的位置的最简单直观的方法,并且是真正比较同一世界中任何两个实体的位置的唯一方法。
通过在单个块中跟踪他,您除了工作之外一无所获。好吧,一个好处是您可以确定他所在的块,但是您已经可以使用世界坐标来计算出该块。
该答案的其余部分将解释如何根据玩家的世界坐标来计算玩家所在的世界块。
我将编写代码段,就像您有一个名为的2D 矢量类Vector2
-在几何中找到的矢量Vector
类型,而不是所提供的列表类型java.util
。如果没有任何几何Vector类,则应该在线找到一些或自己动手(任何人都知道Java的任何优质几何库吗?)
Vector2类将具有一个X
字段和一个Y
字段,它们是公共数字(与此处的数字类型无关)。
// Current player X,Y position in the world
Player.Position.X, Player.Position.Y
// An array of map blocks with consistent width and height
Block[x][y] blocks = World.GetBlocks();
// We'll wing it with an example global width/height for all blocks
Block.GetWidth() == 100;
Block.GetHeight() == 100;
// To ensure we're on the same page:
// blocks[0][0] should be at position (0,0) in the world.
// blocks[2][5] should be at position (200,500) due to the width/height of a block.
// Also:
// Assuming (0,0) is in the top-left of the game world, the origin of a block
// is its top-left point. That means the point (200,500) is at the top-left of
// blocks[2][5] (as oppose to, say, its center).
public Vector2 GetPlayersBlockPosition() {
Vector2 blockPosition = new Vector2();
blockPosition.X = (int)(Player.Position.X / Block.GetWidth());
blockPosition.Y = (int)(Player.Position.Y / Block.GetHeight());
return blockPosition;
}
public Block GetPlayersBlock() {
Vector2 bp = GetPlayersBlockPosition();
return blocks[bp.X, bp.Y];
}
Block block = GetPlayersBlock();
2个功能>块内跟踪和块间传输的所有混乱
您的问题有点抽象,但也许您正在寻找一种寻路算法,我建议使用A *(http://en.wikipedia.org/wiki/A*_search_algorithm)。如果贴图没有被遮挡地形,这将帮助您将角色贴图移动到贴图上。