C++ 顶点数组平铺贴图冲突
我正在使用16x16像素的小平铺贴图。播放器在1像素空间中移动,这意味着播放器在多个分片中的某些点。我目前的方法只找到一个磁贴,但它相当不准确,并且你不能在你不能通过的磁贴的16px范围内通过 碰撞功能:C++ 顶点数组平铺贴图冲突,c++,collision-detection,sfml,C++,Collision Detection,Sfml,我正在使用16x16像素的小平铺贴图。播放器在1像素空间中移动,这意味着播放器在多个分片中的某些点。我目前的方法只找到一个磁贴,但它相当不准确,并且你不能在你不能通过的磁贴的16px范围内通过 碰撞功能: void collision(direction dir) { m_Position = m_Sprite.getPosition(); long x = m_Position.x; long y = m_Position.y; long current =
void collision(direction dir)
{
m_Position = m_Sprite.getPosition();
long x = m_Position.x;
long y = m_Position.y;
long current = ((x - (x % TextureSize)) / TextureSize) + (((((y - (y % TextureSize))) / TextureSize) * LevelWidth));
switch (dir)
{
case up:
if (activelevel[current - LevelWidth] != 0)
this->move(down);
break;
case down:
if (activelevel[current + LevelWidth] != 0)
this->move(up);
break;
case left:
if (activelevel[current + 1 ] != 0)
this->move(right);
break;
case right:
if (activelevel[current - 1] != 0)
this->move(left);
break;
}
}
void move(direction dir)
{
switch (dir)
{
case up:
m_Sprite.move(0,-1 * speed);
break;
case right:
m_Sprite.move(1 * speed, 0);
break;
case down:
m_Sprite.move(0, 1 * speed);
break;
case left:
m_Sprite.move(-1 * speed, 0);
break;
default:
break;
}
if (animated == true && dir != not)
animate(dir);
collision(dir);
}
运动功能:
void collision(direction dir)
{
m_Position = m_Sprite.getPosition();
long x = m_Position.x;
long y = m_Position.y;
long current = ((x - (x % TextureSize)) / TextureSize) + (((((y - (y % TextureSize))) / TextureSize) * LevelWidth));
switch (dir)
{
case up:
if (activelevel[current - LevelWidth] != 0)
this->move(down);
break;
case down:
if (activelevel[current + LevelWidth] != 0)
this->move(up);
break;
case left:
if (activelevel[current + 1 ] != 0)
this->move(right);
break;
case right:
if (activelevel[current - 1] != 0)
this->move(left);
break;
}
}
void move(direction dir)
{
switch (dir)
{
case up:
m_Sprite.move(0,-1 * speed);
break;
case right:
m_Sprite.move(1 * speed, 0);
break;
case down:
m_Sprite.move(0, 1 * speed);
break;
case left:
m_Sprite.move(-1 * speed, 0);
break;
default:
break;
}
if (animated == true && dir != not)
animate(dir);
collision(dir);
}
有没有人有办法做到这一点?它们不需要与上述内容相关
谢谢。问题是@DGomez编辑的,真不敢相信我错过了。你只需要测试一下你的移动是否会将你置于当前矩形之外。也就是说:1。你自己的尺码不重要吗?或者你是在移动一个像素?2.如果有可能朝那个方向移动,最好更改
碰撞
返回,并在实际移动之前进行测试。16*16 Sprite,抱歉,我忽略了这一点。我的问题更多的是,如果玩家在两个方格内。这是否意味着我需要测试前面的两个方块?