首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKWarpGeometry on SKLabelNode as of SKEffectNode倒转标签

SKWarpGeometry on SKLabelNode as of SKEffectNode倒转标签
EN

Stack Overflow用户
提问于 2016-11-22 23:28:19
回答 2查看 444关注 0票数 4

我试图将SKLabelNode作为SKEffectNode的子代(文档说您可以这样做),但它在应用翘曲之前将标签节点倒转。这可能是个窃听器,但在我把它归档之前,我想我应该先问一下.

这是我的密码:

代码语言:javascript
复制
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函数,它就能正常工作。

新代码如下:

代码语言:javascript
复制
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,并对其进行了扭曲。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-29 20:28:17

根据0x141E的评论编辑了我的问题作为答案。

票数 1
EN

Stack Overflow用户

发布于 2020-02-19 04:43:40

如果您总是扭曲您的标签节点(要么连续动画,要么最初应用翘曲),您可以使用labelNode.yScale = -1提前翻转您的标签节点。当你翘曲的时候,它就会朝上。有点傻,但对我来说很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40753534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档