【发布时间】:2020-10-18 16:35:23
【问题描述】:
我正在使用 SKSprite 节点在 Swift 中创建一个纸牌游戏来显示纸牌面。
在我的“发牌”功能中,它向每位玩家发 3 张牌,以“循环”方式一次发一张。这工作正常,但我正在尝试添加一些动画 - 我试图通过动画显示每张卡片从牌组移动到玩家手的位置,从而显示每张卡片被发给本地玩家。
我可以让 Sprite 节点在没有动画的情况下显示,但是当我尝试使用 SKAction 时,它在动作完成后给我以下错误:
原因:'尝试添加已经有父节点的 SKNode:名称:'本地玩家节点'纹理:['CARD39' (203 x 350)] 位置:{281.25, 100.05000305175781}
class GameScene: SKScene {
let tempCard = SKSpriteNode(texture: SKTexture(imageNamed: "back"))
func deal() {
players = createPlayers(with: numberOfPlayers)
tempCard.setScale((screenSize.width/100) * 0.2)
tempCard.zPosition = 10
tempCard.name = "tempcard"
addChild(tempCard)
let localPlayer = 0
var i = 0
repeat {
print("Card number: \(i)")
var x = 0
let xPos = screenSize.width * (0.25 * CGFloat(i+1))
players.forEach { player in
let newCard = self.deck.dealOneCard()
player.hand.addCard(card: newCard)
localPlayerNode = players[localPlayer].hand[i].cardImage()
localPlayerNode.position = CGPoint(x: xPos, y: screenSize.height * 0.15)
localPlayerNode.setScale((screenSize.width/100) * 0.2)
localPlayerNode.name = "local player node"
if player.id == localPlayer {
let moveCard = SKAction.move(to: CGPoint(x: xPos, y: screenSize.height * 0.15),duration: 1.5)
//addChild(localPlayerNode) --using this instead of SKAction works
tempCard.run(moveCard, completion: {() -> Void in
self.tempCard.removeFromParent()
self.addChild(self.localPlayerNode)
})
}
x+=1
}
i+=1
} while i<3
【问题讨论】:
-
“它给了我以下错误”哪里!? tempcard...它是干什么用的?它来自哪里?
-
嗨! SKAction 完成时出现错误。 tempCard 只用在这个功能里,它只用来显示卡片背面的图像,我已经更新了帖子,我知道是否需要添加更多细节