2017-07-30 125 views
0

我目前在我的游戏中有两个视口。一个是顶部的信息(健康,黄金,魔法等),另一个视口显示地图区域。我使用图像创建了自己的自定义鼠标光标,并且我像显示其他图像一样显示该图像,并基于鼠标光标位置更新位置。我唯一的问题是,我只能在视口上绘制该图像。我已经在地图区域设置了显示,当我将鼠标移动到顶部时;它不会显示在信息区域。它只是离开窗户。所以我做的第一件事(我知道它不会工作,但无论如何测试它)是在两个视口上绘制鼠标。但是,当移动到屏幕顶部(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); 
} 

我怎样才能得出我的鼠标图像(与视没有初步认识)。以下是我正在谈论的一些图像。

只显示在舞台上,不会显示在hud上。 enter image description here

在鼠标上的两个,如果我画的鼠标在两个视窗 enter image description here

编辑:我做了一个解决办法,将这个游戏 我只是担心它赢得了”工作t在更大更大的游戏上表现更好

我创建了与屏幕(窗口)一样大的另一个视口,并将鼠标拖到该视口。

回答

0

超晚的答案,但在这里。调用SDL_RenderSetViewport(渲染器,NULL)将重置视口到整个窗口。

在调用SDL_PollEvent之前,您应该这样做,因为如果您在视口处于活动状态时轮询鼠标事件,则鼠标移动事件坐标将相对于视口而不是主窗口。