当我点击时,我喜欢带有一个点的模具面以替换带有两个点的那个(并且将1个模具移动到行上,同时将另一个模具移动到行中)并且如果最后一个模具在最后,得到它来替换行中的第一个骰子。更换SKTextures会与此有关吗?先感谢您。
编辑:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
let touchLocation = touch.locationInNode(self)
let touchedNode = self.nodeAtPoint(touchLocation)
let texRight = SKAction.setTexture(SKTexture(imageNamed: "DieFace1"))
DieFace2.runAction(texRight)
}
}
编辑2:
import SpriteKit
var arrayOfDieFaces = [onE, twO, threE, fouR, fivE]
class GameScene: SKScene {
}
func replace() {
var count = 1
while count <= 5 {
let changeTexture = SKAction.setTexture(SKTexture(imageNamed: "Dice\(count)"))
if count == 5 {
arrayOfDieFaces[0].runAction(changeTexture)
}
else{
arrayOfDieFaces[count].runAction(changeTexture)
}
count += 1
}
arrayOfDieFaces.append(arrayOfDieFaces[0])
arrayOfDieFaces.dropFirst()
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
let touchLocation = touch.locationInNode(self)
let touchedNode = self.nodeAtPoint(touchLocation)
replace()
}
}
答案 0 :(得分:1)
我认为这应该有效(未经测试),假设您的DieFaces是1到6:
var arrayOfDieFaces = [DieFace1, DieFace2, DieFace3, DieFace4, DieFace5, DieFace6]
func changeTextures() {
var count = 1
while count <= 6 {
let changeTexture = SKAction.setTexture(SKTexture(imageNamed: "DieFace\(count)"))
if count == 6 {
arrayOfDieFaces[0].runAction(changeTexture)
}
else{
arrayOfDieFaces[count].runAction(changeTexture)
}
count += 1
}
arrayOfDieFaces.append(arrayOfDieFaces[0])
arrayOfDieFaces.dropFirst()
}
只需在touchesBegan()
函数中调用此函数。
答案 1 :(得分:1)
这种方法改变了每个骰子的位置,而不是改变它的纹理。通过改变位置,它保持唯一识别每个骰子的能力(例如,通过名称)。
首先,创建一个名为SKNode
的{{1}},并定义每个骰子之间的大小和间距。
dice
其次,创建骰子节点并按顺序将它们添加到let dice = SKNode()
let diceSize = CGSizeMake(10, 10)
let spacing:CGFloat = 2
dice
并使用
SKNode
请注意,每个骰子的位置取决于数组中节点的位置。
最后,将以下内容添加到您的代码中。
for i in 0..<6 {
let sprite = SKSpriteNode ...
sprite.physicsBody = SKPhysicsBody( ...
sprite.physicsBody?.categoryBitMask = UInt32(0x1 << i)
sprite.position = CGPointMake(CGFloat(i)*(diceSize.width+spacing) , 0)
dice.addChild (sprite)
}
// Center SKNode in the view
dice.position = CGPointMake (CGRectGetMidX(view.frame),CGRectGetMidY(view.frame))
addChild (dice)