如何更改SpriteComponent的颜色?

问题描述

我有一个查询系统,可以找到鼠标悬停在其中的对象。这不是一个按钮,但是,我希望更改颜色。我不确定从哪里开始。我将查询什么属性以及如何更改它?目前,我有以下内容

fn mouse_move(mut commands: Commands,cursor: Res<Cursor>,mut query: Query<(&Translation,&mut Sprite,&Box,&Name)>) 
{
    for (translation,mut sprite,_Box,name) in &mut query.iter() {
        let cursor_tup = translate_cursor ((cursor.0,cursor.1));
        let cursor_vec = Vec3::new(cursor_tup.0,cursor_tup.1,0.0);
        if collides(cursor_vec,Vec2::new(1.0,1.0),translation.0,sprite.size) {
            println!("{}",name.0);
        }
    }
}

解决方法

fn mouse_move(mut commands: Commands,cursor: Res<Cursor>,mut materials: ResMut<Assets<ColorMaterial>>,mut query: Query<(&Translation,&mut Sprite,&Box,&Name,&mut Handle<ColorMaterial>)>) 
{
    for (translation,mut sprite,_box,name,color) in &mut query.iter() {
        let cursor_tup = translate_cursor ((cursor.0,cursor.1));
        let cursor_vec = Vec3::new(cursor_tup.0,cursor_tup.1,0.0);
        if collides(cursor_vec,Vec2::new(1.0,1.0),translation.0,sprite.size) {
            println!("{}",name.0);
            let mut color_mat = materials.get_mut(&color).unwrap();
            color_mat.color = Color::rgb(1.0,1.0,1.0);
        }
    }
}

因此,您必须采用与实体关联的物料手柄,然后必须获取 {{1}中的ColorMaterial

当前颜色应该变成白色。