5 个不稳定版本
0.3.1 |
|
---|---|
0.3.0 | 2020年6月24日 |
0.2.1 | 2020年6月24日 |
0.1.1 | 2020年6月24日 |
#12 in #高度
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!");
}
}
}