光标定制
光标由 CursorOptions 组件控制(挂在窗口实体上)。可以设置可见性、抓取模式和图标。
rust
use bevy::prelude::*;
use bevy::window::{CursorGrabMode, CursorOptions};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, toggle_cursor)
.run();
}
fn setup() {
info!("光标定制示例——按 G 切换抓取模式,按 H 隐藏/显示光标");
}
fn toggle_cursor(
keyboard: Res<ButtonInput<KeyCode>>,
mut cursor: Single<&mut CursorOptions>,
mut grabbed: Local<bool>,
) {
if keyboard.just_pressed(KeyCode::KeyG) {
*grabbed = !*grabbed;
cursor.grab_mode = if *grabbed {
CursorGrabMode::Locked
} else {
CursorGrabMode::None
};
info!("抓取模式: {:?}", cursor.grab_mode);
}
if keyboard.just_pressed(KeyCode::KeyH) {
cursor.visible = !cursor.visible;
info!("光标可见: {}", cursor.visible);
}
}Listing 35-3:光标定制——抓取模式与可见性切换
CursorOptions 字段
| 字段 | 类型 | 说明 |
|---|---|---|
visible | bool | 光标是否可见 |
grab_mode | CursorGrabMode | 抓取模式 |
hit_test | bool | 是否响应鼠标命中测试 |
CursorGrabMode
| 变体 | 行为 |
|---|---|
None | 不抓取,光标自由移动 |
Confined | 光标限制在窗口内 |
Locked | 光标锁定在窗口中心(FPS 游戏常用) |
自定义光标图标
Bevy 支持系统光标图标和自定义图片光标:
SystemCursorIcon:系统内置图标(Default、Pointer、Wait、Text 等)CustomCursor::Image(...):用图片做光标(需要custom_cursorfeature)
光标图标通过 CursorIcon 组件设置。可以在运行时切换:
rust
*cursor_icon = CursorIcon::from(SystemCursorIcon::Pointer);