3

spriteWithFileメソッドを使用してスプライトを定義し、120px x30px.pngを提供します

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"];     
[self addChild:trampoline];

これをレイヤーに追加して配置すると、画面上に表示されるはずの場所になります。

trampoline = [Trampoline node];
trampoline.position = ccp(160,15);
[self addChild:trampoline z:0 tag:1];

ただし、contentSizeがないようです。次のNSLogステートメント:

NSLog(@"Content Size x:%f, y:%f", trampoline.contentSize.width,trampoline.contentSize.height);

次のように読み上げます。

2009-07-10 18:24:06.385 TouchSprite[3251:20b] Content Size x:0.000000, y:0.000000

私は何かが足りないのですか?それは120.000000×30.000000であるべきではありません

どんな助けでも大歓迎です。

よろしく、

リッチ

4

2 に答える 2

3

これらのラインはトランポリンクラスの一部ですか?

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"];
[self addChild:trampoline];

cocos2dでの私の限られた経験から、スプライトのcontentSizeは、実際にスプライトに属するコンテンツにのみ適用され、そのスプライトのすべての子には適用されないようです。その結果、上記の例では、トランポリンノードにコンテンツが追加されていないため、ログステートメントでcontentSizeを要求することはできません。ただし、Trampolineクラス内のcontentSizeメソッドをオーバーライドして、実際にグラフィックをロードしたスプライトのcontentSizeを返す場合は、機能するはずです。

これは、私が現在取り組んでいるゲームで使用しているスプライトのスニペットであり、私が話していることを示しています。

- (id) init
{
self = [super init];

if (self != nil)
{       
    self.textLabel = [Label labelWithString:@"*TEXT*"
                                   fontName:@"Helvetica"
                                   fontSize:18];

    [textLabel setRGB:0 :0 :0];

    textLabel.transformAnchor = CGPointZero;
    textLabel.position = CGPointZero;
    self.transformAnchor = CGPointZero;

    [self addChild:textLabel];
}

return self;
}
//

- (CGSize) contentSize
{
return textLabel.contentSize;
}

これは、Spriteを拡張するクラスに由来します。contentSizeのオーバーライドを追加するまで、別のクラスにオーバーライドを要求すると、同じ結果が得られます。textLabelのコンテンツサイズを返すように指示しているので、期待どおりに機能しています。

于 2009-07-15T17:28:31.963 に答える
0

トランポリンはスプライトから継承し、スプライトはノードから継承すると思います。ノードを作成する[トランポリンノード]でトランポリンを上書きしています...しかし、トランポリンの実装は、スプライトファイルをトランポリンノードに初期化するためにノードメソッドをオーバーライドしていますか?

次の行から空のNodeクラスが返されていると思います。

trampoline = [Trampoline node];
于 2009-07-10T18:03:24.370 に答える