How could I skew/shear a sprite via SpriteKit like Cocos2D?

心已入冬 提交于 2019-12-11 03:21:49

问题


In Cocos2D-x, CCNode class provides "skewX" & "skewY" to let me do some distortion of the sprite, however, I fail to find similar mapping in SKNode of SpriteKit.

My game uses Flash to port skeleton animations, in which the configs of positioning, scaling, rotation and shearing of sprites would be decomposed into game-engine's digestive. Except shearing, all other configs do have solutions to be done in SpriteKit.


回答1:


No you can't.

SKNode doesn't have skew* properties. And SKShader allows to use only fragment shader. It means you can change the color of each pixel whatever you want, but you can't change the shape of a sprite.

So I recommend you to use Cocos2d-Swift, Cocos2d-x or so on instead of SpriteKit.

Another option is UIView. You can use the matrix from Adobe Flash to UIView via CALayer transform.




回答2:


You can achieve a skew affect using a CGAffineTransform, CoreImage filter and an SKEffectNode

let transform      = CGAffineTransform(a: 1, b: 0.1, c: -0.3, d: 1, tx: 0, ty: 0)
let transformValue = NSValue(cgAffineTransform: transform)

let transformFilter = CIFilter(name: "CIAffineTransform")!
transformFilter.setValue(transformValue, forKey: "inputTransform")

let effectNode = SKEffectNode()
effectNode.addChild(sprite) // <-- Add sprite to effect node

effectNode.filter = transformFilter
effectNode.shouldRasterize = true
effectNode.shouldEnableEffects = true


来源:https://stackoverflow.com/questions/27631779/how-could-i-skew-shear-a-sprite-via-spritekit-like-cocos2d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!