0

主场景调用 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 敌人攻击基地];

主场景没有任何反应(即货币标签没有更新)。

有任何想法吗?

我的做法完全错了吗?

谢谢

4

1 回答 1

0

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

更改了初始化;

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

现在一切正常。

于 2013-10-19T15:06:02.687 回答