我试图将SKLabelNode作为SKEffectNode的子代(文档说您可以这样做),但它在应用翘曲之前将标签节点倒转。这可能是个窃听器,但在我把它归档之前,我想我应该先问一下.
这是我的密码:
func warpNode(_ node: SKEffectNode)
{
if #available(iOS 10.0, *)
{
let sourcePositions: [vector_float2] =
[
vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object
vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object
vector_float2(0, 1), vector_float2(0.5, 1), vector_float2(1, 1) //top row of object
]
let destinationPositions: [vector_float2] =
[
vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object
vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object
vector_float2(0, 0.8), vector_float2(0.5, 0.8), vector_float2(1, 0.8) //top row of object
]
let warpGeometryGrid = SKWarpGeometryGrid(columns: 2, rows: 2, sourcePositions: sourcePositions, destinationPositions: destinationPositions)
let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 2, rows: 2)
node.warpGeometry = warpGeometryGridNoWarp
let warpAction = SKAction.animate(withWarps: [warpGeometryGridNoWarp, warpGeometryGrid, warpGeometryGridNoWarp], times: [0.25, 0.5, 0.75], restore: true)
node.run(warpAction!)
}
else
{
print("Need iOS >= iOS 10 to warp!!!")
}
}
let effectNode = SKEffectNode()
effectNode.shouldEnableEffects = true
addChild(effectNode)
let labelNode = SKLabelNode(fontNamed: "Chalkduster")
labelNode.text = "Label"
effectNode.addChild(labelNode)
warpNode(effectNode)这段代码应该压下标签的顶部,然后返回到它原来的位置(就像你推了一个球或什么东西一样),然而,它把它倒过来,然后挤压顶部(现在是单词的底部),然后返回到它原来的大小和位置(右侧)。
编辑:基于0x141E的评论,我将SKLabelnode转换为SKTexture,并添加了一个新的SKSpriteNode。如果我在warpNode上使用effectNode函数,它会产生同样的效果:把单词倒过来,然后再应用squish。但是,如果我直接在新的warpNode上使用SKSpriteNode函数,它就能正常工作。
新代码如下:
func warpNode(_ node: SKSpriteNode)
{
if #available(iOS 10.0, *)
{
let sourcePositions: [vector_float2] =
[
vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object
vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object
vector_float2(0, 1), vector_float2(0.5, 1), vector_float2(1, 1) //top row of object
]
let destinationPositions: [vector_float2] =
[
vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object
vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object
vector_float2(0, 0.8), vector_float2(0.5, 0.8), vector_float2(1, 0.8) //top row of object
]
let warpGeometryGrid = SKWarpGeometryGrid(columns: 2, rows: 2, sourcePositions: sourcePositions, destinationPositions: destinationPositions)
let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 2, rows: 2)
node.warpGeometry = warpGeometryGridNoWarp
let warpAction = SKAction.animate(withWarps: [warpGeometryGridNoWarp, warpGeometryGrid, warpGeometryGridNoWarp], times: [0.25, 0.5, 0.75], restore: true)
node.run(warpAction!)
}
else
{
print("Need iOS >= iOS 10 to warp!!!")
}
}
let labelNode = SKLabelNode(fontNamed: "Chalkduster")
labelNode.text = "Label"
let labelNodeTexture = SKView().texture(from: labelNode)!
let labelNodeSprite = SKSpriteNode(texture: labelNodeTexture)
addChild(labelNodeSprite)
warpNode(labelNodeSprite)我只是删除了代码的整个effectNode部分,并添加了新的sprite,并对其进行了扭曲。
发布于 2016-11-29 20:28:17
根据0x141E的评论编辑了我的问题作为答案。
发布于 2020-02-19 04:43:40
如果您总是扭曲您的标签节点(要么连续动画,要么最初应用翘曲),您可以使用labelNode.yScale = -1提前翻转您的标签节点。当你翘曲的时候,它就会朝上。有点傻,但对我来说很管用。
https://stackoverflow.com/questions/40753534
复制相似问题