【问题标题】:Having issues with touchesBegan methodtouchesBegan 方法有问题
【发布时间】:2014-11-21 02:34:11
【问题描述】:

我的声音标志出现在屏幕上,并且在我测试时出现声音关闭标志。我想要它做的是当我点击它时从声音变为声音。按钮确实确认点击,但没有任何反应。我在点击节点图像时没有太多经验,所以我真的不知道我是否使用了最有效的代码。有人可以查看我的代码,看看有什么问题吗?提前致谢!

@implementation MyScene
{
SKSpriteNode *soundLogo;
SKSpriteNode *soundOff;
}

-(void) addSoundOff:(CGSize)size {
soundOff = [SKSpriteNode spriteNodeWithImageNamed:@"soundOff"];
//resize sprite
soundOff.size = CGSizeMake(soundOff.size.width/2.25, soundOff.size.height/2.25);
//position it
soundOff.position = CGPointMake(65, 25);
//name sound off
soundOff.name = @"soundOff";

soundOff.zPosition = 0;
soundOff.alpha = 0;
//[self addChild:soundOff];
}


-(void) addSoundOn:(CGSize)size {
soundLogo = [SKSpriteNode spriteNodeWithImageNamed:@"soundLogo"];
//resize sprite
soundLogo.size = CGSizeMake(soundLogo.size.width/2.25, soundLogo.size.height/2.25);
//position sprite
CGPoint myPoint = CGPointMake(65, 25);
soundLogo.position = myPoint;
//name sound logo
soundLogo.name = @"soundOn";
//add action

//soundLogo.alpha = 1;
soundLogo.zPosition = 100;

[self addChild:soundLogo];
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];

if ([node.name isEqualToString:@"soundOn"]) {

    soundOff.zPosition = 100;
    soundOff.alpha = 1;
    soundLogo.alpha = 0;
    soundLogo.zPosition = 0;

//        [node removeFromParent];
//        [node addChild:soundOff];
    NSLog(@"sound on is pressed");
 }

if ([node.name isEqualToString:@"soundOff"]) {

    soundLogo.zPosition = 100;
    soundLogo.alpha = 1;
    soundOff.alpha = 0;
    soundOff.zPosition = 0;

//        [node removeFromParent];
//        [node addChild:soundLogo];
    NSLog(@"sound off is pressed");
}
}

【问题讨论】:

    标签: ios objective-c button sprite-kit touchesbegan


    【解决方案1】:

    您的 addSoundOffaddSoundOn 函数似乎没有错。作为更改 SKSpriteNodealphazPosition 属性的解决方案之一,您可以做什么。并且还创建soundOffsoundLogo作为实现下的实例变量。所以这里是所有代码:

    #import "MyScene.h"
    
    @implementation MyScene
    {
        SKSpriteNode *soundLogo;
        SKSpriteNode *soundOff;
    }
    
    -(id)initWithSize:(CGSize)size {    
        if (self = [super initWithSize:size]) {
            /* Setup your scene here */
    
            self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
    
            [self addSoundOn:self.size];
            [self addSoundOff:self.size];
    
        }
        return self;
    }
    
    -(void) addSoundOff:(CGSize)size {
        soundOff = [SKSpriteNode spriteNodeWithImageNamed:@"soundOff"];
        //resize sprite
        soundOff.size = CGSizeMake(soundOff.size.width/2.25, soundOff.size.height/2.25);
        //position it
        soundOff.position = CGPointMake(65, 25);
        //name sound off
        soundOff.name = @"soundOff";
    
        soundOff.alpha = 0;
        soundOff.zPosition = 0;
        [self addChild:soundOff];
    
    }
    
    -(void) addSoundOn:(CGSize)size {
        SKTexture *soundOn = [SKTexture textureWithImageNamed:@"soundLogo"];
        soundLogo = [SKSpriteNode spriteNodeWithTexture:soundOn];
        //resize sprite
        soundLogo.size = CGSizeMake(soundLogo.size.width/2.25, soundLogo.size.height/2.25);
        //position sprite
        CGPoint myPoint = CGPointMake(65, 25);
        soundLogo.position = myPoint;
        //name sound logo
        soundLogo.name = @"soundOn";
        //add action
    
        soundLogo.zPosition = 100;
        [self addChild:soundLogo];
    }
    
    -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInNode:self];
        SKNode *node = [self nodeAtPoint:location];
    
        //sound logo pressed to turn sound on/off
        if ([node.name isEqualToString:@"soundOn"]) {
    
            soundOff.alpha = 1;
            soundOff.zPosition = 100;
            soundLogo.alpha = 0;
            soundLogo.zPosition = 0;
    
            NSLog(@"sound on is pressed");
        }
    
        if ([node.name isEqualToString:@"soundOff"]) {
    
            soundOff.alpha = 0;
            soundOff.zPosition = 0;
            soundLogo.alpha = 1;
            soundLogo.zPosition = 100;
            NSLog(@"sound off is pressed");
        }
    }
    
    
    @end
    

    【讨论】:

    • 好吧,我认为这会起作用,但是当我运行它时,它会显示 soundOn 按钮,所以我点击它,它说我正在点击 soundOff 按钮,但没有任何反应。
    • 所以问题是当我启动它时 soundOff 按钮在 soundOn 上方但它是不可见的。所以我看到的只是 soundOn 按钮,当我尝试点击 soundOn 按钮时,它实际上只是点击了 soundOff 按钮,并没有给它正确运行 touchesBegan 方法的机会。
    • 你说得对,我改变了答案,希望它现在能如你所愿。 @尼古拉斯惠特利
    • 嗯我本可以发誓这会起作用,但是当我运行它并点击声音按钮时,它会消失,当我继续点击它时,它只会对声音做出反应。声音关闭也没有弹出。
    • 我编辑了我的消息,并将所有代码放入其中。我在 iPhone 5 上进行了测试,效果还不错。你现在可以重试吗,让我知道它是否有效。 @尼古拉斯惠特利
    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多