【问题标题】:iOS Spritekit Cannot Run SKAction on a Subclassed SKSpriteNodeiOS Spritekit 无法在子类 SKSpriteNode 上运行 SKAction
【发布时间】:2014-04-11 22:00:07
【问题描述】:

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

我有一个使用 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

每当操作运行时,它都会记录消息“正在运行操作!”,所以我知道它正在访问该方法,只是由于某种原因不执行操作?

如果您需要更多代码或信息,请告诉我! 谢谢。

【问题讨论】:

  • 我怀疑这与您的子类没有在 super 上调用 init(或 initWith...)方法有关。
  • 我同时使用了 [super initWithPicture: @"picture"] 和 [MySubclass spriteNode..] 。不知道什么是更正确的方法,但他们都做了同样的事情。对于当前的解决方法,我将 userData 用于 spritenode,到目前为止效果很好。

标签: ios7 subclass sprite-kit skspritenode skaction


【解决方案1】:

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

【讨论】:

  • 我只使用 iPad 模拟器完成了这项工作,但很高兴知道这一点。目前我已经调整了我的编程以使用节点的 userData(作为字典)。它确实看起来像是 spritekit 或模拟器中的某个错误,这就是我选择不同路线的原因。感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2016-03-07
  • 2014-09-03
  • 1970-01-01
  • 2014-07-26
  • 2020-10-18
相关资源
最近更新 更多