我在Swift中拖动SKSpriteNode
。拖动精灵后我想将它恢复到原来的位置。做这个的最好方式是什么?现在,我试图将它直接移回指定位置(见代码)。但是,我无法抓住场景的屏幕尺寸。使用我当前运行的代码,它将节点更多地返回到我想要的左下角(我相信这是因为我引用了self)。如何获得场景的大小?
我尝试使用scene.frame.size.width
,但仅使用self.frame
成功。使用scene.frame.size.width
会返回"SKScene? does not have a member 'frame'"
这是我SKSpriteNode
类文件中的当前函数:
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
for touch in touches {
zPosition = 0
let newPosition = CGPointMake(CGRectGetMaxX(scene.frame.size.width) * 0.14 , CGRectGetMidY(scene.frame.size.height) * 0.25)
removeAllActions()
let returnSprite = SKAction.moveTo(newPosition, duration: 0.3)
let dropDown = SKAction.scaleTo(0.5, duration: 0.2) //Added Drop Effect
runAction(SKAction.group([returnCard,dropDown]))
}
}
感谢您的时间和我的关系。我是新手。
更新: 我仍然不知道如何在精灵节点内调用场景。但是,我通过在init参数中添加CGPoint并从那里引用位置来解决了这个问题。
答案 0 :(得分:1)
将scene.frame.size.width
更改为scene.size.width
。 SKScene
具有size
属性。它还具有view
的属性。请注意,size
是分数。如果您正在进行数学计算以根据大小生成位置,则需要考虑场景的anchorPoint
。
默认的anchorPoint是0,0,它是视图框架矩形的左下角。这就是为什么事情“更左下角”。
我假设self.frame
工作的原因是因为你在SKView
课程中这样做。