【发布时间】:2017-03-02 09:13:13
【问题描述】:
我是 Swift 新手,如果我犯了菜鸟错误,我深表歉意。如果两个盒子颜色相同,我试图让两个盒子在它们接触时消失。到目前为止,我有以下代码:
此代码设置游戏:
import SpriteKit
import GameplayKit
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMove(to view: SKView) {
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
physicsWorld.contactDelegate = self
let background = SKSpriteNode(imageNamed: "background.jpg")
background.size = self.frame.size;
background.position = CGPoint(x: 0, y: 0)
background.blendMode = .replace
background.zPosition = -1
addChild(background)
}
生成随机颜色的代码:
enum Color {
case ColorRed
case ColorGreen
case ColorBlue
public var color: UIColor {
switch self {
case .ColorRed: return UIColor(red: 255, green: 0, blue: 0, alpha: 1)
case .ColorGreen: return UIColor(red: 0, green: 255, blue: 0, alpha: 1)
case .ColorBlue: return UIColor(red: 0, green: 0, blue: 255, alpha: 1)
}
}
static var all: [Color] = [.ColorRed, .ColorGreen, .ColorBlue]
static var randomColor: UIColor {
let randomIndex = Int(arc4random_uniform(UInt32(all.count)))
return all[randomIndex].color
}
}
这是重要的部分 - 对象之间的实际接触:
func didBegin(_ contact: SKPhysicsContact) {
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
let firstBody = contact.bodyA.node as! SKSpriteNode!
let secondBody = contact.bodyB.node as! SKSpriteNode!
if firstBody!.color == secondBody!.color {
firstBody!.removeFromParent()
secondBody!.removeFromParent()
}
} else {
let firstBody = contact.bodyB.node as! SKSpriteNode!
let secondBody = contact.bodyA.node as! SKSpriteNode!
if firstBody!.color == secondBody!.color {
firstBody!.removeFromParent()
secondBody!.removeFromParent()
}
}
}
最后是用户触摸屏幕时的代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let location = touch.location(in: self)
let box = SKSpriteNode(color: UIColor.red, size: CGSize(width: 64, height: 64))
box.color = Color.randomColor
box.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 64, height: 64))
box.position = location
addChild(box)
}
}
我已提供所有代码,以便您了解设置。提前感谢您的帮助。
【问题讨论】:
-
运行代码时实际看到的内容以及它与您的预期有何不同。此外,您的 func didBegin 的一半是多余的,因为您删除了任何进入函数的节点。
-
它与您的要求无关,但为什么要为 Color 创建枚举?为什么不在 UIColor 扩展中创建静态计算属性“randomColor”?
标签: ios swift sprite-kit swift3 skspritenode