直接在游戏中绘制,而不是在屏幕上绘制

时间:2019-05-13 14:18:35

标签: c# drawing directx

我在玩游戏,我想在上面画一条线。我不能使用Graphics.DrawLine,因为它需要窗口/屏幕坐标,而不是游戏坐标。

我想从游戏的pos A到游戏的pos B画一条线。如果将这些坐标放在DrawLine中,它将获得窗口/屏幕(而不是游戏)的X和Y坐标。

在下面的图像中,我想画一条蓝线,但是使用DrawLine它会画一条灰线。

enter image description here

即使这些点在屏幕上不可见,我也想绘制,如本例所示。如果在游戏场景中移动屏幕,由于A点和B点的坐标保持不变,因此线条保持不变。

有办法吗?

1 个答案:

答案 0 :(得分:1)

这里的重点是将世界坐标转换为屏幕坐标。例如,假设我要在世界地图上画一条从点x = 100,y = 600到点x = 700,y 600的线,并且屏幕的左侧是x = 300,其底部是y = 300在世界坐标系中,则在屏幕坐标系中,绘图应从x = -200,y = 300到x = 400,y = 300开始,假设分辨率为800x600,则可以在屏幕中心完成画线。

由于屏幕是相对于世界场景移动的,因此“世界到屏幕”方法的代码可能是:

static int[] WorldToScreen(int worldX, int worldY, int worldX2, int worldY2, int screenLeft, int screenBottom)
        {
            int screenX = worldX - screenLeft;
            int screenY = worldY - screenBottom;

            int screenX2 = worldX2 - screenLeft;
            int screenY2 = worldY2 - screenBottom;

            return new int[] { screenX, screenY, screenX2, screenY2 };
        }

现在,我们只需获取这些转换后的坐标,然后使用GDI,DirectX或任何您想要的东西在屏幕上绘制。

PS:屏幕(或摄像机)坐标通常与屏幕中心有关。我在这里使用边缘只是为了简化。