Sprite Kit SKShapeNode 创建两个节点而不是一个

Posted

技术标签:

【中文标题】Sprite Kit SKShapeNode 创建两个节点而不是一个【英文标题】:Sprite Kit SKShapeNode creating two nodes instead of one 【发布时间】:2013-10-18 17:50:08 【问题描述】:

我是 ios 的 Sprite Kit 新手。我想在我的场景中添加一个形状节点。场景是灰色的,形状是场景中心的一个白色圆圈。我的场景代码如下。由于某种原因,将节点添加到场景的最后一行导致节点计数增加了 2。如果我不考虑那条线,就会有 0 个节点,只有一个灰色的场景。但是如果我离开这条线,那么圆圈就在那里,但节点数是 2。这是一个大问题,因为当我向圆圈中添加更多节点时,节点数是应有的两倍,并且会减慢速度。有谁知道问题是什么?非常感谢!

@interface ColorWheelScene()
@property BOOL contentCreated;
@end

@implementation ColorWheelScene

- (void)didMoveToView:(SKView *)view 
    if(!self.contentCreated) 
        [self createSceneContents];
        self.contentCreated = YES;
    


- (void)createSceneContents 
    self.backgroundColor = [SKColor grayColor];
    self.scaleMode = SKSceneScaleModeAspectFit;

    SKShapeNode *wheel = [[SKShapeNode alloc]init];
    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(0.0, 0.0)];
    [path addArcWithCenter:CGPointMake(0.0, 0.0) radius:50.0 startAngle:0.0 endAngle:(M_PI*2.0) clockwise:YES];
    wheel.path = path.CGPath;
    wheel.fillColor = [SKColor whiteColor];
    wheel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    [self addChild:wheel];


@end

【问题讨论】:

您是否验证过创建场景内容真的被调用过一次?也许放一个登录或断点 是的。我在那里放了一个日志,它只被调用一次。 所以如果我理解正确的话,如果你添加这个形状一次,它说它们是'两个'节点,如果你添加它两次它会说它们是'四个'节点。? 是的。我只是这样做了 - 添加了两个形状,它是 4 个节点。 【参考方案1】:

您将获得 +1 节点以将填充添加到圆圈

所以,

- (void) makeACircle

    SKShapeNode *ball;
    ball = [[SKShapeNode alloc] init];

// stroke only = 1 node
//    CGMutablePathRef myPath = CGPathCreateMutable();
//    CGPathAddArc(myPath, NULL, 0,0, 60, 0, M_PI*2, YES);
//    ball.path = myPath;
//    ball.position = CGPointMake(200, 200);
//    [self addChild:ball];

// stroke and fill = 2 nodes
    CGMutablePathRef myPath = CGPathCreateMutable();
    CGPathAddArc(myPath, NULL, 0,0, 60, 0, M_PI*2, YES);
    ball.path = myPath;
    ball.fillColor = [SKColor blueColor];
    ball.position = CGPointMake(200, 200);
    [self addChild:ball];


【讨论】:

啊,这就是问题所在。非常感谢 Smick! 竖起大拇指 :-) 是的,它仍然很奇怪,但是......如果您对答案感到满意,请勾选正确,这样问题就解决了。

以上是关于Sprite Kit SKShapeNode 创建两个节点而不是一个的主要内容,如果未能解决你的问题,请参考以下文章

如何在Sprite-kit中画一条线

如何在 Sprite-kit 中画一条线

如何使用 Sprite Kit 创建具有 3D 效果的戒指?

Sprite 套件中的 SKShapeNode 碰撞检测未检测到碰撞

Sprite Kit 创建倒计时问题

绕过子类中的Initialization:Swift和SpriteKit