我正在开发一款主要精灵是旋转轮的游戏.我想将音频与旋转车轮相关联,当车轮减速时,它会改变音高.当车轮停止旋转时,我希望声音效果停止.有人能指出我正确的方向吗?
override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) { for touch in touches { let location = touch.location(in: self) //Start spinning the wheel if atPoint(location).name == "play_button" { player?.physicsBody?.angularVeLocity = 0 player?.rotatePlayer() //Click back button } else if atPoint(location).name == "back_button" { let play_scene = CharacterSelectScene(fileNamed: "CharacterSelect") play_scene?.scaleMode = .aspectFill self.view?.presentScene(play_scene!,transition: SKTransition.doorsOpenVertical(withDuration: 1)) } else if atPoint(location).name == "settings_button" { let play_scene = SettingsScene(fileNamed: "SettingsScene") play_scene?.scaleMode = .aspectFill self.view?.presentScene(play_scene!,transition: SKTransition.doorsOpenVertical(withDuration: 1)) } } } override func didSimulatePhysics() { let speed = player?.physicsBody?.angularVeLocity if (speed != CGFloat(0.0)) { if (speed! <= CGFloat(0.1)){ finishedRotation = true } } } override func didFinishUpdate() { if (finishedRotation == true) { let play_scene = QuestionScene(fileNamed: "QuestionScene") play_scene?.scaleMode = .aspectFill self.view?.presentScene(play_scene!,transition: SKTransition.doorsOpenVertical(withDuration: 1)) } } func didBegin(_ contact: SKPhysicsContact) { let defaults = UserDefaults.standard var firstBody = SKPhysicsBody() var secondBody = SKPhysicsBody() if (contact.bodyA.node?.name == "pin") { firstBody = contact.bodyA secondBody = contact.bodyB } else { firstBody = contact.bodyB secondBody = contact.bodyA } if (firstBody.node?.name == "pin" && secondBody.node?.name == "geography") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "maths") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "history") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "science") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") } }
Player类中的rotatePlayer方法定义如下:
func rotatePlayer() { let random = GKRandomdistribution(lowestValue: 20,highestValue: 120) let r = random.nextInt() self.physicsBody?.angularVeLocity = 0 self.physicsBody?.angularVeLocity = CGFloat(r) self.physicsBody?.angulardamping = 1.02 }
解决方法
我已经解决了这个问题,代码如下:
func playSound() { let url = Bundle.main.url(forResource: "clicker",withExtension: "m4a")! do { SoundEffect = try AVAudioPlayer(contentsOf: url) guard let players = SoundEffect else { return } players.preparetoPlay() players.play() } catch let error as NSError { print(error.description) } } func didEnd(_ contact: SKPhysicsContact) { let defaults = UserDefaults.standard var firstBody = SKPhysicsBody() var secondBody = SKPhysicsBody() if (contact.bodyA.node?.name == "pin") { firstBody = contact.bodyA secondBody = contact.bodyB } else { firstBody = contact.bodyB secondBody = contact.bodyA } if (firstBody.node?.name == "pin" && secondBody.node?.name == "geography") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") playSound() } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "maths") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") playSound() } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "history") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") playSound() } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "science") { let set_topic = secondBody.node?.name defaults.set(set_topic,forKey: "Topic") playSound() } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。