iOS SpriteKit从另一个类创建和显示对象

iOS SpriteKit从另一个类创建和显示对象,ios,class,sprite-kit,addchild,Ios,Class,Sprite Kit,Addchild,我是SpriteKit的新手,我试图显示一个对象,一个在类中创建的圆,来自MyScene.m。这就是我所拥有的: 在CreateNewCircle.h中,我写道: #import <SpriteKit/SpriteKit.h> @interface CreateNewCircle : SKScene -(void) addNewCircle; @end 现在我尝试调用这个在屏幕上以MyScene.m形式显示圆圈的方法: #import "MyScene.h" #import

我是SpriteKit的新手,我试图显示一个对象,一个在类中创建的圆,来自MyScene.m。这就是我所拥有的:

在CreateNewCircle.h中,我写道:

#import <SpriteKit/SpriteKit.h>

@interface CreateNewCircle : SKScene

-(void) addNewCircle;

@end
现在我尝试调用这个在屏幕上以MyScene.m形式显示圆圈的方法:

#import "MyScene.h"
#import "CreateNewCircle.h"

@implementation MyScene {

}

-(id)initWithSize:(CGSize)size {    
    if (self = [super initWithSize:size]) {
        /* Setup your scene here */
        self.backgroundColor = [SKColor colorWithWhite:255 alpha:1.0];

        CreateNewCircle *circle1 = [[CreateNewCircle alloc] init];
        [circle1 addNewCircle];

        [self.scene addChild:circle1];

    }
    return self;
}
MyScene.h:

#import <SpriteKit/SpriteKit.h>

@interface MyScene : SKScene

@end
构建是可以的,但是当我运行时,什么也没有出现。我尝试更改addchild行,例如:

[circle1 setName:@"circleOne"];

[self childNodeWithName:@"circleOne"];
但同样的结果是:空白屏幕。如果我直接在MyScene.m中编写相同的代码,就会出现圆圈,因此代码应该是正确的。谁能帮帮我吗:-


谢谢。

看看这个示例,这样您就可以对代码进行所需的更改:

MyScene.h

CreateNewSprite.h


解释OP所遇到的问题可能会更好,而不仅仅是转储大量代码。@JesseRusak-然后向他解释。我总是喜欢通过例子来学习。好的,我尝试了一些改变,但仍然不起作用。现在我有了示例中的类:-instancetypeinit{if self=[super init]{………..,并且我将CreateNewCircle类的子类更改为SKSpriteNode。@user3457502-很抱歉。我忘记了SKShapeNode没有init方法。更新的代码向您展示了如何将SKShapeNode子类化。
[circle1 setName:@"circleOne"];

[self childNodeWithName:@"circleOne"];
#import <SpriteKit/SpriteKit.h>

@interface MyScene : SKScene

@end
#import "MyScene.h"
#import "CreateNewSprite.h"

@implementation MyScene
{
    //
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        CreateNewSprite *mySprite = [[CreateNewSprite alloc] init];
        [self addChild:mySprite];
    }
    return self;
}

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

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end
#import <SpriteKit/SpriteKit.h>

@interface CreateNewSprite : SKShapeNode

@end
#import "CreateNewSprite.h"

@implementation CreateNewSprite

- (instancetype)init
{
    self = [super init];
    if (self)
    {
        SKShapeNode *shape = [SKShapeNode node];
        shape.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 20, 20) cornerRadius:4].CGPath;
        shape.position = CGPointMake(100,100);
        shape.strokeColor = [SKColor redColor];

        [self addChild:shape];
    }
    return self;
}

@end