【问题标题】:Does userInteractionEnabled property work correctly on SpriteKit nodes?userInteractionEnabled 属性是否在 SpriteKit 节点上正常工作?
【发布时间】:2014-03-10 04:44:15
【问题描述】:

我有以下简单代码:

//
//  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

它所做的是创建两个 SKLabelNodes 并检查是否触摸了这些标签,如果是,则将它们从父节点中删除。

奇怪的是,当我将 userInteractionEnabled 设置为 YES 时,SKLabelNode 不会收到任何触摸事件。将 userInteractionEnabled 设置为 NO 可以正常工作。

也许将此属性命名为 userInteractionDisabled 更好?我错过了什么吗?

【问题讨论】:

    标签: objective-c sprite-kit sklabelnode


    【解决方案1】:

    您的代码运行正常。

    据我所见,接收触摸的不是 SKLabelNodes,而是具有 -(void)touchesBegan 的 SKScene...在他们到达现场之前进行接触,因为他们在现场。

    否则,您应该继承 SKLabelNode 并在自定义初始化程序中设置 userInteractionEnabled。然后在 SKLabelNode 的子类中进行 touchesBegan。

    【讨论】:

    • 嗯...稍后我会检查并接受您的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多