- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目前我在屏幕上画了 2 条颜色相同但 alpha 值都小于 1 的线。当这些线相交时,交点的颜色与其余线的颜色不同。之前有一篇帖子解决了同样的问题:swift drawing translucent lines, how to make overlapping parts not getting darker?但是,这篇文章没有得到充分回答。我现在画的线是这样的:
var points = [CGPoint]()
points = [CGPoint(x: -100, y: 100), CGPoint(x: 100, y: -100)]
let FirstLine = SKShapeNode(points: &points, count: points.count)
FirstLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 0.5)
FirstLine.lineWidth = 30
addChild(FirstLine)
points = [CGPoint(x: 100, y: 100), CGPoint(x: -100, y: -100)]
let SecondLine = SKShapeNode(points: &points, count: points.count)
SecondLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 0.5)
SecondLine.lineWidth = 30
addChild(SecondLine)
我明白为什么会发生这种情况,但是有什么方法可以使交叉路口看起来一样,从而看起来更好吗?
编辑:我决定实现@Confused 的回答。但是,现在的问题是纹理总是居中到屏幕中间。这是一个例子:
红色十字位于正确的位置,因为它将指定的点连接在一起。然而,一旦我将红十字作为纹理,它总是居中于屏幕的中间(绿十字是作为纹理的红十字)。我可以使用任何可以将纹理重新定位到正确位置的代码吗?注意:此代码不能仅适用于此示例,我需要一个无论红十字的位置如何都始终有效的代码。
对有同样问题的人的最终编辑
首先,像这样设置一切:
var points = [CGPoint]()
let crossParent = SKNode()
addChild(crossParent)
请注意您必须为纹理创建父 SKNode,否则屏幕上的所有内容都将成为纹理,而不仅仅是您想要的节点。然后,将该父节点添加到场景中。
之后,创建您想要的线条(在本例中为绿色十字):
//The first line of the green cross
points = [CGPoint(x: -300, y: 300), CGPoint(x: -100, y: 100)]
let FirstLine = SKShapeNode(points: &points, count: points.count)
FirstLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1.0)
FirstLine.lineWidth = 30
crossParent.addChild(FirstLine)
记住不要将您创建的第一行添加到场景中,而是添加到您在开始时创建的父 SKNode。此外,将绘制的每条线的 alpha 值设置为 1.0。然后添加你的其他行:
//The second line of the green cross
points = [CGPoint(x: -100, y: 300), CGPoint(x: -300, y: 100)]
let SecondLine = SKShapeNode(points: &points, count: points.count)
SecondLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1.0)
SecondLine.lineWidth = 30
FirstLine.addChild(SecondLine)
请注意,您必须像这样将该行添加到第一行,而不是添加到场景中。如果您在添加第一行后添加多行,则将其添加到第一行,就像我在这里对每个连续的操作一样您添加的行。
现在,像这样创建纹理:
let tex = view?.texture(from: FirstLine)
let cross = SKSpriteNode(texture: tex, color: .clear, size: (tex?.size())!)
cross.alpha = 0.5
addChild(cross)
完成此操作后,您称之为交叉的任何东西都将成为您的纹理,您可以像我在这里所做的那样将 alpha 值更改为您喜欢的任何值,并且图像不会有不同的颜色。请记住将该纹理添加到场景中。
最后,您可能会注意到纹理与您最初放置点的位置不同。你可以像这样把它放回原来的位置:
cross.position = CGPoint(x: (FirstLine.frame.midX), y: (FirstLine.frame.midY))
希望这会有所帮助 :) 感谢@Confused 提供程序的纹理部分 :D
最佳答案
这是一种技巧。它不能解决您的问题,也不能直接回答您的问题。相反,它提供了一种获得所需结果的方法,但没有您真正想要的线条的灵 active 和固有特性。
您可以使用任意数量的节点和任意数量的技术从您绘制的任何内容创建纹理。
您可以通过将所有绘图元素附加到您有权访问的 SKView 空间内的单个节点来执行此操作(最简单的方法),然后将绘制对象的“父”节点渲染到纹理。
这有什么帮助?
很高兴你问:
您可以在 100% 的不透明度级别绘制所有内容,并将其渲染为纹理,然后将您绘图的纹理放在您喜欢的位置,并将其不透明度降低到您喜欢的任何百分比,并获得均匀的效果结果。事物相互重叠时没有亮点。
这是执行上述所有操作的代码:
var points = [CGPoint]()
points = [CGPoint(x: -100, y: 100), CGPoint(x: 100, y: -100)]
let FirstLine = SKShapeNode(points: &points, count: points.count)
FirstLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1)
FirstLine.lineWidth = 30
// ^^ Note the FirstLine is not added to the Scene
points = [CGPoint(x: 100, y: 100), CGPoint(x: -100, y: -100)]
let SecondLine = SKShapeNode(points: &points, count: points.count)
SecondLine.strokeColor = UIColor.init(red: 0.25, green: 0.62, blue: 0.0, alpha: 1)
SecondLine.lineWidth = 30
FirstLine.addChild(SecondLine)
// ^^ Note SecondLine being added to FirstLine, and that they both have alpha of 1
// Now the magic: use the view of the SKScene to render FirstLine and its child (SecondLine)
// They are rendered into a texture, named, imaginatively, "tex"
let tex = view.texture(from: FirstLine)
let cross = SKSpriteNode(texture: tex, color: .clear, size: (tex?.size())!)
cross.alpha = 0.5
// ^^ The alpha of the above sprite is set to your original desire of 0.5
// And then added to the scene, with the desired result.
addChild(cross)
结果如下:
关于Swift:使相同颜色的半透明重叠线相交时不改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257975/
我在 NSWindow 中有一个 NSView,NSWindow 是标准的 Mac 灰色/米色。 我想让 NSView 稍微半透明和灰色(例如 alpha 为 0.2 的灰色),以便 NSWindow
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我将导航栏自定义为清除。所以我将backgroundImage设置为UIImage()并且isTranslucent = true。所以我遇到的问题是:这就是我在 xib 中设置的。现在 TopCon
我一直在研究这个,似乎唯一的方法是使用 UIActionSheet,问题是我的 UIActionSheet 只覆盖了一半的屏幕,我的代码是: MyViewController *myVC = [[my
我希望在我的主要 Activity 中使用半透明的状态栏和导航栏,而所有其他 Activity 都使用 Material 设计。 到目前为止我得到的是: if (Build.VERSION.SDK_I
我可以在不使用私有(private)方法等的情况下获得对 UIAlertView 的 backgroundImageView 的引用。但是我的 alpha 设置为 1.0 被忽略了。控件仍然有点半透明
我正在研究 UIWebView,我想要的是 webView 不要过度说唱 View 。 所以这就是问题所在。我设置了 UIWebView ,状态栏覆盖在内容上。 我该如何处理?我在制作 UIImage
我正在为一款小型 2d 游戏在其他图像之上绘制半透明图像。目前要混合图像,我正在使用此处找到的公式:https://en.wikipedia.org/wiki/Alpha_compositing#Al
我正在尝试将 Splash Screen 4 制作成 Win 应用程序。 我的设置: 表单边框样式设置为无。起始位置是屏幕中心。表单的背景图像设置为 PNG 文件,具有圆形边缘和“内置”投影。 在我设
(此问题发生在使用 Java 1.7.0_45 的 Mac OS X 10.10 上。在使用 Java 1.7.0_55 的 Windows 7 上我没有遇到此问题。) 我有一个半透明的“始终在最前面
如果您知道学习如何使用 Adobe Flash 为 iPhone 应用程序甚至 Air 应用程序创建此类效果的任何良好起点,那将会有很大帮助。 具体来说,我希望它不保存叠加层,只在用户从相机拍摄图
我有以下行: label.setBackground(new java.awt.Color(0, 150, 0, 50)); 我将它放在 MouseAdapter 中的 mouseRe
我正在制作幻灯片。我希望导航栏看起来与照片应用程序中的一样。我如何获得这种透明度? 我试过: - (void)drawRect:(CGRect)rect { [[UIColor clearCo
我试图在半透明的 div 上获取文本。这是在 Chrome 中,如果相关(即 Chrome 错误)。出于某种原因,每当文本位于 div 顶部(移动到负边距顶部)时,它也是部分透明的。 HTML 如下(
我在 NSVisualEffectView 上有 2 个 NSButton。第一个按钮图像是系统 NSEnterFullScreenTemplate 图像。第一个按钮上的图像是半透明的。 在第二个按钮
我想在RelativeLayout中创建一个RelativeLayout半透明。 它是页脚的项目。它始终可见,但我只想使其黑色的透明度为 50%。 我尝试过使用#11000000 Alpha chan
我正在尝试使用 Qt (C++) 应用程序跨操作系统完成以下任务。运行该程序后,会弹出一个新窗口,一个全屏 QWidget。现在我希望它是透明的/透明的,这样用户就不会真正看到它。在这个“层”上,用户
所以,我的目标是绘制具有半透明像素的 Sprite 。 首先,我使用仅渲染不透明像素的着色器渲染 Sprite 。然后,我禁用深度缓冲区写入并使用仅渲染半透明(或透明 Sprite )的着色器渲染相同
CSS .popup { z-index: 10000; filter: alpha(opacity=40); -moz-opacity: .40; backgroun
我正在尝试创建一个 lightbox effect在我的应用程序中。为实现这一点,我有一个 UserControl,其中一个面板代表半透明覆盖层,另一个面板托管所有必要的内容。 当我显示此 UserC
我是一名优秀的程序员,十分优秀!