gpt4 book ai didi

c++ - 在 C++ 中沿着二维 vector (塔防)移动

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:46 27 4
gpt4 key购买 nike

我正在写一个简单的塔防,我卡在了我的塔必须射击敌人的地方。

使用这段代码:

void Bullet::move(int x, int y, int speed) 
{

Punkt delta = {(x + speed) - this->x, (y + speed) - this->y};
if (abs(delta.x) > 1 && abs(delta.y) > 1)
{
this->x += delta.x / this->speed;
this->y += delta.y / this->speed;
}
else
{
this->dead = true;
}
}

其中方法参数是目标位置和速度。它应该沿着 vector 移动子弹直到它到达目标但是 vector 改变因为目标在移动。现在子弹是这样的(黑色是塔,蓝色是子弹,红色是敌人)

error

而且我知道问题是我的子弹瞄准的是已经移动的东西,所以我的问题是 - 如何改进此代码以使其正常工作?我不知道如何理解 vector 和弹道学,所以在此先感谢您保持简单。

最佳答案

我以前见过的解决这个问题的合理方案如下:

  1. 尽力预测子弹和敌人的最佳碰撞点。一种天真的方法是让您的预测只是当前敌人的位置。
  2. 在预测位置发射子弹
  3. 当子弹到达预测位置时,让子弹消失,播放伤害动画,并降低敌人的生命值——不 pipe 弹是否真的命中

如果您的数学足够聪明,这样看起来会不错。但除此之外,游戏仍将正常运行。

如果敌人有可能在您向他们开火后改变速度(例如,他们会因特殊地形或影响范围的炮塔而减速),这种方法也会更加稳健。

关于c++ - 在 C++ 中沿着二维 vector (塔防)移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com