Rust 调用sprite::Scene::draw时类型不匹配

Rust 调用sprite::Scene::draw时类型不匹配,rust,rust-piston,Rust,Rust Piston,我正在使用活塞和雪碧进行一个个人项目。调用此方法: scene.draw(c.transform, g); 我试图调用一个方法来绘制所有内容。 我首先尝试: draw<G: Graphics>(&self, c: &Context, g: &mut G, scene: &mut Scene) 然后编译器告诉我类型需要实现traitImageSize,因此我尝试了以下方法: draw<G: Graphics, S: ImageSize>(

我正在使用活塞和雪碧进行一个个人项目。调用此方法:

scene.draw(c.transform, g);
我试图调用一个方法来绘制所有内容。 我首先尝试:

draw<G: Graphics>(&self, c: &Context, g: &mut G, scene: &mut Scene)
然后编译器告诉我类型需要实现trait
ImageSize
,因此我尝试了以下方法:

draw<G: Graphics, S: ImageSize>(&self, c: &Context, g: &mut G, scene: &mut Scene<S>)
draw(&self,c:&Context,g:&mut g,scene:&mut scene)
然后我得到了这个错误:

error[E0271]:类型不匹配解析`::纹理==S`
-->src/game.rs:38:15
|
38 |场景绘制(c.transform,g);
|^^^^应为关联类型,找到类型参数
|
=注意:应为类型“::纹理`
找到类型'S`
我不明白编译器想说什么。
Scene
的完整类型是
sprite::Scene
但是我不想把它写在方法的签名中

那么,我有两个问题:

  • 编译器想告诉我什么
  • 如何将场景传递给方法

  • draw
    的定义是:

    impl<I: ImageSize> Scene<I> {
        fn draw<B: Graphics<Texture = I>>(&self, t: Matrix2d, b: &mut B)
    }
    
    impl<I: ImageSize> Scene<I> {
        fn draw<B: Graphics<Texture = I>>(&self, t: Matrix2d, b: &mut B)
    }
    
    extern crate sprite;
    extern crate graphics;
    
    use graphics::{Graphics, ImageSize, Context};
    use sprite::Scene;
    
    struct X;
    impl X {
        fn draw<G>(&self, c: &Context, g: &mut G, scene: &mut Scene<G::Texture>)
        where
            G: Graphics,
        {
            scene.draw(c.transform, g);
        }
    }
    
    fn main() {}