从另一个类访问属性的正确方法是什么?

时间:2016-02-09 13:10:45

标签: objective-c sprite-kit

我想从我的Enemy类的walk方法访问我的地图。我猜我可以创建一个GameScene实例,但这似乎不是一个好主意。

我还能怎么做?

GameScene.m

@interface GameScene : SKScene
@property (nonatomic) Map *map;
@end

@implementation GameScene


-(void)didMoveToView:(SKView *)view {

    // map
    self.map = [Map new];
    self.map.level = 1;
    [self.map generateMap];
    [self addChild:self.map];

    // enemy
    Enemy *enemy = [Enemy new];
    [self addChild:enemy];

}

Enemy.m

#import "Enemy.h"

@implementation Enemy

-(instancetype) init{
  ...
}


-(void)walk{
    NSLog(@"enemy walk");   
}

@end

1 个答案:

答案 0 :(得分:1)

所以你希望你的敌人能够检索对当前GameScene的引用

Enemy添加到GameScene后,您可以使用scene属性(Enemy继承自SKNode)来检索SKScene {1}}他住在那里。

接下来,您需要将SKScene转换为GameScene指针。

  

以下代码进入Enemy类。

在Swift中

let gameScene = self.scene as? GameScene

在Objective-C

GameScene * gameScene = (GameScene*) self.scene;

警告

如果您在Enemy中调用此代码,然后将其添加到您的GameScene或删除之后,您的gameScene将包含nil值。