Skip to content

光标定制

光标由 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 字段

字段类型说明
visiblebool光标是否可见
grab_modeCursorGrabMode抓取模式
hit_testbool是否响应鼠标命中测试

CursorGrabMode

变体行为
None不抓取,光标自由移动
Confined光标限制在窗口内
Locked光标锁定在窗口中心(FPS 游戏常用)

自定义光标图标

Bevy 支持系统光标图标和自定义图片光标:

  • SystemCursorIcon:系统内置图标(Default、Pointer、Wait、Text 等)
  • CustomCursor::Image(...):用图片做光标(需要 custom_cursor feature)

光标图标通过 CursorIcon 组件设置。可以在运行时切换:

rust
*cursor_icon = CursorIcon::from(SystemCursorIcon::Pointer);