use rustraight::prelude::*;
fn asset(rel: &str) -> String {
format!("{}/検証素材/{}", env!("CARGO_MANIFEST_DIR"), rel)
}
fn main() {
init(WindowConfig {
title: String::from("03_sprites"),
width: 900,
height: 500,
screen_width: 900,
screen_height: 500,
..Default::default()
});
let sprite = load_image(&asset("images/sprite.png"));
let tiles = load_div_image(&asset("images/spritesheet.png"), 4, 32, 32);
let photo = load_image(&asset("images/photo.jpg"));
let missing = load_image(&asset("images/does_not_exist.png"));
let (sw, sh) = image_size(sprite);
let (mw, mh) = image_size(missing);
let mut freed = false;
let mut flip_x = false;
let mut flip_y = false;
while advance_frame() {
draw_fill(MAIN_SCREEN, Color::rgb(15, 15, 20));
draw_text(MAIN_SCREEN, 10, 6, format!("sprite.png size: {sw}x{sh} 代替スプライト size: {mw}x{mh}"), Color::WHITE);
draw_text(MAIN_SCREEN, 10, 24, "F: free_image(sprite) X/Y: draw_image_exのflip切替", Color::YELLOW);
draw_image(MAIN_SCREEN, 20, 60, sprite);
draw_text(MAIN_SCREEN, 20, 140, "draw_image (等倍)", Color::WHITE);
if is_just_pressed(KeyCode::KeyX) { flip_x = !flip_x; }
if is_just_pressed(KeyCode::KeyY) { flip_y = !flip_y; }
let angle = (elapsed_time() as f32 * 60.0) % 360.0;
let alpha = ((elapsed_time().sin() as f32) * 0.5 + 0.5).clamp(0.2, 1.0);
draw_image_ex(MAIN_SCREEN, 160, 60, sprite, DrawImageParams {
scale_x: 2.0, scale_y: 2.0,
rotation: angle,
alpha,
flip_x, flip_y,
});
draw_text(MAIN_SCREEN, 160, 230, "draw_image_ex (2倍/回転/アルファ点滅/反転)", Color::WHITE);
for (i, tile) in tiles.iter().enumerate() {
draw_image(MAIN_SCREEN, 20 + i as i32 * 40, 280, *tile);
}
draw_text(MAIN_SCREEN, 20, 320, "load_div_image (4タイル)", Color::WHITE);
draw_image_ex(MAIN_SCREEN, 20, 360, missing, DrawImageParams {
scale_x: 4.0, scale_y: 4.0, rotation: 0.0, alpha: 1.0, flip_x: false, flip_y: false,
});
draw_text(MAIN_SCREEN, 20, 400, "存在しないパス→代替スプライト(4倍)", Color::WHITE);
draw_image_ex(MAIN_SCREEN, 600, 60, photo, DrawImageParams {
scale_x: 0.3, scale_y: 0.3, rotation: 0.0, alpha: 1.0, flip_x: false, flip_y: false,
});
draw_text(MAIN_SCREEN, 600, 230, "photo.jpg (JPEGデコード, 0.3倍)", Color::WHITE);
if is_just_pressed(KeyCode::KeyF) && !freed {
free_image(sprite);
freed = true;
}
draw_text(MAIN_SCREEN, 20, 440, format!("sprite handle freed: {freed}"), if freed { Color::RED } else { Color::GREEN });
}
}