2014-04-27 7 views
1

SpriteKit을 처음 사용하고 MyScene.m에서 클래스에 만들어진 객체 (원)를 표시하려고합니다.iOS SpriteKit 다른 클래스에서 객체를 만들고 표시합니다.

가 CreateNewCircle.h에 내가 쓴 :

#import <SpriteKit/SpriteKit.h> 

@interface CreateNewCircle : SKScene 

-(void) addNewCircle; 

@end 

와하는 .m (CreateNewCircle.m)에서

가 :

#import "CreateNewCircle.h" 

@implementation CreateNewCircle 

-(void) addNewCircle { 

    const CGSize size = self.frame.size; 

    const CGPoint center = CGPointMake(size.width * 0.5, size.height * 0.5); 

    CGRect box = CGRectMake(center.x - 40.0, center.y - 40.0, 80.0, 80.0); 

    SKShapeNode *shapeNode = [[SKShapeNode alloc] init]; 
    shapeNode.path = [UIBezierPath bezierPathWithOvalInRect:box].CGPath; 
    shapeNode.fillColor = [SKColor redColor]; 
    shapeNode.strokeColor = nil; 
} 

@end 

지금이 전화를 시도하고 이것이 내가 무엇을 가지고 방법 (즉, 디스플레이 원 화면) 형태 MyScene.m :

MyScene.h :

#import <SpriteKit/SpriteKit.h> 

@interface MyScene : SKScene 

@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; 
} 

빌드는 OK,하지만 난 실행할 때, 아무것도 표시되지 않습니다. 나는 다음과 같은 "addchild"라인을 변경하려고 시도했다 :

[circle1 setName:@"circleOne"]; 

[self childNodeWithName:@"circleOne"]; 

그러나 같은 결과 : 빈 화면. MyScene.m에서 직접 동일한 코드를 작성하면 원이 표시되므로 코드가 정확해야합니다. 누군가 나를 기쁘게 할 수 있습니까 ?-)?

감사합니다. 이 예에서

답변

0

봐 당신은 당신의 코드에 필요한 변경 할 수 있도록 :

MyScene.h

#import <SpriteKit/SpriteKit.h> 

@interface MyScene : SKScene 

@end 

MyScene.m

#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 

CreateNewSprite을 .h

#import <SpriteKit/SpriteKit.h> 

@interface CreateNewSprite : SKShapeNode 

@end 

CreateNewSprite.m

#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 
+0

오히려 단지 코드를 많이 덤핑보다는 영업 이익은 데 문제를 설명하는 좋은 수 있습니다. –

+0

@JesseRusak - 그럼 그 사람에게 설명해주십시오. 나는 항상 예를 ​​통해 배우기를 더 좋아했습니다. – sangony

+0

그래, 몇 가지 변경을 시도했지만 여전히 작동하지 않습니다. 예를 들어 다음과 같은 클래스가 있습니다 : '- (instancetype) init {' 'if (self = [super init]) {' '.............. ..' 그리고 내 CreateNewCircle 클래스의 하위 클래스를 SKSpriteNode로 변경했습니다. – aleciuf