FXGL游戏开发-碰撞处理
在【FXGL游戏开发-加载游戏资源】这章节中,游戏世界已经存在两辆坦克了,现在给这两两辆坦克加上碰撞效果,即当玩家的坦克(蓝色)撞上敌军坦克(绿色)时,玩家的坦克自动消失。
FXGL 要使 Entity 有碰撞效果,构建实体时,必须使用 viewWithBBox(),而不能使用 view(),因为 viewWithBBox() 才会构建有边界的 Entity,这样才能实现碰撞效果。
另外,需要给 Entity 添加碰撞组件 CollidableComponent,下面是完整的代码实现:
public class CollisionGameApp extends GameApplication {
@Override
protected void initSettings(GameSettings settings) {
settings.setTitle("Hi IT青年 Game");
settings.setWidth(480);
settings.setHeight(320);
settings.setVersion("0.1");
}
private enum Type {
PLAYER, ENEMY
}
private Entity player;
@Override
protected void initGame() {
player = FXGL.entityBuilder()
.type(Type.PLAYER)
.at(10, 120)
.viewWithBBox("tank.png")
.with(new CollidableComponent(true))
.buildAndAttach();
Entity enemy = FXGL.entityBuilder()
.type(Type.ENEMY)
.at(280, 120)
.viewWithBBox("tank2.png")
.with(new CollidableComponent(true))
.buildAndAttach();
enemy.setScaleX(-1);
}
@Override
protected void initInput() {
FXGL.onKey(KeyCode.A, () -> player.translateX(-5));
FXGL.onKey(KeyCode.D, () -> player.translateX(5));
}
@Override
protected void initPhysics() {
FXGL.getPhysicsWorld().addCollisionHandler(new CollisionHandler(Type.PLAYER, Type.ENEMY) {
@Override
protected void onCollisionBegin(Entity e1, Entity e2) {
e1.removeFromWorld();
}
});
}
public static void main(String[] args) {
launch(args);
}
}
上面的例子中,玩家和敌军的坦克分别指定了类型(type),使用 viewWithBBox() 构建带边界的 Entity ,并且添加碰撞组件 CollidableComponent(true),最后在 initPhysics() 处理碰撞事件,当两辆坦克撞击时,玩家坦克从游戏世界中移除。
运行效果:
这样,玩家坦克撞击敌方坦克时,就会从游戏世界消失。
===========================================================================
关注公众号,阅读更多文章。
本文来自博客园,作者:HiIT青年,原文链接:https://www.cnblogs.com/itqn/p/15200265.html,禁止转载。
更多文章可以扫描小程序码进行查看,下面是小程序部分文章列表截图。