所以我正在开发一个AR应用程序。我有一个按钮可以启动一个考试/测试模式,使用该模式必须正确回答问题并为每个正确答案获得一个分数。启动测试模式后,将使用defaultCameraController中的pointOfView节点,并将分数显示在ARSCN上。结束测试将从屏幕上删除该节点。但是,在同一会话中再次单击“测试”按钮后,将调用该代码,但是该代码不会出现在屏幕上。开始测试按钮,停止测试按钮和设置记分板功能的代码如下所示。 打扰一下。修复功能后,我必须组织代码。
@IBAction func testButton(_ sender: Any) {
if sceneView.scene.rootNode.childNodes.count > 0{
testScore = 0
learningModeEnabled = false
learningMode.isEnabled = false
for nodePos in nodePositions{
// Create 3D Text
}
startTestButton.isHidden = true
stopTestButton.isHidden = false
//--------------------------------------------------------------------------
setupScoreboard()}
else{
print("No Nodes Detected in Environment")
}
}
@IBOutlet weak var stopTestButton: PressableButton!
@IBAction func stopTestButton(_ sender: Any) {
nodePositions = [:]
sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}
stopTestButton.isHidden = true
startTestButton.isHidden = false
let userDefaults = UserDefaults.standard
userDefaults.setValue(testScore, forKey: "score")
userDefaults.synchronize()
//--------------------------------------------------------------------------
self.sceneView.defaultCameraController.pointOfView?.enumerateChildNodes({ (node, stop) in
node.removeFromParentNode()
})
if userDefaults.data(forKey: "score") != nil{
userScores = userDefaults.array(forKey: "score") as! [Int]
print(userScores)
}
}
//--------------------------------------------------------------------------
func setupScoreboard(){
self.sceneView.defaultCameraController.pointOfView?.enumerateChildNodes({ (node, stop) in
node.removeFromParentNode()
})
let worldCoord : SCNVector3 = (self.sceneView.defaultCameraController.pointOfView?.position)!
let node : SCNNode = self.createNewBubbleParentNode("Score: \(String(testScore))")
node.position = SCNVector3( 0, 0.3, -1)
node.name = "Scoreboard"
self.sceneView.defaultCameraController.pointOfView?.addChildNode(node)
}
编辑:在与问题相关的代码附近添加了注释行。