Files
EVEngine/docs/usr/modules/window.md
T

60 lines
2.8 KiB
Markdown

# 窗口模块
**脚本入口:** `eve.Window()`
创建和配置单一游戏窗口。
## 基本用法
```squirrel
local window = eve.Window();
print(window.getWidth() + "x" + window.getHeight() + "\n");
```
## 对象关系与调用时机
`WindowSettings` 只是创建参数;`Window` 持有平台窗口;`Graphics` 必须先通过 `setGraphics()` 关联。窗口初始化放在引擎启动阶段,游戏逻辑通常直接使用全局 `win`,只在设置菜单中调用尺寸变更。
## 目标导向指南
### 按配置创建窗口
1. 在 `config.nut` 保存宽、高和标题等游戏配置。
2. 创建 `eve.WindowSettings()`,填写 `width`、`height`、`centered`。
3. 调用 `win.setGraphics(gfx)` 后再调用 `win.setWindowSettings(settings)`。
4. 用 `getWidth()` / `getHeight()` 回读真实尺寸;移动端可能不会采用请求尺寸。
### 在选项菜单切换分辨率
调用 `setSize(width, height)`,成功后重新读取窗口尺寸,并同步摄像机 viewport 与 UI 布局。退出按钮应调用 `close()`,不要直接终止进程。
### 适配高 DPI 编辑器布局
`getWidth()` / `getHeight()` 返回窗口的逻辑尺寸,适合游戏摄像机和普通 UI 坐标;
`getPixelWidth()` / `getPixelHeight()` 返回交换链使用的实际像素尺寸,适合截图、
离屏目标和像素级渲染。`getDPIScale()` 返回实际像素宽度与逻辑宽度的比例。
编辑器应只选择一种坐标空间完成布局,不要同时使用像素尺寸并再次乘以 DPI 比例。
## 常见问题
- `setWindowSettings()` 失败:通常是 Graphics 尚未关联,或平台不支持请求的模式。
- 移动端尺寸不同:必须信任 `getWidth/Height()` 的回读值。
- 调整窗口后画面拉伸:同步更新 camera viewport、Canvas 和 UI 布局。
## API 快查
下列方法名来自当前 Squirrel 绑定;同一模块创建的辅助对象(例如 `World`、`Body`、`Source`)的方法也列在这里。
- `close()`、`getDPIScale()`、`getHeight()`、`getName()`、`getPixelHeight()`、`getPixelWidth()`、`getWidth()`、`getWindowSettings()`、`hasFocus()`、`setGraphics()`、`setSize()`、`setWindowSettings()`
## 使用要点
- 模块对象和它创建的资源对象应保存在全局或实体状态中,不要在每帧重复创建。
- 带 `update(dt)` 的系统应在 `eve_update` 调用;绘制方法应在 `eve_render` 调用。
- 参数约束、默认值和返回类型以对应模块头文件及 `addFunc` 绑定为准;本文 API 快查与当前源码同步生成。
**源码:** [`src/modules/window/`](../../../src/modules/window/)
**相关测试:** 在 [`test/`](../../../test/) 中搜索 `window`。
`hasFocus()` 在窗口线程返回当前窗口是否拥有输入焦点,可用于限制边缘滚动等后台不应响应的输入。