Sprite Kit SKActions没有开火

时间:2014-08-31 17:54:32

标签: ios objective-c sprite-kit skaction

我正在使用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(init w / size method)

[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 ......

3 个答案:

答案 0 :(得分:1)

在任何类接口中声明Objective-C中的属性时,需要使用self.propertyName在实现中访问它。您还可以使用_propertyName访问与该属性关联的实例变量。因此,可以使用jumpAction或简单地self.jumpAction访问_jumpAction属性。

这是因为该属性实际上不是实例变量,而是对类的封装。数据。请查看documentation以获得正确的解释。

或者,为了能够使用它的确切名称访问该属性,您可以在实现中明确地合成它。

@implementation MyScene //synthesize properties below this.

@synthesize jumpAction, kneelAction, runAction;

执行此操作后,您可以直接访问属性,就像在代码中一样。

建议:除非需要其他类访问,否则不需要使用SKAction对象的属性。

答案 1 :(得分:1)

希望这会对你有所帮助

好的,通过查看您的代码我能够理解您的jump.atlas文件夹中有数字图像 并且当玩家跳下时你想让你的玩家动画到那些纹理。

所以首先添加这一行

[_playerNode runAction: jumpAction];

我的代码中没有看到这一行。

答案 2 :(得分:0)

您已设置了所有操作,现在您只需告诉节点使用runAction方法执行操作。如果您正在运行该操作,那么当您说无法使操作起作用时,请进行最具体的操作。