【发布时间】:2015-08-31 15:08:33
【问题描述】:
我正在尝试继承 SKSpriteNode 以便我可以使用它来为游戏创建具有不同属性的不同角色。我知道这应该是一项微不足道的任务,但我很难理解如何在创建实例时初始化变量。 在标题中我有:
#import <SpriteKit/SpriteKit.h>
@interface MyClass : SKSpriteNode
@property int myVariable;
@end
在实现中:
#import "MyClass.h"
@interface MyClass ()
@end
@implementation MyClass
@synthesize myVariable;
- (id)init {
if (self = [super init]) {
myVariable = 100;
}
return self;
}
当我在场景中创建节点时:
@implementation GameScene
{
MyClass *mySprite;
}
- (void)didMoveToView: (SKView *) view
{
mySprite = [MyClass spriteNodeWithImageNamed:@"image.png"];
}
myVariable 的值为 0,我假设这意味着 spriteNodeWithImageNamed 没有执行 init 方法。如果我使用:
mySprite = [[MyClass alloc] init]; // or mySprite = [MyClass new];
mySprite = [MyClass spriteNodeWithImageNamed:@"image.png"];
变量名被正确设置为 100,但随后被 spriteNodeWithImageNamed 恢复为 0。
我也试过了:
mySprite = [[MyClass alloc] init]; // or mySprite = [MyClass new];
[mySprite setTexture:[SKTexture textureWithImageNamed:@"image.png"]];
在这种情况下,myVariable 的值是正确的,但是当我将节点添加到场景时没有图像出现。使用 spriteNodeWithImageNamed 时调用什么 init 方法?我是否不正确地覆盖了 SKSpriteNode 初始化方法?
【问题讨论】:
-
使用现代 obj-c 和 Xcode,无需
@synthesize
标签: objective-c sprite-kit initialization subclass skspritenode