我正在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对象使用属性,除非其他类需要访问它们。

10-08 06:09