cocos2d:一般的に、この状況:2つのレイヤーがあります:1)HelloWorldLayer(メイン)とHudlayer:
@ implementation HelloWorldLayer.
+ (CCScene *) scene
{
/ / 'Scene' is an autorelease object.
CCScene * scene = [CCScene node];
/ / 'Layer' is an autorelease object.
HelloWorldLayer * layer = [HelloWorldLayer node];
/ / Add layer as a child to scene
[scene addChild: layer];
HudLayer * hud = [HudLayer node];
[scene addChild: hud];
layer.hud = hud;
/ / Return the scene
return scene;
}
- (id) init
{
if ((self = [super init])) {
...}
HelloWorldLayerには、レイヤーCCSpriteHelloWorldLayerに追加する必要のあるメソッドがあります。
- (void) CreateSprite {
CGSize winSize = [CCDirector sharedDirector]. WinSize;
CCSprite * sprite = [CCSprite spriteWithFile: @ "bird.png"];
sprite.position = ccp (winSize.width / 2 , winSize.height / 2);
[self addChild: sprite];
}
Hudlayerでは、ボタンを押すと機能するボタンとメソッド
@ implementation HudLayer
- (Id) init
{
self = [super init];
if (self) {
CGSize size = [CCDirector sharedDirector]. WinSize;
CCMenuItem * Button = [CCMenuItemImage
itemFromNormalImage: @ "1.png" selectedImage: @ "1.png" target: self selector: @ selector (Build :)];
CCMenu * menu = [CCMenu menuWithItems: Button, nil];
[menu alignItemsHorizontallyWithPadding: 20] ;
[menu setPosition: ccp (-Button.contentSize.width / 2 + size.width, size.height- 100 ) ] ;
[self addChild: menu];
}
return self;
}
- (void) create: (id) sender
{
HelloWorldLayer * create = [[HelloWorldLayer alloc] init];
[create CreateSprite];
}
画面ボタンに表示されます。クリックすると、メソッドがHelloWorldLayer CreateSpriteで機能し、画面にTstsspriteが追加されます。動作するメソッドですが、なぜスプライトが追加されないのですか、エラーは表示されません
実際に行っているのは、HellowroldLayerのすべての新しいオブジェクトを作成してから、そのオブジェクトからcreate関数を呼び出すことです。したがって、スプライトはそのオブジェクトに追加されます。ただし、新しいオブジェクトは古いオブジェクトとは完全に異なるため、古いオブジェクトにスプライトが追加されることはありません。
したがって、この場合にできることは、オブジェクトにタグを付けることです。
self.tag = 777;
次に、createメソッドで、タグからそのオブジェクトを取得してから、メソッドを作成できます。
CCScene* scene1 = [[CCDirector sharedDirector] runningScene];
if (scene1) {
id layer1 = [scene1 getChildByTag:777];
[layer1 CreateSprite];
}
いいえ、新しいオブジェクトを作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加