不允许使用只读属性分配属性

时间:2011-12-15 05:38:06

标签: iphone ios xcode4.2 game-center

我在Github上下载了这个tweejump应用。它适用于xcode 3.2.3,但现在我升级到xcode 4.2,它在这一行显示错误:

cloud.opacity = 128;

上下文:

- (void)initCloud {

    CGRect rect;
    switch(random()%3) {
        case 0: rect = CGRectMake(336,16,256,108); break;
        case 1: rect = CGRectMake(336,128,257,110); break;
        case 2: rect = CGRectMake(336,240,252,119); break;
    }   

    AtlasSpriteManager *spriteManager = (AtlasSpriteManager*)[self getChildByTag:kSpriteManager];
    AtlasSprite *cloud = [AtlasSprite spriteWithRect:rect spriteManager:spriteManager];
    [spriteManager addChild:cloud z:3 tag:currentCloudTag];

    cloud.opacity = 128;
}

它说assigning to property with readonly attribute not allowed

似乎有什么问题?我升级到xcode 4.2会影响它吗?

我不知道该怎么做,因为就像我说的那样,我只是下载了它......

1 个答案:

答案 0 :(得分:2)

查看您指向的Git仓库中包含的cocos2d源,该属性定义为:

@property (readonly) GLubyte opacity, r, g, b;.

所以是的,它是只读的。但是,CocosNodeRGBA协议为opacity属性定义了getter和setter。所以看起来两个不同的编译器正在拾取不同的东西,其中一个注意到实际上可以设置不透明度,而另一个则尊重该属性。

我认为将不透明度的设置更改为:

应该足够安全
[cloud setOpacity:128];

有关详细信息,请参阅此处:http://www.cocos2d-iphone.org/forum/topic/25332