2014-11-05 44 views
0

我試圖從第一次將主方法從一個新的GameScene移動到一個新的文件/類,所以我可以保持更清潔,真的只是儘量保持代碼儘可能相同,並將其放在項目的自己的文件中。將SpriteNode方法從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」);在控制檯,它告訴我方法正在運行我猜。

任何幫助,這將是非常讚賞

回答

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]; 
} 
+0

嗨@ 0x141E感謝您的回覆!嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖嘖〜但是隻是把一個方法放在另一個文件裏,不是嗎這就是處理新文件/類等時的工作方式嗎?沒有簡單的方法來做到這一點? 這段代碼確實有用,但是我說我想讓這個節點也變成一個物理實體我現在該怎麼做?希望我能做點像 //你的代碼 if(self = [super initWithColor:color size:size]){self.position = CGPointMake(200,200); //我的物理主體代碼在這裏 self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(35,35)]; 但我想這不是那麼簡單? – TF35Lightning 2014-11-05 06:31:06

相關問題