0

一時停止メニューのスライダーを削除する方法に問題がありました。履歴書をクリックすると音楽を制御するスライダーが終了するというコードやアイデアがあるかどうか疑問に思いました

./mファイル

   -(void)PauseButtonTapped:(id)sender
 {
   if(_pauseScreenUp ==FALSE)
   {
    _pauseScreenUp=TRUE;
    //if you have music uncomment the line bellow
    //[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];
    [[CCDirector sharedDirector] pause];
    CGSize s = [[CCDirector sharedDirector] winSize];
    pauseLayer = [CCColorLayer layerWithColor: ccc4(150, 150, 150, 125) width: s.width height: s.height];
    pauseLayer.position = CGPointZero;
    [self addChild: pauseLayer z:8];

    _pauseScreen =[[CCSprite spriteWithFile:@"pause picture.png"] retain];
    _pauseScreen.position= ccp(250,150);
    [self addChild:_pauseScreen z:8];

    CCMenuItem *ResumeMenuItem = [CCMenuItemImage
                                  itemFromNormalImage:@"resume.png" selectedImage:@"resume.png"
                                  target:self selector:@selector(ResumeButtonTapped:)];
    ResumeMenuItem.position = ccp(250, 230);

    CCMenuItem *QuitMenuItem = [CCMenuItemImage
                                itemFromNormalImage:@"quit.png" selectedImage:@"quit.png"
                                target:self selector:@selector(QuitButtonTapped:)];
    QuitMenuItem.position = ccp(250, 50);




    CCMenuItem *MainMenuItem = [CCMenuItemImage
                                itemFromNormalImage:@"mainmenubutton.png" selectedImage:@"mainmenubutton.png"
                                target:self selector:@selector(MainButtonTapped:)];
    MainMenuItem.position = ccp(250, 145);         






    CCControlSlider *slider = [CCControlSlider sliderWithBackgroundFile:@"sound bar.png" progressFile:@"sound bar.png" thumbFile:@"sound icon.png"];





    slider.minimumValue = 0.0f; // Sets the min value of range
    slider.maximumValue = 1.0f; // Sets the max value of range

    // When the value of the slider will change, the given selector will be call
    [slider addTarget:self action:@selector(valueChanged:) forControlEvents:CCControlEventValueChanged];

    [slider setPosition:ccp(240,68)];        





    [self addChild:slider z:8];         






    CCControlSlider *slider1 = [CCControlSlider sliderWithBackgroundFile:@"sound bar2.png" progressFile:@"sound bar2.png" thumbFile:@"devil2.png"];





    slider1.minimumValue = 0.0f; // Sets the min value of range
    slider1.maximumValue = 1.0f; // Sets the max value of range

    // When the value of the slider will change, the given selector will be call
    [slider1 addTarget:self action:@selector(valueChanged1:) forControlEvents:CCControlEventValueChanged];

    [slider1 setPosition:ccp(240,8)];        





    [self addChild:slider1 z:10];         














    _pauseScreenMenu = [CCMenu menuWithItems:ResumeMenuItem,QuitMenuItem,MainMenuItem, nil];
    _pauseScreenMenu.position = ccp(0,0);
    [self addChild:_pauseScreenMenu z:10];








}
 }








 -(void)ResumeButtonTapped:(id)sender{
[self removeChild:_pauseScreen cleanup:YES];
[self removeChild:_pauseScreenMenu cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[[CCDirector sharedDirector] resume];
_pauseScreenUp=FALSE;
 }

 -(void)QuitButtonTapped:(id)sender{
[self removeChild:_pauseScreen cleanup:YES];
[self removeChild:_pauseScreenMenu cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[[CCDirector sharedDirector] resume];
_pauseScreenUp=FALSE;
[[UIApplication sharedApplication] performSelector:@selector(terminateWithSuccess)];

  }





 -(void)MainButtonTapped:(id)sender{
[self removeChild:_pauseScreen cleanup:YES];
[self removeChild:_pauseScreenMenu cleanup:YES];
[self removeChild:pauseLayer cleanup:YES];
[[CCDirector sharedDirector] resume];
_pauseScreenUp=FALSE;
[[CCDirector sharedDirector] replaceScene:[MainMenuScene scene]];    
   }









  - (void)soundOnOrOff:(id)sender
{

if ([[SimpleAudioEngine sharedEngine] mute]) {
    // This will unmute the sound
    [[SimpleAudioEngine sharedEngine] setMute:0];
}
else {
    //This will mute the sound
    [[SimpleAudioEngine sharedEngine] setMute:1];
}

 }


- (void)valueChanged:(CCControlSlider *)sender
{
// Change volume of your sounds

[[SimpleAudioEngine sharedEngine] setBackgroundMusicVolume:sender.value];
 }



  - (void)valueChanged1:(CCControlSlider *)sender
 {
// Change volume of your sounds
[[SimpleAudioEngine sharedEngine] setEffectsVolume:sender.value];

[[SimpleAudioEngine sharedEngine] playEffect:@"boom.mp3"];      
  }

一時停止メニューをクリックするとスライダーが表示されますが、[再開]をクリックすると問題が解決しません:(。提案があればいいのですが。[再開]をタッチすると、サウンドスライダーを削除または非表示にできると考えていました。

4

1 に答える 1

0

私に叫んだコードの一部を選んだ模範的な例です(「Hiiilp!Hiiiilp!」のように聞こえました)。

_pauseScreen =[[CCSprite spriteWithFile:@"pause picture.png"] retain];

自動解放されたオブジェクトを保持します。これは、子として自分自身に追加するため、親ノードによっても保持されます。今、私はreleaseあなたがこれと他のそのような保持されたオブジェクトを漏らしていると私に信じさせるどこにも見当たりません。

推奨事項:とにかく、addChildを介してノード階層に追加したオブジェクトを保持しないでください。余計です。そして次のプロジェクトでは、ARCを使用します。

于 2012-07-16T21:04:12.413 に答える