我正在爲我的遊戲添加瓷磚碰撞。從連續的固定尺寸矩形制作更寬的矩形?
我所做的是,我穿過每個物體,並獲得周圍的邊緣瓷磚。
我返回一個Vec2矢量,它對應於每個周圍邊緣圖塊的左上角位置。
那些得到了一套Vec2,所以只有獨特的留下來。
從那裏,可以構建固定大小的矩形。
不過,我需要的是連續的矩形在這個例子中被合併成1
所以,我們能將這些8米固定的矩形進3
最右邊的人會留下來原樣。
在x軸上的6將成爲1並在x軸和它下面的一個最左邊的將成爲1.
鑑於我有一組表示VEC2每一瓦片正方形的左上角位置和我知道正方形的寬度,我怎麼能用合併的固定正方形計算一個新的矩形(x,y,w,h)向量?
void TilePhysicsManager::update()
{
m_locationSet.clear(); //clear the unique locations
for (b2Body* b = m_b2world->GetBodyList(); b; b = b->GetNext())
{
if(b->GetType() == b2_dynamicBody)
{
PhysicsObject* obj = (PhysicsObject*)b->GetUserData();
const std::vector<Vec2>& edgeTiles = m_tileWorld->getSideTiles(*obj,1.5f);
//add in locations (duplicates will be rejected)
for(int i = 0; i < edgeTiles.size(); ++i)
{
m_locationSet.insert(edgeTiles[i]);
}
}
}
int objIndex = 0; //index of which dummy object we need
for(std::set<Vec2>::iterator it = m_locationSet.begin(); it != m_locationSet.end(); ++it)
{
//if our memory pool is not big enough, grow it
if(objIndex >= count())
{
allocNewObject();
}
m_objects[objIndex]->setLocation(*it);
objIndex++;
}
}
感謝
難道那些連續固定的矩形總是差不多將近有聯繫嗎?你是否需要從這些較小的矩形產生最小的較寬的矩形,或者有時接近最小數量的較寬的矩形也是可以接受的? – invisal
@invisal它必須是最長的連續長條,否則玩家會被卡在他們的邊緣。 – jmasterx
最長的垂直連續帶或最長的水平連續帶?哪一個? – invisal