将父类对象分配给SpriteKit中的继承类对象

Posted

技术标签:

【中文标题】将父类对象分配给SpriteKit中的继承类对象【英文标题】:Assign parent class object to inherited class object in SpriteKit 【发布时间】:2016-03-20 01:57:16 【问题描述】:

当我在我的场景中检测到两个 SKSpriteNode-s 之间的碰撞时,我可以捕捉到physicsBody.node。但是,我确信碰撞的对象是我自己的一些对象,它们实际上继承了 SKSpriteNode。例如,其中一个发生碰撞的对象是 StaticLevelElement。现在,我希望通过某种转换或其他方式将该 SKNode 分配给我的 StaticLevelElement * sle。

StaticLevelElement * staticLevelElement = notTheHero.node; 

注意这里 notTheHero.node 是我的 StaticLevelElement。这实际上有效,但给出了我的警告: “使用 'SKNode' 类型的表达式初始化 'StaticLevelElement' 的不兼容指针类型......” 我不想要这个警告并且想要正确地做到这一点,所以它不会出现。

【问题讨论】:

【参考方案1】:

你可以这样做:

StaticLevelElement * staticLevelElement = (StaticLevelElement*)notTheHero.node;

这称为类型转换。请注意,这不会更改底层实例。该实例只是以不同的方式处理。

例如,如果底层实例是 SKNode 或其子类,但不具体是 StaticLevelElement,如果您尝试将其用作 StaticLevelElement,应用程序可能会崩溃。

因此,如果您完全确定投射不会失败,那么这样做是安全的。

【讨论】:

以上是关于将父类对象分配给SpriteKit中的继承类对象的主要内容,如果未能解决你的问题,请参考以下文章

java中可以将父类对象强制转换为子类对象吗?直接将父类对象强制转换为子类对象,与将上转型对象强制

用父类对象给子类对象赋值数据

javaScript基础

关于常见继承的几种方法

面试--基础

ES5 寄生式继承