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

Ios7 iOS Spritekit无法在子类SKSpriteNode上运行SKAction,ios7,subclass,sprite-kit,skspritenode,skaction,Ios7,Subclass,Sprite Kit,Skspritenode,Skaction,对于我的问题,我想要一个更具概念性的答案,而不是一个代码答案 我有一个使用Spritekit的iOS应用程序。我有一个类,它是一个SKSpriteNode的子类,因此我可以向节点添加额外的属性。我能够成功地创建SKSpriteNode并将其显示在我的SKSpriteNode背景上,并使用操作将其删除。但是,当我运行任何操作时,例如: SKAction * moveAction = [SKAction moveTo:CGPointMake(100, 100) duration: 1]; 它不

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

我有一个使用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
无论何时运行操作,它都会记录消息“Running action!”,因此我知道它正在访问该方法,只是出于某种原因不执行操作

请让我知道,如果你需要任何更多的代码或信息!
谢谢。

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

我怀疑这与您的子类没有在
super
上调用
init
(或
initWith…
)方法有关。我使用了[super initWithPicture:@“picture”]和[MySubclass spriteNode。不确定哪种方法更正确,但他们都做了同样的事情。对于当前的解决方案,我使用的是spritenode的userData,到目前为止运行良好。我只使用iPad模拟器完成了这项工作,但这很好。目前,我已经调整了编程,以使用节点的userData(作为字典)。它看起来确实像spritekit或模拟器中的一个bug,这就是为什么我选择了不同的路线。谢谢你的回复!
@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