2013-10-18 4 views
0

메인 씬은 SKNode 객체를 호출하고 메인 씬에 스프라이트를 추가합니다. 스프라이트가 완료/소멸되면 메인 씬에서 스프라이트를 제거하고 업데이트합니다 점수. 그러나 내가 SKNode 양식을 실행하려고하면 실행되지 않는 것 같지만 오류도 발생하지 않습니다.Xcode SpriteKit SKNode 클래스가 메인 씬에서 코드를 실행하지 않습니다.

아래 코드는 제가 지금 가지고있는 코드입니다. 그것은 문제/비 문제 :)의 일부 단지 코드 전체 코드 아니다

EnemyNode.h 

#import "MyScene.h" 

@class MyScene; 

@interface EnemyNode : SKNode 
@property (nonatomic, assign) MyScene *_scene; 

EnemyNode.m 

-(void)enemyEscaped 
{ 
    NSLog(@"Enemy Escaped"); 

    [_scene.enemyArray removeObject:_enemy]; 
    [_scene enemyAttackedBase]; 

    [_enemy removeAllChildren]; 
    [_enemy removeAllActions]; 
    [_enemy removeFromParent]; 

    [self removeFromParent]; 
} 

MyScene.h 
#import "EnemyNode.h" 

@class EnemyNode; 

@interface MyScene : SKScene 

@property (nonatomic) NSUInteger myMoney; 
@property (nonatomic) EnemyNode *_enemy; 

- (void)enemyWasDestroyed:(NSUInteger)money; 

MyScene.m 
- (void)enemyWasDestroyed:(NSUInteger)money 
{ 
    NSLog(@"money, money, money %lu", (unsigned long)money); 

    self.myMoney += money; 

    SKLabelNode *moneyLabel = (SKLabelNode *)[self childNodeWithName:@"moneyHUD"]; 
    moneyLabel.text = [NSString stringWithFormat:@"Money: %lu",(unsigned long)self.myMoney]; 
} 

내가 전화 할 때 [_scene.enemyArray removeObject : _enemy] [_scene enemyAttackedBase];

메인 장면에서 아무런 변화가 없습니다 (예 : 돈 라벨이 업데이트되지 않음).

아이디어가 있으십니까?

내가이 일을하는 방식이 완전히 잘못 되었습니까?

감사합니다.

답변

0

내 실수가 발견되었습니다. _scene이 init 프로세스 중에 무엇인지 정의하지 않았습니다.

init이 (가)에서 변경되었습니다.

+(id)initNodewithSpriteTexture:(SKTexture *)texture forSpriteNode:(SKSpriteNode *)spriteNode atPosition:(CGPoint)position 
{ 
return [[self alloc] initScene:scene withSpriteTexture:texture forSpriteNode:spriteNode atPosition:position]; 
} 

to;

+(id)initNodeForGame:(MyScene*)scene withSpriteTexture:(SKTexture *)texture forSpriteNode:(SKSpriteNode *)spriteNode atPosition:(CGPoint)position 
{ 

    return [[self alloc] initScene:scene withSpriteTexture:texture forSpriteNode:spriteNode atPosition:position]; 
} 

-(id)initScene:(MyScene*)scene withSpriteTexture:(SKTexture*)texture forSpriteNode:(SKSpriteNode*)spriteNode atPosition:(CGPoint)position 
{ 
    if (self = [super init]) { 
     _scene = scene; 
} 

이제는 모든 것이 제대로 작동합니다.

관련 문제