#碰撞 #基本 #边界 #对象 #极端 #宽度 #高度

basic-collision

极其简单的碰撞库,只需直接使用

5 个不稳定版本

0.3.1 2020年6月24日
0.3.0 2020年6月24日
0.2.1 2020年6月24日
0.1.1 2020年6月24日

#12 in #高度

MIT 许可协议

4KB

此包旨在成为一个极其简单的碰撞库。目前仅提供AABB碰撞功能。有关使用方法,请参阅以下示例。基本上,您只需为所有希望具有碰撞功能的结构体实现 Object 特性。从 Object 特性中,您需要实现 fn boundary(&self) -> Boundary 函数。然后,您的结构体将包含 fn does_collide(&self, objects: &[Box<dyn Object>]) -> bool 函数。

use basic_collision::*;

#[derive(Debug)]
pub struct Block {
    x: f32,
    y: f32,
    width: f32,
    height: f32,
}

impl Block {
    pub fn new(x: f32, y: f32, width: f32, height: f32) -> Block {
        Block {
            x, y, width, height
        }
    }
}

impl Object for Block {
    fn boundary(&self) -> Boundary {
        Boundary::new(self.x, self.y, self.width, self.height)
    }
}

fn main() {
    let blocks: Vec<Box<dyn Object>> = vec![
        Box::new(Block::new(100., 150., 60., 50.)),
        Box::new(Block::new(150., 150., 40., 50.)),
        Box::new(Block::new(200., 150., 60., 50.)),
    ];
    for block in blocks.iter() {
        if block.does_collide(&blocks[..]) {
            println!("Collision occurred!");
        }
    }
}

无运行时依赖