GameObject跟随另一个GameObject平滑Java

GameObject跟随另一个GameObject平滑Java,java,Java,所以在我的游戏中,我有一个玩家,他手里拿着一个灯泡。(灯泡是像那个玩家一样的自己的游戏对象)现在我将灯泡的位置设置为玩家的位置,这样灯泡就放在了玩家的手里。我想做的是,当球员移动时,灯泡跟随球员,有一点延迟 public void tick() { bulbX = playerX + 20; bulbY = playerY - 3; } 有什么想法吗 非常感谢,Maxi将其设置为使灯泡始终朝播放器移动 public void tick() { bulbX += (pla

所以在我的游戏中,我有一个玩家,他手里拿着一个灯泡。(灯泡是像那个玩家一样的自己的游戏对象)现在我将灯泡的位置设置为玩家的位置,这样灯泡就放在了玩家的手里。我想做的是,当球员移动时,灯泡跟随球员,有一点延迟

public void tick() {
    bulbX = playerX + 20;
    bulbY = playerY - 3;
}
有什么想法吗


非常感谢,Maxi将其设置为使灯泡始终朝播放器移动

public void tick() {
    bulbX += (playerX - bulbX)/2;
    bulbY += (playerY - bulbY)/2;
}
这样,如果灯泡离玩家更远,它将更快地向玩家移动。您可能需要调整1/2参数

我还喜欢在我的代码中添加时间差,这样游戏就不会随着帧速率的增加而变慢

long time1 = System.currentTimeMillis();
while(running){
    long time2 = System.currentTimeMillis();
    float timeDiff = (time2-time1)/1000f;
    time1 = time2;
    tick(timeDiff);
}
勾选法:

public void tick(float timeDiff){
    float factor = 2;
    bulbX += (playerX - bulbX)*factor*timeDiff;
    bulbY += (playerY - bulbY)*factor*timeDiff;
}

这样,在足够高的帧速率下,灯泡将以指数的方式接近播放器。

@MaxiKeller查看我的最新答案,我认为它将更适用于you@MaxiKellerThijsStee的回答提供了我上述评论的一个例子。球的位置向量是(球BX,球比),球员是(球员X,球员)。在
tick()
的第一个示例中,通过减去两个向量
player-bull
找到灯泡到播放器的向量。答案使用了一个奇怪的情况(但考虑到情况合理)作为速度,但在第二个刻度示例(
tick(float)
)中,
因子本质上是
速度*单位向量
,然后乘以时间。所以大部分元素都在这里。你的另一个Q缺少的部分是“得到一个单位向量,乘以速度”。当你删除它时,我正在回答你关于朝光标射击子弹的问题。我想这也会有帮助,所以这不是离题。首先,认识到(x,y)坐标基本上是一个向量。然后,谷歌搜索以下内容并阅读:“减去向量”(如果减去它们的位置,将提供一个从一个对象到另一个对象的向量,这将得到“平移向量”),“如何计算向量大小”,“单位向量”,然后将平移向量除以大小得到单位向量,乘以你想要的速度得到(x,y)速度,乘以滴答时间。你是最好的。非常感谢。我真的很感谢你的支持。我想出了一个办法@亚伦