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。有效的方法,但为什么不添加精灵,不显示错误
答案 0 :(得分:0)
实际上你正在做的是你正在制作HellowroldLayer的所有新对象,然后你从该对象调用create function。所以你的精灵会添加到那个对象。但是因为你的新对象与旧对象完全不同,所以你没有将精灵添加到旧对象中。
因此,在这种情况下,您可以做的是为您的对象提供标记,例如
self.tag = 777;
然后在您的create方法中,您可以从标记中获取该对象,然后您可以创建方法。
CCScene* scene1 = [[CCDirector sharedDirector] runningScene];
if (scene1) {
id layer1 = [scene1 getChildByTag:777];
[layer1 CreateSprite];
}
不,需要制作新物品。