Closed7

作業メモ:bevy 0.8 → 0.9

hyoihyoi

Resourceに#[derive( Resource )]が必須に。

0.8
//ゲームの記録のResource
pub struct Record
{   pub stage   : i32,        //ステージ数
    pub score   : i32,        //スコア
    pub hi_score: i32,        //ハイスコア
}
0.9
#[derive( Resource )]
pub struct Record
{   pub stage   : i32,        //ステージ数
    pub score   : i32,        //スコア
    pub hi_score: i32,        //ハイスコア
}

情報元
Newsの該当箇所
マイグレガイドの該当箇所

hyoihyoi

NodeBundleの中身が変わっている。
とりあえず自作ピコゲーに関係するところでは
UiColorBackgroundColorへ変更されていた。

0.8
fn hidden_frame( style: Style ) -> NodeBundle
{   let color = UiColor ( Color::NONE );
    NodeBundle { style, color, ..default() }
}
0.9
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

hyoihyoi

WindowDescriptorの設定変更は、Resourceで行うのではなく
DefaultPluginsの一部になった。
Plugins own their settings. Rework PluginGroup trait.

0.8
        let window = WindowDescriptor
        {   title: APP_TITLE.to_string(),
            ..default()
        };
        app
        .insert_resource( window )
        .add_plugins( DefaultPlugins )
        ;
0.9
        let window = WindowDescriptor
        {   title: APP_TITLE.to_string(),
            ..default()
        };
        app
        .add_plugins( DefaultPlugins.set( WindowPlugin { window, ..default() } ) )
        ;
hyoihyoi

Bevy UIのY軸が逆転した影響で、
Web CSSに準じていたjustify_contentも逆さまになった。

0.8
        Style
        {   justify_content: JustifyContent::FlexEnd, //画面の上端
            ..default()
        };

        Style
        {   justify_content: JustifyContent::FlexStart, //画面の下端
            ..default()
        };
0.9
        Style
        {   justify_content: JustifyContent::FlexStart, //画面の上端
            ..default()
        };

        Style
        {   justify_content: JustifyContent::FlexEnd, //画面の下端
            ..default()
        };
hyoihyoi

.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が出る。

0.8
    cmds
    .spawn_bundle( SpriteBundle::default() )
    .insert( Sprite { color, custom_size, ..default() } )
    .insert( Transform::from_translation( pixel.extend( DEPTH_SPRITE_CHASER ) ) )
    .insert( chaser )
    ;
0.9
    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

このスクラップは2022/11/16にクローズされました