第一次将SpriteNode方法从gamescene移动到自己的类文件,节点没有绘制

时间:2014-11-05 04:23:34

标签: objective-c sprite-kit

我第一次尝试将一个方法从我的主GameScene移动到一个新的文件/类,所以我可以保持清洁,真的只是尽可能地保持代码尽可能只是把它放在一起在项目中自己的文件中。

这是一个SKSpriteNode方法,一旦我设置它,我可以看到我的NSLog显示但我不能让节点本身被绘制到屏幕上,我必须做错了我如何创建/分配/在这个新文件/类中指向这个spritenode什么的?

如果有人可以花一点时间看看并帮助我理解任何帮助都会很棒

目前在GameScene.m中我使用

这样的方法
@implementation GameScene
{
SKSpriteNode *myNode;
}

//own method in GameScene
- (SKSpriteNode *)createMyNode
{
myNode = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(20, 20)];
myNode.position = CGPointMake(50, 50);
//etc
return myNode;
}


-(void)didMoveToView:(SKView *)view {
[self addChild: [self createMyNode]];
}

//it then is successfully created on screen

现在我正在尝试将上述内容添加到新文件/类中,它是自己的文件等

newclassfile.m
#import "newclassfile.h"

@implementation newclassfile {
SKSpriteNode myNode
}

- (SKSpriteNode *)createMyNode 
{
myNode = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(20, 20)];
myNode.position = CGPointMake(50, 50);
//etc
NSLog(@"newclassfile myNode check");
return myNode;
}


newclassfile.h
#import <SpriteKit/SpriteKit.h>

@interface newclassfile : SKSpriteNode

-(SKSpriteNode*)createMyNode;

@end

然后回到GameScene.m

//import header
#import "newclassfile.h"


-(void)didMoveToView:(SKView *)view {
newclassfile *myNode=[[newclassfile alloc]init];
[myNode createMyNode];
}

我希望看到我的新spritenode但是看不到它,但我确实看到了NSLog(@“newclassfile myNode check”);在控制台告诉我方法正在运行我猜。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

在newclassfile.h中,添加以下方法原型

#import <SpriteKit/SpriteKit.h>

@interface newclassfile : SKSpriteNode

+ (instancetype) createMyNode;
+ (instancetype) spriteNodeWithColor:(UIColor *)color size:(CGSize)size;
- (id) initWithColor:(UIColor *)color size:(CGSize)size;

@end

在newclassfile.m中,声明一个初始化精灵节点的方法和一个方便的方法来分配/初始化一个新节点。

#import "newclassfile.h"

@implementation newclassfile

+ (instancetype) createMyNode
{
    return [[newclassfile alloc] initWithColor:[SKColor greenColor] size:CGSizeMake(20, 20)];
}

+ (instancetype) spriteNodeWithColor:(UIColor *)color size:(CGSize)size
{
    return [[newclassfile alloc] initWithColor:color size:size];
}

- (id) initWithColor:(UIColor *)color size:(CGSize)size
{
    if (self=[super initWithColor:color size:size]) {
        self.position = CGPointMake(200, 200);
        // Create a physics body
        self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:size]; 
    }
    return self;
}

@end
在GameViewController.m中

,更改以下内容

scene.scaleMode = SKSceneScaleModeAspectFill;

到这个

scene.scaleMode = SKSceneScaleModeResizeFill;

最后在GameScene.m中,使用

创建一个新的精灵节点
- (void) didMoveToView:(SKView *)view {
    newclassfile *myNode = [newclassfile createMyNode];
    [self addChild:myNode];
}