Rust 在bevy游戏引擎中是否有检测精灵碰撞的方法?
目前,我使用两个物体(彗星和飞船)的位置来检测它们是否碰撞Rust 在bevy游戏引擎中是否有检测精灵碰撞的方法?,rust,game-development,bevy,Rust,Game Development,Bevy,目前,我使用两个物体(彗星和飞船)的位置来检测它们是否碰撞 fn collision_detection( comets: Query<&Transform, With<Comet>>, mut ships: Query<(&Transform, &mut ShipStatus), With<Ship>>, ) { for comet in comets.iter() { for (s
fn collision_detection(
comets: Query<&Transform, With<Comet>>,
mut ships: Query<(&Transform, &mut ShipStatus), With<Ship>>,
) {
for comet in comets.iter() {
for (ship, mut status) in ships.iter_mut() {
if comet.translation.x < ship.translation.x + 80.0 && comet.translation.y < ship.translation.y + 80.0
&& comet.translation.x > ship.translation.x - 80.0 && comet.translation.y > ship.translation.y - 80.0 {
status.dead = true;
}
}
}
}
fn碰撞检测(
彗星:查询,
mut船舶:查询,
) {
用于彗星中的彗星。iter(){
用于船舶中的(船舶,mut状态)。iter_mut(){
如果comet.translation.xship.translation.x-80.0&&comet.translation.y>ship.translation.y-80.0{
status.dead=真;
}
}
}
}
但是必须有更好的方法来做到这一点。贝维目前没有一个完整的碰撞系统。除非在创建后的几个月内进行了扩展: 物理 许多游戏需要碰撞检测和物理。我计划用
nphysics
/ncollide
作为第一个后端构建一个可插入的物理接口
幸运的是,这个简单的示例实际上提供了一个简单的AABB碰撞检测
use bevy::sprite::collide_aabb::collide;
let ship_size = Vec2::new(80.0, 80.0);
let comet_size = Vec2::new(0.0, 0.0);
for comet in comets.iter() {
for (ship, mut status) in ships.iter_mut() {
if collide(ship.translation, ship_size, comet.translation, comet_size).is_some() {
status.dead = true;
}
}
}