除了这里提出的问题:用SpriteKit在矩形中画一个洞?由于两者之间没有令人满意的答案,两者之间最显着的区别是这个问题需要缺少解决方法,特别是要求扭转SKCropNodes的功能.
由于孔的随机性,孔的数量以及孔要应用的物体的变化,上述问题可以解决的hacky方式的类型无法解决这个问题中的主要问题.
因此瑞士奶酪的例子如下:
想象一堆随机大小的矩形SKSpriteNodes,充满各种色调的奶酪色.
如何通过从每片奶酪中切出随机圆圈来制作瑞士奶酪?
如果SKCropNodes是圈子,他们只留下圆形的奶酪片而不是从奶酪块中切出孔.有没有办法反转SKCropNodes的行为,所以他们切换孔?
image-masking sprite-kit skspritenode skcropnode skshapenode
我创建了一个圆形蒙版,并使用精灵工具包SKCropNode类为蒙版内的精灵设置动画.但是掩模的边缘看起来像素化.
有没有办法使用抗锯齿来平滑边缘?
我正在尝试在Sprite Kit项目中创建一个圆形蒙版.我像这样创建圆圈(将其定位在屏幕的中心):
SKCropNode *cropNode = [[SKCropNode alloc] init];
SKShapeNode *circleMask = [[SKShapeNode alloc ]init];
CGMutablePathRef circle = CGPathCreateMutable();
CGPathAddArc(circle, NULL, CGRectGetMidX(self.frame), CGRectGetMidY(self.frame), 50, 0, M_PI*2, YES);
circleMask.path = circle;
circleMask.lineWidth = 0;
circleMask.fillColor = [SKColor blueColor];
circleMask.name=@"circleMask";
Run Code Online (Sandbox Code Playgroud)
在代码中,我将其设置为以下掩码cropNode:
[cropNode setMaskNode:circleMask];
Run Code Online (Sandbox Code Playgroud)
... ...而不是显示在圆圈内的内容,掩码显示为正方形.
是否可以使用a SKShapeNode作为蒙版,还是需要使用图像?
更新:看起来iOS 10已修复此问题.我升级到Swift 3和Xcode 8,一切都按预期工作.
我现在已经遇到过这个问题了几次,我不知道它是否是SKCropNode中的一个错误,或者我只是在滥用它.也许有一些文件我不知道为什么会发生这种情况?
我有一个100x100矩形形状的裁剪节点作为蒙版.如果我在其中放置一个蓝色圆圈,它会被正确裁剪.
// Create a crope node with a small square.
let cropNode = SKCropNode()
let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100))
cropNodeMask.fillColor = UIColor.whiteColor()
cropNode.maskNode = cropNodeMask
self.addChild(cropNode)
// Create a blue circle and put it in the crop node.
let blueCircle = SKShapeNode(circleOfRadius: 110)
blueCircle.fillColor = UIColor.blueColor()
blueCircle.strokeColor = UIColor.clearColor()
cropNode.addChild(blueCircle)
Run Code Online (Sandbox Code Playgroud)
现在,当我将同一个圆放在一个空的SKNode中并将该容器放在同一个裁剪节点内时,裁剪失败.
// Create a crope node with a small square.
let cropNode = SKCropNode()
let cropNodeMask = SKShapeNode(rect: …Run Code Online (Sandbox Code Playgroud) 我正在使用Sprite Kit来创建我的第一个iOS应用程序,而且我在看似非常基本的问题上磕磕绊绊.
我正在尝试为fillNodeSKCropNode(cropNode)的contents()设置动画.下面的代码设置SKScene就好了(我看到插图被正确掩盖,放在正确位置的背景图像上)......
SKSpriteNode *logoBG = [[SKSpriteNode alloc] initWithImageNamed:logoBackground];
logoBG.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:logoBG];
SKCropNode *cropNode = [[SKCropNode alloc] init];
cropNode.maskNode = [[SKSpriteNode alloc] initWithImageNamed:logoMask];
SKSpriteNode *fillNode = [[SKSpriteNode alloc] initWithImageNamed:logoImage];
[cropNode addChild:fillNode];
fillNode.position = CGPointMake(0,300);
cropNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
self.logoContent = cropNode;
[self addChild:self.logoContent];
Run Code Online (Sandbox Code Playgroud)
...但我无法访问蒙面图示以设置其位置的动画(我希望它从蒙版外面开始并滑入到位置):
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
SKAction *moveUp = [SKAction moveByX: 0 y: 100 duration: 5];
SKAction *moveSequence = [SKAction sequence:@[moveUp]];
[self.logoContent.target_illustration runAction: moveSequence completion:^{ …Run Code Online (Sandbox Code Playgroud) skcropnode ×5
sprite-kit ×5
ios7 ×2
objective-c ×2
animation ×1
antialiasing ×1
cocoa-touch ×1
ios ×1
iphone ×1
masking ×1
skshapenode ×1
skspritenode ×1
swift ×1