0

cocos2Dを使用するObjectiveCには、DebugZoneLayerとHeroClassの2つの主要なクラスがあります。Cocos2Dの使用は問題の一部ではないかもしれません。

HeroClassには、CGPointとプロパティが含まれています。DebugZoneLayerにHeroClassのインスタンスがあり、hero = [[HeroClassalloc]init]のように初期化されています。

私のHeroClass.hは、CGPointvelを作成する方法を示すために短縮されました。

@interface HeroClass : CCLayer {
    @public CGPoint _vel;
}

@property(assign) CGPoint vel;

HeroClass.mでは、 @ synthesize vel=_vel;のようにプロパティを合成します。

DebugZoneLayer.mでは、hero.vel xまたはyを問題なく参照できますが、hero.vel xまたはyに値を割り当てると、エラーが返されます。割り当ての左側のオペランドとして左辺値が必要です。

4

2 に答える 2

1

そうです—それはできません。プロパティは単なるメソッド呼び出しであり、Objective-Cのメソッドは常に値で返されます。つまり、返されるCGPointは、オブジェクト内の値と同じ値を持つ一時的なCGPointにすぎません。この一時的な値のコンポーネントを設定することは許可されていません。ポイントのX値とY値に対してクラスに特別なセッターを作成するか、ポイント全体を一度に設定する必要があります。

于 2011-05-02T20:40:55.967 に答える
1

チャックの完全に正しい答えを別の方法で言い換える。

問題は、CGPointがObjective-cオブジェクトではなく、C構造体であるということです。プロパティ*_vel*は、NSArray、NSArray、DebugZoneLayerなどのオブジェクトのインスタンスではありません。

単純で怠惰な例として、構造体と少しの擬似コードの代わりにintを使用します。

@interface HeroClass : CCLayer {
    int _numberOfLives;
}
@end

@implementation HeroClass
- (id)init {
    [super init];
    _numberOfLives = 3;
}

- (int)livesRemaining {
    return _numberOfLives;
}
@end

このように_numberOfLivesの値を設定することはできませんでした。

foo = [[HeroClass alloc] init];
bar = [foo livesRemaining];
bar = 2;

barの値を変更しても、fooの_numberOfLivesインスタンス変数の値は変更されません。これは、 -livesRemainingを呼び出したときに、barが_numberOfLivesの現在の値のコピーに設定されているためです。

要するに、あなたはあなたにいくつかのCを学ぶ必要があります。

于 2011-05-02T21:20:49.677 に答える