简单易懂!FXGL Java游戏引擎教学实战07期:碰撞检测实例(让大家都能轻松上手) - 第二部分 实现篇
最编程
2024-07-23 21:58:20
...
1.在实体工厂中增加两个实体的创建逻辑,我为他们增加了半径12的触发碰撞盒子,同时开启了碰撞事件监听。
@Spawns("player")
public Entity player(SpawnData data) {
Entity entity = FXGL.entityBuilder(data)
.type(EntityType.PLANE)
.with(new MoveComponent())
.bbox(new HitBox(new Point2D(0,0) , BoundingShape.circle(12)))
.collidable()
.build();
return entity;
}
@Spawns("npc")
public Entity npc(SpawnData data) {
ImageView imageView = new ImageView("assets/textures/player-drawing.png");
imageView.setFitHeight(64);
imageView.setFitWidth(64);
Entity entity = FXGL.entityBuilder(data)
.type(EntityType.NPC)
.view(imageView)
.bbox(new HitBox(new Point2D(0, 0) , BoundingShape.circle(40)))
.collidable()
.build();
return entity;
}
2.继承CollisionHandler,编写 PlayerCollisionHandler
public class PlayerCollisionHandler extends CollisionHandler {
/**
* 基类需要提供有参构造。制定两个实体类型
*/
public PlayerCollisionHandler() {
super(EntityType.PLANE, EntityType.NPC);
}
/**
* 初次碰撞时触发
*/
@Override
protected void onCollisionBegin(Entity player, Entity btn) {
//模拟点击按键p
FXGL.getInput().mockKeyPress(KeyCode.P);
}
}
在app类中重写方法,初始化物理
/**
* 初始化物理事件
*/
@Override
protected void initPhysics() {
FXGL.getPhysicsWorld().addCollisionHandler(new PlayerCollisionHandler());
}
当接近人物时,触发弹窗事件!
当然,我们可以稍稍修改此处,增加一个新的ui提示。并且改用增加点击事件的方式让交互更加具有动感。
靠近时在人物上方显示一个问号,并且添加给任务右键触发聊天框事件。离开时移除问号,并且移除右键点击事件。
具体代码将会在后续优化中发布(最近有点忙,更新可能会比较慢。)
您的支持是我最大的动力,如果有什么疑问,欢迎在评论区指出。如果觉得不错,请点个赞吧~
回主目录