3个稳定版本
3.0.0 | 2020年12月24日 |
---|---|
2.0.0 | 2019年12月24日 |
1.0.0 | 2018年12月23日 |
在游戏开发中排名第686
每月下载量32次
37KB
component_group
此crate定义了ComponentGroup
特质。此特质用于简化管理一组specs::Component
实例。这在您有几个经常一起创建、读取和更新的组件时非常有用。您可以使用此特质轻松地在specs::World
实例之间移动整个组件组。
此特质通过将所有逻辑集中在同一位置,而不是让您在应用程序中同步重复代码,从而减少了您每次向组中添加组件时需要做出的更改。
如果组中的每个组件都实现了Clone
特质,则可以自动推导出ComponentGroup
特质。这消除了您可能需要编写的任何样板代码。
有关创建此特质的动机和使用方法,请参阅文档。
// Don't forget to add the component_group crate to your Cargo.toml file!
use component_group::ComponentGroup;
use specs::{World, Component, VecStorage, HashMapStorage};
use specs_derive::Component;
// These components are just for demonstration purposes. You should swap them
// out for your own. Components need to be Clone to use the automatic derive.
#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Position {x: i32, y: i32}
#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Velocity {x: i32, y: i32}
#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Health(u32);
#[derive(Debug, Clone, Component)]
#[storage(HashMapStorage)]
pub struct Animation {frame: usize}
// This is all of the code you need to write to define the group and its operations!
#[derive(ComponentGroup)]
struct PlayerComponents {
position: Position,
velocity: Velocity,
health: Health,
// This optional component is allowed to not be present
animation: Option<Animation>,
}
// Now you can easily add all of these components to an entity, load them all
// from the world, or even update them all at once!
依赖项
~4.5MB
~88K SLoC