我正在使用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
......
答案 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方法执行操作。如果您正在运行该操作,那么当您说无法使操作起作用时,请进行最具体的操作。