IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> FlaxEngine学习笔记(六):Screen模块 -> 正文阅读

[游戏开发]FlaxEngine学习笔记(六):Screen模块

2021SC@SDUSC

这次我们来看screen模块和commandLine模块,顾名思义,这两个模块是负责屏幕检测和命令行检测的。

1.Screen模块

由screen.cpp和screen.h组成,先观察screen.h:

API_PROPERTY() static bool GetIsFullscreen();//获取全屏模式
API_PROPERTY() static void SetIsFullscreen(bool value);//设置全屏模式
API_PROPERTY() static Vector2 GetSize();//获取屏幕尺寸
API_FUNCTION() static Vector2 ScreenToGameViewport(const Vector2& screenPos);//将屏幕转换为游戏窗口,即进入游戏窗口
API_FUNCTION() static Vector2 GameViewportToScreen(const Vector2& viewportPos);//将游戏窗口转为屏幕
API_PROPERTY() static void SetSize(const Vector2& value);//设置屏幕尺寸
API_PROPERTY() static bool GetCursorVisible();//获取鼠标可视
API_PROPERTY() static void SetCursorVisible(const bool value);//设置鼠标可视
API_PROPERTY() static CursorLockMode GetCursorLock();//获取鼠标锁定模式
API_PROPERTY() static void SetCursorLock(CursorLockMode mode);//设置鼠标锁定模式

可以看到这一文件定义了基本的接口方法,主要是屏幕模式和游戏窗口与普通窗口转换的方法。

接着我们去到screen.cpp看具体实现:

1.获取全屏模式:

bool Screen::GetIsFullscreen()
{
#if USE_EDITOR
    return false;
#else
	auto win = Engine::MainWindow;
	return win ? win->IsFullscreen() : false;
#endif
}

利用三目表达式,简单判断主屏幕是否全屏,返回true或false。

2.设置全屏模式:

void Screen::SetIsFullscreen(bool value)
{
    Fullscreen = value;
}

3.获取屏幕尺寸:

Vector2 Screen::GetSize()
{
#if USE_EDITOR
    return Editor::Managed->GetGameWindowSize();
#else
	auto win = Engine::MainWindow;
	return win ? win->GetClientSize() : Vector2::Zero;
#endif
}

调用GetClientSize()方法获取客户端尺寸,判断是否主屏幕,若是则函数返回客户端尺寸,若不是则传回0。

4.设置尺寸:

void Screen::SetSize(const Vector2& value)
{
    if (value.X <= 0 || value.Y <= 0)
    {
        LOG(Error, "Invalid Screen size to set.");
        return;
    }

    Size = value;
}

参数value作为屏幕尺寸参数,简单判断值是否合法后传值即可。

5.转换屏幕至游戏窗口:

Vector2 Screen::ScreenToGameViewport(const Vector2& screenPos)
{
#if USE_EDITOR
    return Editor::Managed->ScreenToGameViewport(screenPos);
#else
    auto win = Engine::MainWindow;
    return win ? win->ScreenToClient(screenPos) : Vector2::Minimum;
#endif
}

实际上就是转换至客户端窗口。

6.游戏窗口转换至屏幕:

Vector2 Screen::GameViewportToScreen(const Vector2& viewportPos)
{
#if USE_EDITOR
    return Editor::Managed->GameViewportToScreen(viewportPos);
#else
    auto win = Engine::MainWindow;
    return win ? win->ClientToScreen(viewportPos) : Vector2::Minimum;
#endif
}

与上面的方法类似。

7.获取鼠标光标可视:

bool Screen::GetCursorVisible()
{
#if USE_EDITOR
    const auto win = Editor::Managed->GetGameWindow();
#else
	const auto win = Engine::MainWindow;
#endif
    return win ? win->GetCursor() != CursorType::Hidden : true;
}

设置win窗口变量,若是编辑模式则传回游戏窗口,若不是则传回引擎主窗口。最后判断win窗口变量的鼠标光标是否隐藏。

8.设置鼠标光标可视:

void Screen::SetCursorVisible(const bool value)
{
#if USE_EDITOR
    const auto win = Editor::Managed->GetGameWindow();
#else
	const auto win = Engine::MainWindow;
#endif
    if (win)
    {
        win->SetCursor(value ? CursorType::Default : CursorType::Hidden);
    }
}

参数为bool类型,即true则不隐藏,false为隐藏。

9.光标锁定的get和set方法:

CursorLockMode Screen::GetCursorLock()
{
    return CursorLock;
}

void Screen::SetCursorLock(CursorLockMode mode)
{
    CursorLock = mode;
}

10.屏幕服务的绘制方法:

void ScreenService::Draw()
{
#if USE_EDITOR

    // Not supported

#else

	if (Fullscreen.HasValue())
	{
		auto win = Engine::MainWindow;
		if (win)
		{
			win->SetIsFullscreen(Fullscreen.GetValue());
		}

		Fullscreen.Reset();
	}

	if (Size.HasValue())
	{
		auto win = Engine::MainWindow;
		if (win)
		{
			win->SetClientSize(Size.GetValue());
		}

		Size.Reset();
	}

#endif
}

相当于一个初始化方法,全屏模式下则直接获取全屏的屏幕尺寸,窗口模式下则获取当前客户端显示尺寸,一个简单的初始化。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:56:40  更:2021-11-09 19:58:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:39:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码