Java Swing游戏开发学习18

内容来自RyiSnow视频讲解

这一节讲的是Event II(Advanced Mechanics),事件2(高级技巧)

前言

作者收到一个评论:当玩家不断穿过坑时,他们会不断受到伤害并收到消息,我们能做到只有当他们离开并回到坑中时才会发生事件吗?

针对这个评论增加了这一节讲解。

实现

One time only event只发生一次的事件

  新建一个类EventRect扩展矩形类,增加一个boolean变量,eventDone,当变量值为false触发事件,然后变量值修改为true,即可实现。

public void damagePit(int col, int row, int gameState) {
	gp.gameState = gameState;
    gp.ui.currentDialogue = "You fall into a pit!";
    gp.player.life -= 1;
    eventRect[col][row].eventDone = true;
}

多次触发,但是需要符合某条件才触发的事件

  这里还是以碰到陷阱为例,当走到陷阱tile瓦片,触发掉血事件,如果在陷阱瓦片继续走动,不再触发;当player离开陷阱tile超过一个tile瓦片距离,再回来的时候才再次触发。

public void checkEvent() {
        int xDistance = Math.abs(gp.player.worldX - previousEventX);
        int yDistance = Math.abs(gp.player.worldY - previousEventY);
        int distance = Math.max(xDistance, yDistance);
        if (distance > gp.tileSize) {
            canTouchEvent = true;
        }

        if (canTouchEvent) {
            if (hit(27, 16, "right")) {
                //event happens
                damagePit(27, 16, gp.dialogueState);
            }
        }
}

这里以落入陷阱为例讲解,在治愈池那个判断上面并没有加这个逻辑,当然可以根据自己的需要增加。

最后

事件已经更灵活、更加可定制化,作者为自己把事件讲的有点冗余感到抱歉,希望大家喜欢这个新的事件判断系统。下一节会回答一个新的评论,修复几个bug,与NPC交互相关的。

代码

参考第6篇文章最后,可以使用git clone或直接下载获得完整项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值