【发布时间】:2014-02-10 02:42:33
【问题描述】:
我想要达到的效果是在黑暗区域中有一圈光。效果类似于口袋妖怪游戏中的效果,当您在黑暗的洞穴中并且周围视野有限时。根据我的尝试和阅读,我无法在具有 alpha 级别的精灵套件中的节点上创建蒙版。我设法创建的面具都有硬边,基本上只是裁剪。在苹果开发者页面上阅读有关具有 maskNode 属性的 SKCropNode 时,它说“如果掩码中的像素的 alpha 值小于 0.05,则图像像素被屏蔽掉。”不幸的是,这听起来像是像素将被完全掩盖或完全包含在内,两者之间没有 alpha 值。如果我想说的很难理解,这里是我所取得的成就的图像: https://www.dropbox.com/s/y5gbk8qvuq4ynh0/iOS%20Simulator%20Screen%20shot%20Jan%2020%2C%202014%201.06.23%20PM.png
我设法获得上述结果的方法是,我掩盖了硬边缘圆圈,然后添加了一个从外部黑色渐变到内部透明的图像。这种方法行不通的原因是因为我需要有多个圆圈,而用我刚才提到的方法,当圆圈相交时,可以看到透明圆圈外侧的黑暗。
总之,我需要一种方法来制作一个从中心开始变暗然后逐渐消失的圆圈。然后,让它在圆暗的地方,可以看到它后面的图像,在圆透明的地方,看不到它后面的图像。再次,抱歉,如果我说的很难理解。这是我正在使用的代码。有些是从其他帖子中找到的。
SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(500, 500)];
background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
SKCropNode *cropNode = [[SKCropNode alloc] init];
SKNode *area = [[SKNode alloc] init];
int x = 65; //radius of the circle
_circleMask = [[SKShapeNode alloc ]init];
CGMutablePathRef circle = CGPathCreateMutable();
CGPathAddArc(circle, NULL, 0, 0, x/2, 0, M_PI*2, YES);
_circleMask.path = circle;
_circleMask.lineWidth = x*2;
_circleMask.strokeColor = [SKColor whiteColor];
_circleMask.name=@"circleMask";
_circleMask.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
//Here is where I just added in the gradient circle To give the desired appearance, but this isn't necessary to the code
//_circleDark = [SKSpriteNode spriteNodeWithImageNamed:@"GradientCircle"];
//_circleDark.position = [cropNode convertPoint:_circleMask.position fromNode:area];
[area addChild:_circleMask];
[cropNode setMaskNode:area];
[cropNode addChild:background];
//[cropNode addChild:_circleDark];
[self addChild:cropNode];
这种方法还允许我移动圆圈,露出它背后图像的不同部分,这正是我想要的。为此,我只需将其设置为在用户点击屏幕时更改 _circleMask.position。
另外,为了防止任何人感到困惑,为了说明这一点,黑色只是场景的背景色,图片在上面,然后圆圈是遮罩节点的一部分。
【问题讨论】:
-
查看developer.apple.com/library/ios/documentation/graphicsimaging/… 的“使用图像蒙版屏蔽图像”部分,如果有人能弄清楚如何将其应用于节点而不仅仅是图像,这正是我所需要的.
-
你弄明白了吗?
标签: ios objective-c mask alpha sprite-kit