cocos2d:从一个层到另一个层绘制CCSprite

时间:2013-12-02 05:47:04

标签: cocos2d-iphone

cocos2d:在一般情况下,这种情况:有两层: 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中有一个应该添加到图层的方法CCSprite HelloWorldLayer

- (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。有效的方法,但为什么不添加精灵,不显示错误

1 个答案:

答案 0 :(得分:0)

实际上你正在做的是你正在制作HellowroldLayer的所有新对象,然后你从该对象调用create function。所以你的精灵会添加到那个对象。但是因为你的新对象与旧对象完全不同,所以你没有将精灵添加到旧对象中。

因此,在这种情况下,您可以做的是为您的对象提供标记,例如

self.tag = 777;

然后在您的create方法中,您可以从标记中获取该对象,然后您可以创建方法。

CCScene* scene1 = [[CCDirector sharedDirector] runningScene];
if (scene1) {
   id layer1 = [scene1 getChildByTag:777];
   [layer1 CreateSprite];
}

不,需要制作新物品。