差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| youtube:sfml-base [2024/02/28 18:26] – 削除 - 外部編集 (不明な日付) 127.0.0.1 | youtube:sfml-base [2024/03/03 07:15] (現在) – [Cargo.toml] freemikan | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== SFMLの基礎 ====== | ||
| + | |||
| + | 作成日: 2022-12-07 (水) | ||
| + | |||
| + | ===== src/main.rs ===== | ||
| + | |||
| + | <file rust> | ||
| + | // https:// | ||
| + | |||
| + | use sfml::{ | ||
| + | system::{ | ||
| + | Vector2f, | ||
| + | Clock, | ||
| + | Time | ||
| + | }, | ||
| + | window::{ | ||
| + | Event, | ||
| + | Style, | ||
| + | Key | ||
| + | }, | ||
| + | graphics::{ | ||
| + | RenderTarget, | ||
| + | RenderWindow, | ||
| + | Transformable, | ||
| + | Color, | ||
| + | Sprite, | ||
| + | Texture, | ||
| + | }, | ||
| + | SfBox | ||
| + | }; | ||
| + | |||
| + | struct ResourceManager { | ||
| + | player_texture: | ||
| + | } | ||
| + | |||
| + | fn load_resources() -> ResourceManager { | ||
| + | ResourceManager { | ||
| + | player_texture: | ||
| + | } | ||
| + | } | ||
| + | |||
| + | struct MoveFlags { | ||
| + | up: bool, | ||
| + | down: bool, | ||
| + | left: bool, | ||
| + | right: bool | ||
| + | } | ||
| + | |||
| + | struct Game<' | ||
| + | window: RenderWindow, | ||
| + | player: Sprite<' | ||
| + | player_speed: | ||
| + | move_flags: MoveFlags | ||
| + | } | ||
| + | |||
| + | impl<' | ||
| + | const FRAMES_PER_SECOND: | ||
| + | |||
| + | pub fn new(resman: &' | ||
| + | let window = RenderWindow:: | ||
| + | (640, 480), | ||
| + | "SFML Application", | ||
| + | Style:: | ||
| + | & | ||
| + | |||
| + | Game { | ||
| + | window, | ||
| + | player: Sprite:: | ||
| + | player_speed: | ||
| + | move_flags: MoveFlags { | ||
| + | up: false, | ||
| + | down: false, | ||
| + | left: false, | ||
| + | right: false | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | pub fn run(& | ||
| + | let mut clock = Clock:: | ||
| + | let mut time_since_last_update = Time::ZERO; | ||
| + | let time_per_frame = Time:: | ||
| + | |||
| + | while self.window.is_open() { | ||
| + | self.process_events(); | ||
| + | |||
| + | time_since_last_update += clock.restart(); | ||
| + | while time_since_last_update > time_per_frame { | ||
| + | time_since_last_update -= time_per_frame; | ||
| + | self.process_events(); | ||
| + | self.update(& | ||
| + | } | ||
| + | self.render(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | fn process_events(& | ||
| + | while let Some(event) = self.window.poll_event() { | ||
| + | match event { | ||
| + | Event:: | ||
| + | Event:: | ||
| + | if code == Key::Enter || code == Key::Escape { | ||
| + | self.window.close(); | ||
| + | } else { | ||
| + | self.handle_player_input(code, | ||
| + | }, | ||
| + | Event:: | ||
| + | self.handle_player_input(code, | ||
| + | _ => {} | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | fn update(& | ||
| + | let mut movement = Vector2f:: | ||
| + | |||
| + | if self.move_flags.up { | ||
| + | movement.y -= self.player_speed; | ||
| + | } | ||
| + | if self.move_flags.down { | ||
| + | movement.y += self.player_speed; | ||
| + | } | ||
| + | if self.move_flags.left { | ||
| + | movement.x -= self.player_speed; | ||
| + | } | ||
| + | if self.move_flags.right { | ||
| + | movement.x += self.player_speed; | ||
| + | } | ||
| + | |||
| + | self.player.move_(movement * delta_time.as_seconds()); | ||
| + | } | ||
| + | |||
| + | fn render(& | ||
| + | self.window.clear(Color:: | ||
| + | self.window.draw(& | ||
| + | self.window.display(); | ||
| + | } | ||
| + | |||
| + | fn handle_player_input(& | ||
| + | match key { | ||
| + | Key::W => self.move_flags.up = pressed, | ||
| + | Key::S => self.move_flags.down = pressed, | ||
| + | Key::A => self.move_flags.left = pressed, | ||
| + | Key::D => self.move_flags.right = pressed, | ||
| + | _ => {} | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | fn main() { | ||
| + | let resman = load_resources(); | ||
| + | let mut game = Game:: | ||
| + | game.run(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Cargo.toml ===== | ||
| + | |||
| + | |||
| + | <file toml> | ||
| + | [package] | ||
| + | name = " | ||
| + | version = " | ||
| + | edition = " | ||
| + | |||
| + | # See more keys and their definitions at https:// | ||
| + | |||
| + | [dependencies] | ||
| + | sfml = " | ||
| + | </ | ||
