1

CCSprite の親ノードのスケール値を決定する際に問題が発生しています。

私のゲームには、CCLayer を拡張し、ゲーム トリガーに基づいて自身をスケーリングするクラスがあります。この CCLayer の特定の子スプライトには、親 CCLayer をスケーリングすると不正確になる数学的計算があります。たとえば、親ノード内で発火点を決定する必要があるタンク スプライトがあります。

レイヤーをスケーリングし、レイヤーにそのスケール値を尋ねるときはいつでも、それらは正確です。ただし、レイヤー内に含まれるスプライトの親のスケール値をポーリングすると、それらは常に 1 つとして表示されます。

// From within the sprite
CCLOG(@"ChildSprite-> Parent's scale values are scaleX: %f, scaleY: %f",
      self.parent.scaleX, self.parent.scaleY); // Outputs 1.0,1.0

// From within the layer
CCLOG(@"Layer-> ScaleX : %f, ScaleY: %f , SCALE: %f",
      self.scaleX, self.scaleY,     self.scale); // Output is 0.80,0.80

なぜそうなのか、誰か説明してもらえますか?これらの値が異なる理由がわかりません。Cocos2d の内部設計を完全に理解していない可能性があります。どんな助けでも大歓迎です。

編集:これは、レイヤーにスプライトを挿入するために使用しているコードです

EarthTank * earthTank = [[EarthTank alloc] initWithWorld:self->world  
atLocation:spawnPointRight withID:pid];
earthTank.tankShaft = shaft; 
[earthTank createInitialArsenal:tempPlayer];
[earthTank addAndAlignTankShaft];
[spriteBatchNode addChild:earthTank z:2];

したがって、問題は self.parent (スプライト内で呼び出される) がレイヤー自体ではなく SpriteBatchNode を参照することです。self.parent.parent への呼び出しを変更すると、レイヤーの実際のスケール値を見つけることができます。

4

2 に答える 2

0

self.parent は実際にはレイヤーではないようです。それを確認します。

于 2013-06-30T23:50:51.827 に答える