我正在Objective-C / Sprite Kit中的一个项目上工作,无法使Sprite Kit操作正常工作,我已经尝试了所见过的一切,但没有任何效果。
这是一些代码:
myscene.h
@property (strong, nonatomic) SKAction *jumpAction;
@property (strong, nonatomic) SKAction *kneelAction;
@property (strong, nonatomic) SKAction *runAction;
myscene.m(使用大小方法初始化)
[self setupCharacter];
[self createDpad];
[self spawnStartupClouds];
//self.physicsWorld.gravity = CGVectorMake(0.2,-2);
self.physicsWorld.gravity = CGVectorMake(0.2 ,-2);
self.physicsWorld.contactDelegate = self;
[self setupActions];
myscene.m(setupActions方法)
-(void) setupActions{
SKTextureAtlas *jumpAtlas = [SKTextureAtlas atlasNamed:@"jump"];
SKTexture *jumpTex1 = [jumpAtlas textureNamed:@"jump1.png"];
SKTexture *jumpTex2 = [jumpAtlas textureNamed:@"jump2.png"];
SKTexture *jumpTex3 = [jumpAtlas textureNamed:@"jump3.png"];
NSArray *jumpAtlasTexture = @[jumpTex1, jumpTex2, jumpTex3];
SKAction* jumpAtlasAnimation = [SKAction animateWithTextures:jumpAtlasTexture timePerFrame:0.1];
SKAction* wait = [SKAction waitForDuration:0.5];
jumpAction = [SKAction sequence:@[jumpAtlasAnimation, wait]];
BBCharacter* leader = (BBCharacter*)[self childNodeWithName:@"character1"];
}
-(void)setupCharacter{
NSLog(@"Setup character");
leader = [BBCharacter node];
leader.position = CGPointMake(100, 230);
[self addChild:leader];
}
似乎(在
setupActions
中)它无法“看到” SKAction
jumpAction
... 最佳答案
在任何类接口的Objective-C中声明属性时,都需要在实现中使用self.propertyName
访问它。您还可以使用_propertyName
访问与该属性关联的实例变量。因此,可以使用jumpAction
或仅使用self.jumpAction
来访问_jumpAction
属性。
这是因为该属性实际上不是实例变量,而是对类数据的封装。请查看documentation以获取适当的说明。
另外,为了能够使用属性的确切名称访问该属性,可以在实现中显式合成该属性。
@implementation MyScene //synthesize properties below this.
@synthesize jumpAction, kneelAction, runAction;
这样做之后,您可以直接访问属性,就像在代码中已经做过的那样。
建议:您无需为SKAction对象使用属性,除非其他类需要访问它们。