2014-04-17 6 views
1

나는 내 게임에서 여러 번 사용하는 플리퍼를 나타 내기 위해 SKSpriteNode의 하위 클래스를 작성했습니다. 자식 sprites 색상 속성을 설정하여 이러한 색상을 설정하려고하지만이 설정은 관계없이 하나의 내 스프라이트 인스턴스에서만 작동하는 것으로 보입니다. 제발 내가 잘못하고있는 것을 누군가에게 말해 주거나 이것을하는 더 좋은 방법을 제안 할 수 있습니까? 난 단지 내 스프라이트 하위 클래스의 다른 인스턴스를 다른 색상으로 설정할 수 있기를 원한다. 다음과 같이skspritenode 색상 속성 만 첫 번째 인스턴스에서 설정

내 SKSpriteNode 서브 클래스는 다음과 같이

#import "RSPaddleSprite.h" 

@implementation RSPaddleSprite 
SKSpriteNode *sprite; 

-(id)init{ 
if (self = [super init]) { 
     sprite = [SKSpriteNode spriteNodeWithImageNamed:@"paddle2.png"]; 
     [self addChild: sprite]; 
     } 
    return self; 
    } 

-(id)initWithImageNamed:(NSString *)name{ 
    if (self = [super init]) { 
     sprite = [SKSpriteNode spriteNodeWithImageNamed:name]; 
     [self addChild: sprite]; 
    } 
    return self; 
} 

//function applies physics body to sprite when required 
-(void)applyPhysicsBody{ 
    self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(sprite.size.width/4, sprite.size.height)]; 
    self.physicsBody.affectedByGravity = FALSE; 
    self.physicsBody.mass = 0.1; 
    self.physicsBody.dynamic = TRUE; 
} 

//function sets color of sprite when required 
-(void) setPaddleColor:(SKColor*)color{ 
    sprite.color = color; 
    sprite.colorBlendFactor = 0.9; 
} 

@end 

내가 내 장면의 서브 클래스 함수를 호출하고 있습니다 :

//initialise paddles, position them, add physics and add to scene 
paddle1 = [[RSPaddleSprite alloc ]initWithImageNamed:@"paddle1.png"]; 
paddle1.position = CGPointMake(self.frame.size.width/5,(self.frame.size.height/2)+30); 
[paddle1 applyPhysicsBody]; 
[self addChild:paddle1]; 

paddle2 = [[RSPaddleSprite alloc ]initWithImageNamed:@"paddle1.png"]; 
paddle2.position = CGPointMake((self.frame.size.width/5)*4,(self.frame.size.height/2)+30); 
[paddle2 applyPhysicsBody]; 
[self addChild:paddle2]; 

paddle3 = [[RSPaddleSprite alloc ]initWithImageNamed:@"paddle1.png"]; 
paddle3.position = CGPointMake((self.frame.size.width/3),120); 
[paddle3 applyPhysicsBody]; 
[self addChild:paddle3]; 

paddle4 = [[RSPaddleSprite alloc ]initWithImageNamed:@"paddle1.png"]; 
paddle4.position = CGPointMake((self.frame.size.width/3)*2,120); 
[paddle4 applyPhysicsBody]; 
[self addChild:paddle4]; 

//set paddle to appropriate color 
[paddle1 setPaddleColor:[SKColor colorWithRed:0.15 green:0.15 blue:0.55 alpha:1.0]]; 
[paddle2 setPaddleColor:[SKColor colorWithRed:0.15 green:0.15 blue:0.55 alpha:1.0]]; 
[paddle3 setPaddleColor:[SKColor colorWithRed:0.15 green:0.15 blue:0.55 alpha:1.0]]; 
[paddle4 setPaddleColor:[SKColor colorWithRed:0.15 green:0.15 blue:0.55 alpha:1.0]]; 
이 "스프라이트"전역 변수를 만드는

답변

1
@implementation RSPaddleSprite 
SKSpriteNode *sprite; 

, 따라서 실제로는 sprite으로 참조되는 인스턴스가 하나만 있습니다.

이는 바르 sprite을 할 수있는 올바른 형태 :

@implementation RSPaddleSprite 
{ 
    SKSpriteNode *sprite; 
} 

더 정확하게 인스턴스 변수는 밑줄로 시작되는 코코아 명명 규칙에 충실이했다,

@implementation RSPaddleSprite 
{ 
    SKSpriteNode *_sprite; 
} 
+0

감사합니다 정확히 무엇을 문제가있었습니다. – ceteri

+0

OP가 @property를 사용하는 것이 더 좋지 않습니까? 그렇지 않으면 그/그녀는 적절한 setter와 getter를 구현하는 오버 헤드/허스트를 갖게 될까요? – fuzzygoat

+0

스프라이트는 RSPaddleSprite 클래스 내에서만 사용되므로 @property 일 필요는 없습니다. – LearnCocos2D