iOS Spritekit无法在子类SKSpriteNode上运行SKAction

时间:2014-03-08 17:09:37

标签: ios7 subclass sprite-kit skspritenode skaction

对于我的问题,我想要一个更概念性的答案而不是代码。

我有一个使用Spritekit的iOS应用程序。我有一个子类SKSpriteNode的类,以便我可以向节点添加其他属性。我能够成功创建SKSpriteNode并将其显示在我的SKSpriteNode背景上并使用操作将其删除。但是,当我执行任何操作时,例如:

SKAction * moveAction = [SKAction moveTo:CGPointMake(100, 100)   duration: 1];

它不会为我的子类执行操作。但是,如果我将此相同的操作应用于另一个SKSpriteNode而不是执行操作。这些是在每5秒运行一次的计时器上创建的。

以下是一些示例代码:

MyScene.m:

-(void) timeTest {
     MySubclass * subclassTest = [[MySubclass alloc] initWithImage:@"myImage"];
     SKSpriteNode *test = [SKSpriteNode spriteNodeWithImageNamed:@"myImage"];
     subclassTest.position = CGPointMake(0, 0);
     test.position = CGPointMake(0, 100);

     [self.background addChild:subclassTest];
     [self.background addChild:test];

     SKAction * moveAction = [SKAction moveTo:CGPointMake(300, 300)   duration: 2];

     [subclassTest runAction: moveAction];
     [test runAction: moveAction];
 }

MySubclass.h

#import <SpriteKit/SpriteKit.h>

@interface MySubclass : SKSpriteNode

-(MySubclass *) initWithImage: (NSString *) image

@end

MySubclass.m

@implementation MySubclass

-(MySubclass *) initWithImage: (NSString *) image
{
    self = [MySubclass spriteNodeWithImageNamed:image];

    self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
    self.physicsBody.dynamic = NO; // Doesnt move with physics
    self.physicsBody.categoryBitMask = MySubclassCategory; 
    self.physicsBody.contactTestBitMask = otherCategory;
    self.physicsBody.collisionBitMask = 0;

    return self;
}

-(void) runAction:(SKAction *)action
{
    [super runAction:action];
    NSLog(@"Running action!");
}

@end

每当动作运行时,它都会记录消息“正在运行!”,所以我知道它正在使用该方法,只是因为某些原因没有执行动作?

如果您需要更多代码或信息,请与我们联系! 感谢。

1 个答案:

答案 0 :(得分:0)

我复制了您的代码,并且该操作在MySubclass对象上运行正常。你试过在模拟器和硬件中运行它吗?动作是否在模拟器中运行? iPhone 5s的64位架构上存在SKAction错误。