失去了obj-c薄弱环节等

时间:2012-03-23 05:33:37

标签: c++ objective-c cocos2d-iphone box2d

我是新手并且没有任何线索,我现在已经读了很多东西,但不知怎的,他们似乎都错过了解释这个。

我正在努力开发一款游戏,但不知何故我迷失了。

GameScene.h在接口中有以下声明:

Player *player; 
b2Body *b2PlayerBody;

在GameScene.mm里面(使用box2d,所以需要.mm)当我在一个函数中创建播放器(来自另一个类)时,我将这个b2PlayerBody设置为我使用过的身体,将其推送到播放器上课并与之合作。

-(void) addPlayerAtPosition:(CGPoint)p
{
    CCLOG(@"Adding player at %0.2f x %02.f",p.x,p.y);

    // Player
    player = [[Player alloc] initWithPosition:ccp(p.x, p.y)];
    player.anchorPoint = ccp(0,0.5);
    [self addChild:player z:10 tag:kTagPlayerNode];



    // Define the dynamic body.
    //Set up a 1m squared box in the physics world
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
    b2PlayerBody = world->CreateBody(&bodyDef);

    // Define another box shape for our dynamic body.
    b2PolygonShape dynamicBox;
    dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box

    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &dynamicBox; 
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.3f;
    b2PlayerBody->CreateFixture(&fixtureDef);
    [player setPhysicsBody:b2PlayerBody];
}

在我的这个文件的Update方法中,我调用(dt是delta):

[player update:dt withBody:b2PlayerBody]; //update player

在player.h文件中我有:

的声明
- (void)update:(ccTime)dt withBody:(b2Body *)body;

在player.mm文件中我有

- (void)update:(ccTime)dt withBody:(b2Body *)body {

}

启动时,它会在没有任何错误文本的情况下从GameScene.mm更新崩溃

[player update:dt withBody:b2PlayerBody]; //update player

我做错了什么?

也有人可以告诉我有什么区别(对不起,如果这是一个愚蠢的q)之间

b2Body * b2PlayerBody; b2Body * b2PlayerBody; //我知道这是一个薄弱环节,但差异是什么。 b2Body b2PlayerBody;

这些链接方法也会对发布方法中的内存释放产生影响吗?

1 个答案:

答案 0 :(得分:-1)

b2Body * b2PlayerBody;
b2Body* b2PlayerBody;
b2Body *b2PlayerBody;

没有内存管理关键字(分别为“assign”属性)的实例变量(本例中为指针)称为“弱引用”。星号的位置没有区别,纯粹是您喜欢哪种风格的考虑因素。就个人而言,我更喜欢数据类型旁边的星号,而不是变量。

弱链接仅指静态库,即您可以“弱链接”到游戏中心,以便您的应用程序在没有Game Center的设备上运行。在这种情况下,您必须确保应用程序在没有GC的设备上不调用任何GC方法。

这些声明对内存管理没有影响。您负责根据需要分配和释放实例变量。在这种情况下,它通过Box2D API完成,即通过CreateBody和DestroyBody方法完成。