extension SCNNode{
/// Doubles The Size Of The SCNNode & Then Returns It To Its Original Size
func growAndShrink(){
//1. Create An SCNAction Which Will Double The Size Of Our Node
let growAction = SCNAction.scale(by: 2, duration: 5)
//2. Create Another SCNAction Wjich Will Revert Our Node Back To It's Original Size
let shrinkAction = SCNAction.scale(by: 0.5, duration: 5)
//3. Create An Animation Sequence Which Will Store Our Actions
let animationSequence = SCNAction.sequence([growAction, shrinkAction])
//4. Run The Sequence
self.runAction(animationSequence)
}
}
2条答案
按热度按时间5lhxktic1#
我个人并不认为对
SCNNode
进行子类化有什么错,当然这取决于您为什么需要这样做。此处的关键考虑事项如下:
如果要添加每个SCNNode都应可用的通用功能,请进行扩展。
然后,所有SCNNode示例都可以调用这些新方法。
另一方面:
如果您新增的功能应该限制在SCNNode的特殊执行行程,而且您需要特别识别这些执行行程:然后创建一个子类,因为只有这些方法的示例可以使用新方法。
如果您选择使用
SCNNode
扩展,这意味着您创建的任何函数都可以应用于任何SCNNode
。例如,如果您希望允许任何
SCNNode
增长和收缩,则extension
将是您的最佳选择,例如:然而,如果你想创建一个
SCNNode
,它的函数只对该示例可用,那么创建一个subclass
可能是前进的方向。假设我们需要用
SCNPlaneGeometry
创建一个SCNNode
,SCNPlaneGeometry
为我们提供了关于该节点的特定信息,那么我们可以创建一个子类,如下所示:在您的例子中,由于您计划拥有非常具体的示例,例如卡车、飞机等,每个示例都有自己的特定功能,因此使用
SCNNode
子类可能是前进的方向。希望能帮上忙...
**更新:**根据您的要求,例如,在使用
.scn file
的情况下,这将如何工作?某些
pseudo code
可能如下所示:然后您可以初始化和管理这些功能,如下所示:
希望能帮上忙...
qij5mzcb2#
对SCNNode进行子类化是绝对、完全、正常的。
我真的 * 从来没有见过 * 一个“普通”SCNNode在任何项目中使用。你会用它做什么?
在S.O.上有大约五条评论说“你不应该子类化SCNNode”。这五条评论完全错误。
Apple在一份文档中提到,您不能对SCN***场景***...
这个网络流言似乎是由一个打字错误引发的:
似乎在scene kit的早期,苹果开发者网站上的一位作者在一篇关于SCNScene的文章中,打了一个错字,写了“你不能对节点进行子类化”,而他们正在键入如何不可能对场景进行子类化。
这是复制两三次的人试图写的答案在不同的论坛,包括SO。
任何人都可以给予无数个将节点子类化的例子:
{As顺便说一句,如果您想“子类化”Scene,您需要子类化
SCNView
,这是您在每个Scene Kit项目中所做。}