主场景调用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];
主场景上没有任何事情发生(即钱币标签没有更新)。
有什么想法吗?
我是怎么做错的?
由于
答案 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;
}
现在一切都像它应该的那样。