欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

简单易懂!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提示。并且改用增加点击事件的方式让交互更加具有动感。
靠近时在人物上方显示一个问号,并且添加给任务右键触发聊天框事件。离开时移除问号,并且移除右键点击事件。

具体代码将会在后续优化中发布(最近有点忙,更新可能会比较慢。)

您的支持是我最大的动力,如果有什么疑问,欢迎在评论区指出。如果觉得不错,请点个赞吧~

回主目录