Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将屏幕坐标转换为简单2D游戏的世界坐标?_C - Fatal编程技术网

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

C 如何将屏幕坐标转换为简单2D游戏的世界坐标?,c,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) {

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

首先,我从相机上获取可见范围。然后我得到鼠标位置并除以块大小,问题是:我假设在屏幕的开头有一个完整的块,但实际上可能有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;
}

可能是因为x,y和block_大小都是整数吗?在除法之前将它们转换为浮动,得到分数部分。

我发现很难帮助,因为不清楚哪个变量使用哪个坐标系。射程在游戏坐标中吗?游戏坐标是否以1个方块为单位?所以游戏坐标可以是分数的,例如1.5是1区的中心?谢谢。真不敢相信我竟然忽略了它。