gpt4 book ai didi

c++ - 如何为 TileMap 上的每个图 block 创建一个 PhysicsBody? (cocos2d-x)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:28 25 4
gpt4 key购买 nike

我目前正在尝试结合 cocos2d-x 中的内置 PhysicsBody 和 TileMap 类来为我的基于物理的侧滑游戏创建关卡(墙)。我有大小为 80*24 的图 block ,每个图 block 的大小为 30*30 像素 - 我需要为每个图 block 分配一个静态盒形物理体。

for    (int x=0; x < 80; x++)       //width of map
{
for (int y = 0; y < 24; y++) //height of map
{
auto spriteTile = wallLayer->getTileAt(Vec2(x,y));
if (spriteTile != NULL)
{
PhysicsBody* tilePhysics = PhysicsBody::createBox(Size(30.0f, 30.0f), PhysicsMaterial(1.0f, 1.0f, 0.0f));
tilePhysics->setDynamic(false); //static is good enough for walls
spriteTile->setPhysicsBody(tilePhysics);
}
}
}

上面的代码有效,但速度很慢,性能从 60 fps 下降到 20 fps 左右。是否有一种不那么暴力的方法,可以更有效地创建物理实体?注意:大部分 map 都是空白的,所以我不认为 body /瓷砖的数量是主要问题。

任何见解都会有所帮助,谢谢

最佳答案

首先,检查物理调试绘制是否打开,因为它可以显着降低 FPS。另外,请确保您是在设备上而不是在模拟器上测量 FPS,因为它在那里不可靠。

如果这没有帮助,那么您将不得不采用某种等高线追踪方法来避免为您的瓦片 map 中的每个瓦片创建静态主体。最好为您从瓦片 map 中描出的每个轮廓创建 1 个静态主体。这样,您最终会拥有更少的物理体,并且您的性能不会受到太大影响。

一种方法是所谓的 marching squares算法。另一个是 Moore neighborhood算法。

关于c++ - 如何为 TileMap 上的每个图 block 创建一个 PhysicsBody? (cocos2d-x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737098/

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