内容来自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或直接下载获得完整项目