Ios 如何访问特定子节点Scenekit

Ios 如何访问特定子节点Scenekit,ios,swift,scenekit,Ios,Swift,Scenekit,所以在我的应用程序中,你可以认为它类似于21点。有一副52张牌,你可以在牌的背面重复使用相同的设计,但它有不同的牌面,如王牌黑桃、2颗钻石等 所以在我的Scenekit中,我创建了一个场景来专门设计一张卡。然后我将在我的主场景中复制它52次。我还使用特定的名称(如Card1、Card2、Card3等)唯一地标识每个单独的父节点 在我的视图控制器中,我在代码中执行洗牌操作,并填充纸牌面的图像。然而,当我试着用王牌黑桃分配牌1时,51张牌中的其余牌也被分配了王牌黑桃 卡片场景:包含一张正面普通但背

所以在我的应用程序中,你可以认为它类似于21点。有一副52张牌,你可以在牌的背面重复使用相同的设计,但它有不同的牌面,如王牌黑桃、2颗钻石等

所以在我的Scenekit中,我创建了一个场景来专门设计一张卡。然后我将在我的主场景中复制它52次。我还使用特定的名称(如Card1、Card2、Card3等)唯一地标识每个单独的父节点

在我的视图控制器中,我在代码中执行洗牌操作,并填充纸牌面的图像。然而,当我试着用王牌黑桃分配牌1时,51张牌中的其余牌也被分配了王牌黑桃

卡片场景:包含一张正面普通但背面设计的卡片

Player1Scene:将CardScene添加到此场景,并复制它,因为我有两张以上的卡。在这个场景中,我将我的身份命名为Player1MyCard1、Player1MyCard2等等

主场景:包含各种内容,包括Player1Scene。下面看到的代码就是在这个场景中完成的

问题

我似乎无法唯一地将牌1分配给王牌黑桃,而将牌2分配给其他牌面。我面对的是每一张牌面都被分配了王牌黑桃。下面是我的代码,我尝试将特定的面分配给特定的卡

func SetupNodes(){
    player1MyCard1 = scene.rootNode.childNode(withName: "Player1MyCard1", recursively: true)!
    print(player1MyCard1.name)
    cardFace = player1MyCard1.childNode(withName: "cardFace", recursively: true)!

    let material = SCNMaterial()
    material.diffuse.contents = UIImage(named: "1Thousand")
    material.locksAmbientWithDiffuse = true

    let whiteMaterial = SCNMaterial()
    whiteMaterial.diffuse.contents = UIColor.white
    whiteMaterial.locksAmbientWithDiffuse = true

    cardFace.geometry?.materials = [material, whiteMaterial, whiteMaterial, whiteMaterial, whiteMaterial, whiteMaterial]
}

为什么这一点被否决了?您的
player1MyCard1
是否有可能在每次函数调用时都是同一个指针?如果在第一行末尾添加
.clone()
,会发生什么情况?@Mr_Pouet
player1MyCard1
是唯一的,它是我的SCNNode的标识,附带了两个不同的几何体。但没有同名的函数。我现在无法访问我的Mac电脑。顺便说一句,你觉得代码还可以吗?比如,我的理解是正确的吗?看看代码,你的材料应该是唯一的,因此我怀疑你的卡节点和/或场景在多个函数调用中是相同的。从你的帖子中不清楚的是,你是(1)有多张卡片的单一场景,还是(2)有一张卡片的多个场景。如果可能的话,我会选择解决方案(1)(或者根据您的约束条件按程序执行所有操作)。@Mr_Pouet我有一个
卡片场景
,其中我设计了一张卡片。我还创建了另一个
Player1Scene
,将
cardsene
拖动到
Player1Scene
中。最后,我有一个
main场景
,其中包含各种各样的东西,比如赌桌、其他玩家卡和
Player1Scene
。因此,我在
Player1Scene
中命名了
player1mcard1
SCNNode,上面看到的代码,我在
mainsene
中命名。