javascript - 逻辑:使用传送门时防止无限循环
问题描述
在我目前正在开发的一款游戏中,有一些传送门,它们是成对链接的。每当玩家进入一个传送门时,它应该被传送到与他们刚进入的传送门链接的另一个传送门。问题是,一旦它被传送过来,另一个传送门会看到玩家正在与它碰撞,并将其传送回第一个传送门,然后将其送回,依此类推。这个项目的代码很大并且文件很多,但这里是最重要的:
(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);
}
}
这是修补它的一次尝试,但它仍然失败。我怎样才能让玩家在碰撞时通过第一个,第二个出来,并且在玩家离开然后重新开始之前不会回到第一个?
编辑:经过一番搜索,这个问题最常给出的答案是“当玩家传送到那里时,将玩家移到第二个传送门的范围之外”。这在我的情况下不起作用,因为当玩家更新时,他的位置会根据自上一帧以来的时间量而变化。在一个完美的世界里,这没问题,但因为它并不完美,玩家不能可靠地在一个点上。此外,如果我将它完全移出碰撞箱会看起来很奇怪,所以这也不起作用。
解决方案
推荐阅读
- javascript - 当用户尝试移出角度 6 中的任何组件时如何提示用户
- javascript - Angular 5子组件公开属性但不公开方法
- accessibility - 让屏幕阅读器说按钮 alt-attribute 而不是 innerText
- c# - 错误:cs0131 赋值的左侧必须是变量、属性或索引器
- r - 运行时可自定义设置
- amazon-web-services - AWS S3 存储桶策略安全性
- php - PHP 切换语法
- javascript - 如何使用角度删除使用嵌套循环的表行
- excel - VSTS 代理从 Powershell 运行的 Excel 因未知原因而失败
- c++ - 英语到莫尔斯电码转换器