作業メモ:bevy 0.8 → 0.9
0.9ではstagelessがまだ来ないので、自作2Dピコゲーに影響するのは、
1. Bevy ECS に対する各種改良
2. Bevy UIの座標軸の変更(Bevy UI: The Origin Is Now In The Top Left)
の2つのような気がする。
個人的にはExample: Gamepad Viewerも嬉しい。ゲームパッドの勉強したかったので。
Resourceに#[derive( Resource )]
が必須に。
//ゲームの記録のResource
pub struct Record
{ pub stage : i32, //ステージ数
pub score : i32, //スコア
pub hi_score: i32, //ハイスコア
}
#[derive( Resource )]
pub struct Record
{ pub stage : i32, //ステージ数
pub score : i32, //スコア
pub hi_score: i32, //ハイスコア
}
bevy::time::Timer::from_secondsの第二引数が
booleanからbevy::time::TimerModeへ変わった。
timer : Timer::from_seconds( 1.0, false ),
timer : Timer::from_seconds( 1.0, TimerMode::Once ),
NodeBundle
の中身が変わっている。
とりあえず自作ピコゲーに関係するところでは
UiColorがBackgroundColorへ変更されていた。
fn hidden_frame( style: Style ) -> NodeBundle
{ let color = UiColor ( Color::NONE );
NodeBundle { style, color, ..default() }
}
fn hidden_frame ( style: Style ) -> NodeBundle
{ let background_color = BackgroundColor ( Color::NONE );
NodeBundle { style, background_color, ..default() }
}
0.8: bevy::ui::entity::NodeBundle
0.9: bevy::ui::node_bundles::NodeBundle
WindowDescriptor
の設定変更は、Resourceで行うのではなく
DefaultPluginsの一部になった。
Plugins own their settings. Rework PluginGroup trait.
let window = WindowDescriptor
{ title: APP_TITLE.to_string(),
..default()
};
app
.insert_resource( window )
.add_plugins( DefaultPlugins )
;
let window = WindowDescriptor
{ title: APP_TITLE.to_string(),
..default()
};
app
.add_plugins( DefaultPlugins.set( WindowPlugin { window, ..default() } ) )
;
Bevy UIのY軸が逆転した影響で、
Web CSSに準じていたjustify_content
も逆さまになった。
Style
{ justify_content: JustifyContent::FlexEnd, //画面の上端
..default()
};
Style
{ justify_content: JustifyContent::FlexStart, //画面の下端
..default()
};
Style
{ justify_content: JustifyContent::FlexStart, //画面の上端
..default()
};
Style
{ justify_content: JustifyContent::FlexEnd, //画面の下端
..default()
};
.spawn()
が便利になった。(.spawn_bundle()
は不要になった)
これまでメソッドチェーンで設定していたBundleやComponentを
.spawn()
の引数で一回で設定できるようになった。(内部的な効率もいいらしい)
複数BundleやComponentがある場合、タプルでまとめて1つにする。
ただし、Bundleの中のComponentと個別のComponentがぶつかると
実行時パニックが発生するようだ??
thread 'main' panicked at 'Bundle (…) has duplicate components', …\bevy_ecs-0.9.0\src\bundle.rs:746:5
そんな時はこれまで通りメソッドチェーンでComponentをinsertすると回避できる。
この制限のために意外と.insert()
が残る‥‥。
なお.spawn_bundle()
はまだ動くがwarningが出る。
cmds
.spawn_bundle( SpriteBundle::default() )
.insert( Sprite { color, custom_size, ..default() } )
.insert( Transform::from_translation( pixel.extend( DEPTH_SPRITE_CHASER ) ) )
.insert( chaser )
;
cmds
.spawn( ( SpriteBundle::default(), chaser ) )
//以下のSpriteとTransformはSpriteBundleのメンバーにいるので後からinsertする
.insert( Sprite { color, custom_size, ..default() } )
.insert( Transform::from_translation( pixel.extend( DEPTH_SPRITE_CHASER ) ) )
;
情報元
Improved Entity / Component APIs
Spawn now takes a Bundle