SDL使用多个视口的屏幕坐标在屏幕上绘制图像
问题描述:
我目前在我的游戏中有两个视口。一个是顶部的信息(健康,黄金,魔法等),另一个视口显示地图区域。我使用图像创建了自己的自定义鼠标光标,并且我像显示其他图像一样显示该图像,并基于鼠标光标位置更新位置。我唯一的问题是,我只能在视口上绘制该图像。我已经在地图区域设置了显示,当我将鼠标移动到顶部时;它不会显示在信息区域。它只是离开窗户。所以我做的第一件事(我知道它不会工作,但无论如何测试它)是在两个视口上绘制鼠标。但是,当移动到屏幕顶部(LOL)时,会显示两个鼠标光标。我的问题是,如何使用屏幕(或窗口)坐标在视口外部使鼠标图像在屏幕上绘制。那有意义吗?我希望能够将鼠标移动到屏幕上的任何位置,以便我可以单击地图视口中的项目以及信息视口。SDL使用多个视口的屏幕坐标在屏幕上绘制图像
我视类是非常简单的:
Viewport.h
#pragma once
#include <SDL.h>
class Viewport
{
public:
Viewport(int x, int y, int width, int height);
~Viewport();
SDL_Rect GetViewport();
private:
SDL_Rect viewport;
};
Viewport.cpp
#include "Viewport.h"
Viewport::Viewport(int x, int y, int width, int height)
{
viewport.x = x;
viewport.y = y;
viewport.w = width;
viewport.h = height;
}
Viewport::~Viewport()
{
}
SDL_Rect Viewport::GetViewport()
{
return viewport;
}
在我的游戏类我初始化两个变量对每个视窗
Viewport hud;
Viewport arena;
在构造函数中,我将它们初始化为适当的大小。然后,在我的游戏绘图函数中,我相应地设置了视口并在相应的视口中绘制。
// gfx is my Graphics class. Everything that has to do with drawing is inside that class; including setting the viewport for the render.
gfx.SetViewport(hud.GetViewport());
// This is where I would draw stuff on the hud viewport
gfx.SetViewport(arena.GetViewport());
// Where I draw the map, enemies, etc.
我SetViewport功能设置是这样的:
void Graphics::SetViewport(SDL_Rect viewport)
{
SDL_RenderSetViewport(renderer, &viewport);
}
我怎样才能得出我的鼠标图像(与视没有初步认识)。以下是我正在谈论的一些图像。
编辑:我做了一个解决办法,将这个游戏 我只是担心它赢得了”工作t在更大更大的游戏上表现更好
我创建了与屏幕(窗口)一样大的另一个视口,并将鼠标拖到该视口。
答
超晚的答案,但在这里。调用SDL_RenderSetViewport(渲染器,NULL)将重置视口到整个窗口。
在调用SDL_PollEvent之前,您应该这样做,因为如果您在视口处于活动状态时轮询鼠标事件,则鼠标移动事件坐标将相对于视口而不是主窗口。