Applying WarpGeometry on SKEffect nodes inverts the child Sprite

let action = SKAction.repeatForever(SKAction.sequence([action5, getNoWarp(0.2)!, SKAction.wait(forDuration: 1)]))
scene.addChild(sprite)
sprite.run(action)


The above works fine.


let action = SKAction.repeatForever(SKAction.sequence([action5, getNoWarp(0.2)!, SKAction.wait(forDuration: 1)]))
let effectNode = SKEffectNode()
effectNode.addChild(sprite)
scene.addChild(effectNode)
effectNode.run(action)



But, the code above turns the sprite upside down.


Cocoa project. Mac OSX 10.12.5

XCode 8.3.3

Replies

May we see the implementation of getNoWarp(...)? Depending on your configuration of SKWarpGeometryGrid, flipping might be the expected result, for example, if the destinationPositions y values were flipped versions of sourcePositions.

    func getDefaultWarp()->SKWarpGeometryGrid{
        let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 4, rows: 4)
        return warpGeometryGridNoWarp
    }

    func getNoWarp(_ time : TimeInterval = 0.1)->SKAction?{
        return SKAction.warp(to: getDefaultWarp(),duration: time)
    }



    func getYWarpGrid()->SKWarpGeometryGrid {
        let sourcePositions: [vector_float2] = [vector_float2(0.0, 0.0),vector_float2(0.25, 0.0),vector_float2(0.5, 0.0),vector_float2(0.75, 0.0),vector_float2(1.0, 0.0),
                                                vector_float2(0.0, 0.25),vector_float2(0.25, 0.25),vector_float2(0.5, 0.25),vector_float2(0.75, 0.25),vector_float2(1.0, 0.25),vector_float2(0.0, 0.5),vector_float2(0.25, 0.5),vector_float2(0.5, 0.5),vector_float2(0.75, 0.5),vector_float2(1.0, 0.5),vector_float2(0.0, 0.75),vector_float2(0.25, 0.75),vector_float2(0.5, 0.75),vector_float2(0.75, 0.75),vector_float2(1.0, 0.75),vector_float2(0.0, 1.0),vector_float2(0.25, 1.0),vector_float2(0.5, 1.0),vector_float2(0.75, 1.0),vector_float2(1.0, 1.0),]
        let destinationPositions: [vector_float2] = [vector_float2(-0.0332344, -0.0197656),vector_float2(0.225492, -0.0987109),vector_float2(0.516326, -0.124609),vector_float2(0.775745, -0.0866406),vector_float2(1.0414, 0.00195312),vector_float2(0.0520399, 0.256367),vector_float2(0.249887, 0.209375),vector_float2(0.473515, 0.171523),vector_float2(0.75213, 0.176875),vector_float2(1.0, 0.25),vector_float2(0.118032, 0.496953),vector_float2(0.25, 0.5),vector_float2(0.5, 0.5),vector_float2(0.75, 0.5),vector_float2(0.921812, 0.501328),vector_float2(0.0662522, 0.811836),vector_float2(0.271769, 0.853242),vector_float2(0.513726, 0.845586),vector_float2(0.737224, 0.846563),vector_float2(0.938364, 0.775234),vector_float2(-0.00983601, 1.05305),vector_float2(0.24408, 1.0973),vector_float2(0.504063, 1.1077),vector_float2(0.786318, 1.08895),vector_float2(1.02936, 1.04398),]
        return SKWarpGeometryGrid(columns: 4, rows: 4, sourcePositions: sourcePositions, destinationPositions: destinationPositions)
    }

    func getYWarp(_ time : TimeInterval = 0.1)->SKAction?{
        return SKAction.warp(to: getYWarpGrid(),duration: time)
    }


I think the SKEffectNode has changed a bit. ScaleToSize used to work well and the scale was applied to its children as well. Now It doesn't seem so. 😟


SKAction.scale(to: NSSize(width : expectedWidth, height: expectedHeight), duration: duration)



Thanks

This is the Complete Sample Project to test : Github