Xcode SpriteKit SKNode类不在主场景上执行代码

时间:2013-10-18 20:24:08

标签: ios xcode

主场景调用SKNode对象并将精灵添加到主场景等。当精灵完成/破坏时,我想从主场景中删除精灵并更新分数。但是,当我尝试从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];

主场景上没有任何事情发生(即钱币标签没有更新)。

有什么想法吗?

我是怎么做错的?

由于

1 个答案:

答案 0 :(得分:0)

发现我的错误。我没有定义在init过程中_scene是什么。

更改了init;

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

+(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;
}

现在一切都像它应该的那样。