2

次の簡単なコードがあります。

//
//  BGMyScene.m
//  Test1
//
//  Created by AndrewShmig on 3/10/14.
//  Copyright (c) 2014 Bleeding Games. All rights reserved.
//

#import "BGMyScene.h"

@implementation BGMyScene

- (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];

//      first label
        SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
//        myLabel.userInteractionEnabled = YES;
        myLabel.text = @"Hello, World!";
        myLabel.fontSize = 30;
        myLabel.position = CGPointMake(CGRectGetMidX(self.frame),
                                       CGRectGetMidY(self.frame));
        [self addChild:myLabel];

//      second label
        SKLabelNode *myLabel2 = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
        // myLabel2.userInteractionEnabled = YES;
        myLabel2.text = @"Hello, World!";
        myLabel2.fontSize = 30;
        myLabel2.position = CGPointMake(100, 100);
        [self addChild:myLabel2];
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self];
    SKNode *touchedNode = [self nodeAtPoint:touchLocation];

    NSLog(@"touchLocation x: %f and y: %f", touchLocation.x, touchLocation.y);

    if (touchedNode != self) {
        NSLog(@"Removed from parent.");
        [touchedNode removeFromParent];
    }
}

- (void)update:(CFTimeInterval)currentTime
{
    /* Called before each frame is rendered */
}

@end

2 つの SKLabelNodes を作成し、そのラベルが変更されたかどうかを確認し、変更された場合は親ノードから削除します。

奇妙なことに、userInteractionEnabled を YES に設定すると、SKLabelNode はタッチ イベントを受信しません。userInteractionEnabled を NO のままにすると正常に動作します。

このプロパティに userInteractionDisabled という名前を付けたほうがよいでしょうか? 私はそれについて何かを見逃していますか?

4

1 に答える 1

4

あなたのコードは、期待どおりに機能しています。

私が見る限り、タッチを受け取るのは SKLabelNodes ではなく、-(void)touchesBegan を持つ SKScene です...これは、SKLabelNodes を追加して .userInteractionEnabled = YES に設定すると、タッチを吸収することを意味します。彼らはシーンの上にいるので、シーンに到達する前に。

それ以外の場合は、SKLabelNode をサブクラス化し、カスタム初期化子で userInteractionEnabled を設定する必要があります。そして、SKLabelNode のサブクラスに touchesBegan を含めます。

于 2014-03-10T08:42:40.660 に答える