首页 > 解决方案 > 逻辑:使用传送门时防止无限循环

问题描述

在我目前正在开发的一款游戏中,有一些传送门,它们是成对链接的。每当玩家进入一个传送门时,它应该被传送到与他们刚进入的传送门链接的另一个传送门。问题是,一旦它被传送过来,另一个传送门会看到玩家正在与它碰撞,并将其传送回第一个传送门,然后将其送回,依此类推。这个项目的代码很大并且文件很多,但这里是最重要的:

(Javascript,忽略 frame 和 pause vaibles,那些是动画)


export class Portal extends gameObject{
    constructor(x, y, size, id){
        super(x, y, size);
        this.currentFrame = 0;//updated when (below) > (2 below)
        this.countingFrame =0;//update every time;
        this.pause = 3;//frames between frames
        this.id = id;
        this.justVisited = false;
    }
    update(player, portals){
        if(this.countingFrame >= this.pause){
            this.currentFrame = (this.currentFrame + 1) % 4;
            this.countingFrame = 0;
        }else{
            this.countingFrame ++;
        }
        if(super.checkPlayerCollision(player)){
            this.justVisited = true;
            for(let i in portals){
                if(this.id === portals[i].id && portals[i] !== this && !portals[i].justVisited){
                    player.x = portals[i].x;
                    player.y = portals[i].y;
                }
            }
        }else{
            for(let i in portals){
                if(this.id === portals[i].id && portals[i] !== this && portals[i].justVisited){
                    this.justVisited = false;
                }
            }
        }
    }
    render(canvas, spritesheet){
        super.render(canvas, spritesheet, this.currentFrame , 26);
    }
}

这是修补它的一次尝试,但它仍然失败。我怎样才能让玩家在碰撞时通过第一个,第二个出来,并且在玩家离开然后重新开始之前不会回到第一个?

编辑:经过一番搜索,这个问题最常给出的答案是“当玩家传送到那里时,将玩家移到第二个传送门的范围之外”。这在我的情况下不起作用,因为当玩家更新时,他的位置会根据自上一帧以来的时间量而变化。在一个完美的世界里,这没问题,但因为它并不完美,玩家不能可靠地在一个点上。此外,如果我将它完全移出碰撞箱会看起来很奇怪,所以这也不起作用。

标签: javascriptlogic

解决方案


推荐阅读