【问题标题】:Relative mouse position of SDL_SurfaceSDL_Surface 的相对鼠标位置
【发布时间】:2011-10-13 08:40:12
【问题描述】:

在我的应用程序中,我需要从 SDL_Surface 返回相对鼠标位置,问题是返回的鼠标位置是相对于 SDL 窗口而不是 SDL_Surface。我想我的问题是最简单/最有效的方法是什么。任何问题都可以问。谢谢。

编辑:对不起,我应该解释得更好,我在Surf_display 上有SDL_Surface* Surf_Display;,有一个图像说它是 1000 x 1000,所以为了在 600 x 600 上看到图像窗口 我有一个可以四处移动的相机(实际上是移动的不是相机的表面),例如为了看图像的右侧,如果有意义的话,我将表面-1 向左移动。所以我的问题是当我在表面的一部分(图像)上单击鼠标时,我的鼠标返回鼠标与光标在窗口中的位置相比的位置,我想要的是它返回的位置光标与其在表面上的位置相比(图像) 我希望能更好地解释这种情况。再次感谢

【问题讨论】:

  • 你现在有什么?当您说SDL_Surface 时,您指的是SDL_SetVideoMode 返回的那个吗?因为否则,我不知道您所说的相对于SDL_Surface 的位置是什么意思,因为它们没有位置。
  • @Benjamin Lindley 抱歉,请阅读以上内容

标签: c++ sdl


【解决方案1】:

只需添加(或减去,取决于您如何看待它)鼠标坐标的偏移量。所以你正在绘制这样的表面:

SDL_Rect dest_rect = { -camera.x, -camera.y };
SDL_BlitSurface(image_surface, NULL, screen_surface, &dest_rect);

我不知道您是使用基于事件的鼠标处理,还是使用 SDL_GetMouseState,但无论哪种方式,您只需将 camera.x 和 camera.y 添加到鼠标位置,例如:

int x, y;
SDL_GetMouseState(&x, &y);
x += camera.x;
y += camera.y;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2014-04-22
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多