如何将屏幕坐标转换为简单2D游戏的世界坐标?

时间:2014-04-23 06:32:21

标签: c

我开始使用这个解决方案,但后来我注意到当角色处于与余数的坐标时,它无法正确映射。

首先,我从相机获得可见范围。然后我得到鼠标位置并除以块大小,这是问题所在:我假设在屏幕的开始处有一个整块,但实际上可能有1/4,2/4和3/4的一个块,同样适用于屏幕的结尾。

如何以最有效的方式正确执行此转换?

typedef struct {
    float x, y;
} Point;

Point camera_screen_coord_to_game(Camera *camera, int x, int y)
{
    Range range = camera_get_visible(camera, game_clock_ticks());
    int block_size = settings_get_block_size();
    Point game_coord;

    game_coord.x = range.x0 + x / block_size;
    game_coord.y = range.y1 - 1 - y / block_size;

    return game_coord;
}

1 个答案:

答案 0 :(得分:1)

可能是因为x,y和block_size都是整数?在分割之前将它们抛向浮动状态,然后得到小数部分。