以前紹介したGUIクレートの中でbevyが個人的に使いやすかったので、GUIアプリを作成しようと試みてます。
その中でマウスの座標の値の取り方についてメモしておきます。
参考情報
bevy
https://github.com/bevyengine/bevy
ほぼsampleから抜粋して、構造体になっている部分の値を取得します。
必要なクレートは以下です。
Cargo.toml
[dependencies]
bevy = { git = "https://github.com/bevyengine/bevy" }
gfx = "*"
mainソースは以下です。
内容としては、Window上でマウスを操作して、マウスのクリックした方向(Left、Right)とクリックと離したことと座標をコンソールに表示してくれます。
cursor_positionはx座標とy座標を両方とも表示して、x_cursor_positionとy_cursor_positionはそれぞれの座標を表示してくれます。
main.rs
use bevy::{
input::mouse::{MouseButtonInput},//, MouseMotion, MouseWheel},
prelude::*,
window::CursorMoved,
};
fn main() {
App::build()
.add_plugins(DefaultPlugins)
.add_system(print_mouse_events_system.system()) //mouse event
.run();
}
fn print_mouse_events_system(
mut mouse_button_input_events: EventReader<MouseButtonInput>,
mut cursor_moved_events: EventReader<CursorMoved>,
) {
for event in mouse_button_input_events.iter() {
let button_left_right = event.button;
let button_press_release = event.state;
println!("{:?}", button_left_right);
println!("{:?}", button_press_release);
for _cursor_event in cursor_moved_events.iter() {
let cursor_position = _cursor_event.position;
println!("{:?}", cursor_position);
let x_cursor_position = cursor_position[0];
let y_cursor_position = cursor_position[1];
println!("{:?}", x_cursor_position);
println!("{:?}", y_cursor_position);
};
}
}
表示例は以下です。
terminal
% cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.18s
Running `target/debug/mouse-event`
Left
Pressed
Vec2(235.99947, 356.80524)
235.99947
356.80524
Left
Released
Vec2(235.99945, 356.80524)
235.99945
356.80524
Right
Pressed
Vec2(877.01013, 352.71057)
877.01013
352.71057
Right
Released
Vec2(825.2455, 321.8847)
825.2455
321.8847
拾った座標からobjectを作成するということは後ほど紹介予定です。
以上