gpt4 book ai didi

objective-c - 使用 Box2D 将 UIImage 添加到 CCSprite

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:27 24 4
gpt4 key购买 nike

我想将图像添加到 CCSprite,然后在我的 Box2d 世界中使用它。 createBoxAtLocation 正确获取了 contentSize 但从不显示图像...我做错了什么?我需要向 update() 函数添加任何内容吗?

    CCSprite *sprite = [CCSprite spriteWithFile:@"slider_piece.png"];

[self createBoxAtLocation:loc1 withSize:boxSize forSprite:sprite];


-(void) createBoxAtLocation:(CGPoint)location withSize:(CGSize)size forSprite:(CCSprite *)_sprite
{
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);
bodyDef.allowSleep = false;
//bodyDef.userData = _sprite;

b2Body *body = world->CreateBody(&bodyDef);
body->SetUserData(_sprite);

b2FixtureDef fixtureDef;

b2PolygonShape shape;
shape.SetAsBox(_sprite.contentSize.width/2/PTM_RATIO, _sprite.contentSize.height/2/PTM_RATIO);
fixtureDef.shape = &shape;

body->CreateFixture(&fixtureDef);
}

编辑

在更新函数中我有这个,但它会导致 sprite.position 行出现 EXC_BAD_ACCESS 错误

    for(b2Body *b = world->GetBodyList(); b != NULL; b = b->GetNext()) 
{
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *) b->GetUserData();
sprite.position = ccp(b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
sprite.rotation = CC_RADIANS_TO_DEGREES(b->GetAngle() * -1);
}
}

最佳答案

Sprite 未添加到任何 CCNode(CCLayer 或 CCScene 等)?

如果是,

CCSprite *sprite = [CCSprite spriteWithFile:@"slider_piece.png"];

Sprite 可能会在 update() 中释放,因为 Sprite 是自动释放的对象。

在这种情况下,您必须在 CreateBody 中保留 Sprite ,

body->SetUserData([_sprite retain]);

然后在 DestroyBody 释放它。

[(CCSprite *)body->GetUserData() release];

顺便说一句,我推荐你使用 CCBox2D。

已编辑:

您是否将子画面添加到您的 CCScene 或子节点中?

[self addChild:sprite];

或者 body 的位置(loc1)在屏幕范围内?

关于objective-c - 使用 Box2D 将 UIImage 添加到 CCSprite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853693/

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