【问题标题】:How to call a method of super class form subclass SpriteKit如何调用超类形式子类SpriteKit的方法
【发布时间】:2015-07-29 07:30:51
【问题描述】:

我将SKSpriteNode 子类化以在SKButton.h 中创建SKButton

@interface SKButton : SKSpriteNode

现在我想通过SKButton.m中的方法更改按钮图像

self = [SKSpriteNode spriteNodeWithImageNamed:image];

这里的 self 是 SKButton,但它给了我错误

不能分配给 init 系列中方法之外的“self” 从“SKSpriteNode *”分配给“SKButton *”的指针类型不兼容

我在SKButton.m也试过这个

self = [self spriteNodeWithImageNamed:image];

它给了我错误

“SKButton”没有可见的@interface 声明选择器 'spriteNodeWithImagedNamed:'

【问题讨论】:

  • 您需要更改texture 属性。您不能将 self 重新分配给新的对象实例,这是您正在尝试做的事情。
  • @0x141E 与self = [self spriteNodeWithImageNamed:image];相同
  • @Paulw11 你能告诉我怎么做吗?

标签: ios objective-c sprite-kit textures skspritenode


【解决方案1】:

spriteNodeWithImageNamed:SKSpriteNode 上的一个类方法,它使用提供的图像返回一个新的 SKSpriteNode。本质上,你想用这条线做什么 -

self = [SKSpriteNode spriteNodeWithImageNamed:image];

是将当前对象更改为新对象-您不能这样做。即使可以,也将是新的SKSpriteNode,而不是新的SKButton

您需要做的是操作节点的texture 属性-

self.texture=[SKTexture textureWithImageNamed:image];

【讨论】:

    【解决方案2】:

    在这一行:

    self = [SKSpriteNode spriteNodeWithImageNamed:image];
    

    您将SKSpriteNode 向下转换为SKButton,这是不正确的,因为SKSpriteNode 实例没有SKButton 提供的额外实现。

    由于SKButtonSKSpriteNode 的子类,它包含它的所有功能,因此您可以这样做:

    - (void)buttonClicked {
       [self setTexture:[SKTexture textureWithImageNamed:"buttonClicked.png"]];
    }
    

    【讨论】:

    • 没有例子我很难理解你在这里所说的
    • 正在添加一个:)
    • 您不能将字符串分配给texture 属性 - 您需要从图像名称生成SKTexture
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2011-10-24
    • 2012-04-18
    相关资源
    最近更新 更多