ios - How to replace layers? -


i started learn objective-c , use cocos2d 1 month ago.

i want replace 3 different layers tapping buttons. @ first, tried use "cclayermultiplex." then, use "if sentence." layers overlap or crash when buttons tapped. want previous layer disappear when new layer appears, old layer remains code now.

i think using "cclayermultiplex" best option, can't make work want to. below code. i'm afraid there're poor sentences...

@interface gslayout : cclayer { // button items ccmenuitemimage *file1; ccmenuitemimage *file1pushed; ...   // layer  (replace) cclayer *layer1; cclayer *layer2; cclayer *layer3;   // replace layers cclayermultiplex* mplayer;  }  @end     @implementation gslayout -(id) init{ if( (self=[super init])) {     cclog(@"%@: %@", nsstringfromselector(_cmd), self);      self.istouchenabled = yes;      // buttons      file1 = [ccmenuitemimage itemfromnormalimage:@"icon-small-50.png"                                                          selectedimage: @"icon-small.png"                                                                 target:nil                                                               selector:nil];     file1pushed = [ccmenuitemimage itemfromnormalimage:@"icon-small.png"                                                            selectedimage:@"icon-small-50.png"                                                                   target:nil                                                                 selector:nil];     ccmenuitemtoggle *togglefile1 = [ccmenuitemtoggle itemwithtarget:self                                                             selector:@selector(selectone:)                                                                items:file1,file1pushed, nil];     togglefile1.anchorpoint = cgpointmake(0.5f, 0.5f);              file2 = [[ccmenuitemimage itemfromnormalimage:@"icon-small-50.png"                                                     selectedimage: @"icon-small.png"                                                            target:nil                                                          selector:nil]retain];     file2pushed = [[ccmenuitemimage itemfromnormalimage:@"icon-small.png"                                                             selectedimage:@"icon-small-50.png"                                                                    target:nil                                                                 selector:nil]retain];     ccmenuitemtoggle *togglefile2 = [ccmenuitemtoggle itemwithtarget:self                                                             selector:@selector(selecttwo:)                                                                items:file2,file2pushed, nil];     togglefile2.anchorpoint = cgpointmake(0.5f, 0.5f);      ...      ccmenu *togglemenu = [ccmenu menuwithitems:togglefile1,togglefile2,togglefile3, nil];     [togglemenu alignitemshorizontally];     togglemenu.anchorpoint = cgpointmake(0, 1.0f);     cgsize screensize = [[ccdirector shareddirector] winsize];     togglemenu.position = cgpointmake(screensize.width/2, screensize.height);      [self addchild:togglemenu];             // create layers     layer1 = [gamefile1 node];     layer2 = [gamefile2 node];     layer3 = [gamefile3 node];     mplayer = [cclayermultiplex layerwithlayers:layer1,layer2,layer3, nil];          } return self; }  - (void) selectone: (ccmenuitem*) menuitem  { nslog(@"the first menu called");  if([layer1 isrunning])  {   nil;          nslog(@"the layer1 running");  } else if([layer2 isrunning]) {    [mplayer switchto:0];         nslog(@"the layer2  replaced");  }else if([layer3 isrunning]) {    [mplayer switchto:0];                 nslog(@"the layer3  replaced");  } else{    [self addchild:layer1];    nslog(@"the layer1 called");  }   }  - (void) selecttwo: (ccmenuitem*) menuitem  { nslog(@"the second menu called");  if([layer2 isrunning]) {   nil;             nslog(@"the layer2 running"); } else if([layer1 isrunning]) {   [mplayer switchto:1];   nslog(@"the layer1  replaced"); } else if([layer3 isrunning]) {   [mplayer switchto:1];   nslog(@"the layer3  replaced"); }else{   [self addchild:layer2];   nslog(@"the layer2 called"); }  }  - (void) selectthree: (ccmenuitem*) menuitem  { nslog(@"the third menu called");     ...  }     

please give me advice! thank in advance!

i'll add codes.

@interface gamefile1 : cclayer { ccsprite* sprite; }  @implementation gamefile1 -(id) init{ if( (self=[super init])) {      cgsize screensize = [[ccdirector shareddirector] winsize];     ccmenuitemimage *sounditem1 = [ccmenuitemimage itemfromnormalimage:@"button1.png"                                                          selectedimage: @"icon.png"                                                                 target:self                                                               selector:@selector(dosomethingone:)];              ccmenuitemimage *sounditem2 = [ccmenuitemimage itemfromnormalimage:@"button2.png"                                                          selectedimage: @"icon.png"                                                                 target:self                                                               selector:@selector(dosomethingtwo:)];      ...         ccmenu * mymenu = [ccmenu menuwithitems:sounditem1, sounditem2,sounditem3,sounditem4, sounditem5,sounditem6,sounditem7, sounditem8,sounditem9,sounditem10,sounditem11,sounditem12, nil];       [mymenu alignitemsinrows:[nsnumber numberwithint:4],[nsnumber numberwithint:4],[nsnumber numberwithint:4] ,nil];        mymenu.position = cgpointmake(370, 120);       [self addchild:mymenu];       sprite = [ccsprite spritewithfile:@"o0400026611355530621.jpg"];     sprite.scale = 0.5f;         sprite.position = cgpointmake(screensize.width/2, screensize.height/2);     sprite.anchorpoint = cgpointmake(1.0f, 0);      [self addchild:sprite];  - (void) dosomethingone: (ccmenuitem  *) menuitem  { nslog(@"the first menu called");  [[simpleaudioengine sharedengine] playeffect:@"one.wav"];  [sprite settexture:[[cctexturecache sharedtexturecache] addimage: @"one.jpg"]];  }   - (void) dosomethingtwo: (ccmenuitem  *) menuitem  { nslog(@"the second menu called");  [[simpleaudioengine sharedengine] playeffect:@"two.wav"];  [sprite settexture:[[cctexturecache sharedtexturecache] addimage: @"one.jpg"]]; } ...  @end 

since have loaded textures 3 layers, might have 3 sitting in separate cclayers 2 hidden @ given state using method similar to:

- (void) setlayer:(uint)show {     layerone.visible = (show == 0);     layertwo.visible = (show == 1);     layerthree.visible = (show == 2); } 

Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

android - layout with fragment and framelayout replaced by another fragment and framelayout -