gpt4 book ai didi

c++ - 从 (x, y) 位置计算网格线 C++

转载 作者:行者123 更新时间:2023-11-28 00:50:32 26 4
gpt4 key购买 nike

我有一个数组[15][15],其中包含我的对象的路径。 0 是墙,其他任何东西都是路径(1->2->3->...->end)。它反射(reflect)了 450px x 450px(30px x 30px 为一个领域)的游戏领域。

数组[15][15] 看起来像这样:

080000000000000
010111011101110
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
010101010101010
011101110111010
000000000000090

我得到: map2

我的物体以某个速度 * 速度移动:

void Enemy::move()
{
this->get_dir();
this->x += this->velX * this->speed; // velX = -1 is left, 1 is right
this->y += this->velY * this->speed; // velY = -1 is up, 1 is down
}

get_dir() 检查它应该设置的方向(速度),如下所示:

void Enemy::get_dir()
{
Point p; // {x, y} struct

p = this->get_grid(); // it tries to calculate X, Y axis into an array number
if (p.y < 14 && path_grid[p.y + 1][p.x] - 1 == path_grid[p.y][p.x])
{
this->velY = 1;
this->velX = 0;
return;
}
/* same goes for rest of directions */

this->velX = this->velY = 0; // if none matched it stops (reached end)
return;
}

Point Enemy::get_grid()
{
int x, y;

for(y = 0;y < 15;y++)
{
if (this -> y >= y * 30 && this->y < (y + 1) * 30) break;
}

for(x = 0;x < 15;x++)
{
if (this -> x >= x * 30 && this->x < (x + 1) * 30) break;
}

return make_point(x, y);
}

但是您可能会注意到,这将导致我的对象遵循如下路径: path

因为它检查左上角,如果我向右移动它应该改变原点,但我不知道该怎么做。当我尝试添加 30(对象位图大小)时,如果它正确,它会停在上 -> 右角。这里有什么解决方案?

最佳答案

删除了我的大部分答案,因为它似乎误解了问题。但我会留下关于您的 get_grid 函数疯狂的部分。只需使用数学(我假设 xy 是整数):

Point Enemy::get_grid()
{
return make_point(x / 30, y / 30);
}

此外,如果您想获取网格位置并将其显示在每 block 30 像素见方的 block 的中心,请执行以下操作:

int pixelX = gridX * 30 + 15;
int pixelY = gridY * 30 + 15;

关于c++ - 从 (x, y) 位置计算网格线 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308875/

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