【发布时间】:2016-10-11 09:52:05
【问题描述】:
请帮我找出错误。
我需要每个打击垫从阵列中播放自己的声音,但只有打击垫 13、14、15 可以。同时我在每个焊盘上放了一个带有节点名称的标签,说明该节点有一个名称,所以看起来问题不在名称中,我无法理解它是什么。 如果您对改进此代码还有其他要说的,请随时说,我是新手,很高兴听到。
我做错了什么?
谢谢
PS:我想说,我在 sprite kit 上这样做只是为了挑战。
import SpriteKit
import GameplayKit
import AVFoundation
class GameScene: SKScene {
var i = 1
let sounds = ["Kick", "Clap","Hat","OpHat","Snare","Cow","Crash","Snap","Chant","Tom","11","12","13","14","15"]
override func didMove(to view: SKView) {
do {
for sound in sounds {
let player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: Bundle.main.path(forResource: sound, ofType: "wav")!) as URL)
player.prepareToPlay()
}
} catch {
}
var frameHightMulti = CGFloat(0)
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
let tittleLabel = SKLabelNode(text: "Let the music play")
tittleLabel.fontSize = 50
tittleLabel.fontName = "Helvetica Nue"
tittleLabel.fontColor = UIColor.white
tittleLabel.position = CGPoint(x: 0, y: 600)
addChild(tittleLabel)
for _ in 1...5 {
var frameWidthMulti = CGFloat(0)
for _ in 1...3 {
let pad = SKSpriteNode(color: UIColor.cyan, size: CGSize(width: 220, height: 220))
pad.physicsBody = SKPhysicsBody(rectangleOf: pad.frame.size)
pad.position = CGPoint(x: -240 + frameWidthMulti, y: -500 + frameHightMulti)
pad.name = sounds[i-1]
let nameLabel = SKLabelNode(text: pad.name)
nameLabel.fontSize = 50
nameLabel.fontName = "Helvetica Nue"
nameLabel.fontColor = UIColor.black
nameLabel.position = pad.position
addChild(pad)
addChild(nameLabel)
frameWidthMulti += pad.size.width + 20
i += 1
}
frameHightMulti += 240
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touchLocation = touches.first?.location(in: self)
if let body = self.physicsWorld.body(at: touchLocation!){
if let z = body.node?.name {
switch z {
case "15":
self.run(SKAction.playSoundFileNamed("15", waitForCompletion: false))
print(z)
case "14":
self.run(SKAction.playSoundFileNamed("14", waitForCompletion: false))
print(z)
case "13":
self.run(SKAction.playSoundFileNamed("13", waitForCompletion: false))
print(z)
case "12":
self.run(SKAction.playSoundFileNamed("12", waitForCompletion: false))
print(z)
case "11":
self.run(SKAction.playSoundFileNamed("11", waitForCompletion: false))
print(z)
case "Tom":
self.run(SKAction.playSoundFileNamed("Tom", waitForCompletion: false))
print(z)
case "Crash":
self.run(SKAction.playSoundFileNamed("Crash", waitForCompletion: false))
print(z)
case "Snap":
self.run(SKAction.playSoundFileNamed("Snap", waitForCompletion: false))
print(z)
case "Chant":
self.run(SKAction.playSoundFileNamed("Chant", waitForCompletion: false))
print(z)
case "Cow":
self.run(SKAction.playSoundFileNamed("Cow", waitForCompletion: false))
print(z)
case "Snare":
self.run(SKAction.playSoundFileNamed("Snare", waitForCompletion: false))
print(z)
case "OpHat":
self.run(SKAction.playSoundFileNamed("OpHat", waitForCompletion: false))
print(z)
case "Hat":
self.run(SKAction.playSoundFileNamed("Hat", waitForCompletion: false))
print(z)
case "Clap":
self.run(SKAction.playSoundFileNamed("Clap", waitForCompletion: false))
print(z)
case "Kick":
self.run(SKAction.playSoundFileNamed("Kick", waitForCompletion: false))
print(z)
default: print("Shit hpns")
}
}
}
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
【问题讨论】:
-
您总是可以通过只做 5 次中的 4 次来运行实验,然后查看“Tom”、“11”、“12”是否正常播放。
-
哦!好主意!我查了一下,它提供了一些新信息,但仍然不明白。现在可以正常播放:12、11、Tom and Chant。所以,4个声音而不是3个。不错)但是如果我做5个中的3个,只有Chant会发出声音......
-
添加结果图片以获得更多视觉反馈
-
我没有崩溃。我正在使用 wav。在这种情况下,我不完全了解“强参考”是什么(对不起,我是新手),但有些垫子可以正常工作。所以,我猜是算法中的问题。
标签: sprite-kit swift3