PS:禁止拷贝形式转载,转载请以URL形式
PS:FXGL 准备写成一个系列,所以在该系列未完成前,该系列文章除了目录会被修改其他内容均可能被删改。
1. 简介
Entity 可以看成一个容器可以包含一系列 Component 集合,根据开发者创建的不同 Entity 就可以表达在FXGL 游戏引擎中展示不同效果,本章讲解如何在FXGL中去操作管理实体
2. 管理实体
build():表示创建实体buildAndAttach():表示创建并且添加实体到游戏世界
@Override
protected void initGame() {
// ----------------------- 一般写法
//创建实体
Entity entity = FXGL.entityBuilder()
.view(new Rectangle(20, 20, Color.BLUE))
.at(200,200)
.build();
//添加实体
FXGL.getGameWorld().addEntity(entity);
//2S后删除实体
FXGL.runOnce(entity::removeFromWorld, Duration.seconds(2));
// ----------------------- 简要写法
FXGL.entityBuilder()
.view(new Rectangle(20, 20, Color.BLUE))
.at(200,200)
//添加一个过期组件,2S自动清楚该组件
.with(new ExpireCleanComponent(Duration.seconds(2)))
//创建后并添加到世界
.buildAndAttach();
}
3. EntityFactory管理实体
@Spawns("entity,entity1"):多个名称可以用逗号隔开,表示entity,entity1这两个名称都可以用来创建同一个实体
@Override
protected void initGame() {
//添加工厂
FXGL.getGameWorld().addEntityFactory(new CustomEntityFactory());
//普通写法
//Entity entity1 = FXGL.getGameWorld().create("entity",new SpawnData(200,200));
//FXGL.getGameWorld().addEntity(entity1);
//简要写法
FXGL.spawn("entity", 300, 200);
}
public class CustomEntityFactory implements EntityFactory {
//注解的名称和创建时传递的名称对应
@Spawns("entity")
//@Spawns("entity,entity1")
public Entity newEntity(SpawnData spawnData) {
return FXGL.entityBuilder(spawnData)
.with(new ExpireCleanComponent(Duration.seconds(2)))
.view(new Rectangle(20, 20, Color.GREEN))
.build();
}
}
3.1 SpawnData参数传递
new SpawnData():可以看成一个MAP,创建时可以自定义内容然后传递给工厂方法进行取值
@Override
protected void initGame() {
FXGL.getGameWorld().addEntityFactory(new CustomEntityFactory());
//传递一个time 属性,控制其删除时间
FXGL.spawn("entity",new SpawnData(200,200).put("time",2));
}
public class CustomEntityFactory implements EntityFactory {
@Spawns("entity")
public Entity newEntity(SpawnData spawnData) {
//获取time 属性
int time = spawnData.get("time");
return FXGL.entityBuilder(spawnData)
.with(new ExpireCleanComponent(Duration.seconds(time)))
.view(new Rectangle(20, 20, Color.GREEN))
.build();
}
}