gpt4 book ai didi

c++ - box2d 迭代

转载 作者:行者123 更新时间:2023-11-28 08:22:09 25 4
gpt4 key购买 nike

嘿,我正在使用 box2d 和 cocos2d 框架为 iphone 编程。

目前,我有 3 个类,都是 CCSprite 的子类。
它们是:DynamicBlock1、DynamicBlock2 和 DynamicEgg1

基本上我的问题是我想在 tick 方法中分离迭代,以便我可以迭代某些类而不是其他类。

目前 Tick(迭代)方法分为两部分,isMoving == YES/NO..这会在 b2body(Master)-sprite(Slave) 和 b2body(Slave)-sprite(Master) 之间切换迭代。这样我就可以委托(delegate)谁控制谁。而且效果很好。

再一次,问题是下面的这段代码将从我在 GetBodyList() 中的所有类遍历我的所有 body 。当我只想对一个类 (DynamicBlock1) 进行迭代时...

有没有办法做到这一点?隔离迭代?

万分感谢
奥利弗

-(void) tick:(ccTime)dt
{
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(dt, velocityIterations, positionIterations);

for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
DynamicBlock1 *block1 = (DynamicBlock1*)b->GetUserData();
if (block1.isMoving == NO){
block1.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
block1.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
if (block1.isMoving == YES){
b2Vec2 b2Position = b2Vec2(block1.position.x/PTM_RATIO, block1.position.y/PTM_RATIO);
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(block1.rotation);
b->SetTransform(b2Position,b2Angle);
}
}
}

最佳答案

如果你想分离迭代,你必须自己为不同的类维护单独的列表(或数组)。每当您创建主体时,您都可以在各自的列表中添加对该主体的引用。例如你有这样的列表

NSArray *DynamicBlocksList;NSArray *DynamicEgssList;

现在,当您创建 DynamicBlock 主体时,您还将其添加到“DynamicBlocksList”中,并且当该主体被销毁时,您可以将其从列表中删除。在 Tick() 函数中,您可以只迭代所需的列表。

但在我个人看来,这样做可能不是一个好主意。迭代“world->GetBodyList()”很好,然后您可以将不同主体的处理委托(delegate)给不同的类或函数。

关于c++ - box2d 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405152/

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