- 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/
我有以下MWE function f(p) ans = zeros(p, 2) return ans end ans = f(2) ans b=ans.+1.0 ans 起初,ans是正确的,
OWIN AppBuilder“UseStatic”位从本地文件系统传送文件,这在某些情况下很方便,但我希望它从我在应用程序启动时预先填充的内存中 IDictionary 传送内容。任何人都可以指出一
我是 JavaScript 新手。 我的代码允许我列出 JSON 文档的元素及其类型,并将所有元素连接到一个字符串 donnees_types 中。 问题是 JavaScript 中的 typeof
我想在每次刷新时更改主页上的背景图像。我怎样才能做到这一点?我认为 jquery 是可能的,但我不太清楚。 感谢您对此主题的任何帮助或评论。 最佳答案 我不知道“如何”,但我找到了以下链接: http
所以我已经在这上面花了几个小时了,老实说我完全陷入困境。我写了一个 for 循环来计算整数中的数字数量,但我发现一旦我输入 10 位以上的数字,除数值就会发生变化,而且我不明白为什么。我在互联网上搜索
当我在使用表面 View 的游戏 Activity 和使用膨胀菜单的其他 Activity 之间切换时,我会收到错误消息。 日志猫: 07-13 15:15:34.464: ERROR/Android
听说很简单 R*=f; G*=f; B*=f; 其中 f 是标量值 0 .. 1.0 或更大改变亮度的方法不太正确颜色,但我找不到一些代码片段获得更好的东西(无需太多学习色彩理论)也许有人可以在这里给
如以下链接所述:- How to get the ThreadPoolExecutor to increase threads to max before queueing? 我将队列实现更改为在进入
我只显示最初提供 20 分钟 slotMinutes 的日历。我试图让用户即时更改为 10 分钟的 slotMinutes。 我有一个触发以下代码的按钮: $('#calendar').fullCal
我的问题是:我的应用程序中有一个新闻列表(UITableView)当我点击 1 个"new"时,我打开它,里面有一个后退按钮,可以让我回到列表。现在的问题是我必须在滑动时实现"new"更改,所以我制作
我面临着与 I'm trying to install psycopg2 onto Mac OS 10.6.3; it claims it can't find "stdarg.h" but I ca
需要通过为 array2 中不存在的索引设置 visible false 来从 array1 创建一个新的 array3。 在下面的示例中,我有索引 0,2。所以对于 1,3,结果数组必须具有 vis
我有一个对象,类似这样 var Egg = function(){ this.test = $(.slider .label); $('.slider').slider({
我想改变 ScrollView 的宽度。首先,我这样做了: var scrollWidthConstraint: NSLayoutConstraint! 然后设置它: scrollWidthConst
我有两个动画,一个是“过渡”,它在悬停时缩小图像,另一个是 animation2,其中图像的不透明度以周期性间隔重复变化。 我有 animation2 在图像上进行,当我将鼠标悬停在它上面时,anim
我是一个 jQuery 新手,一直在尝试添加一个脚本来更改 div onClick 的 id。 这是一个jsfiddle example . $(function accept() { $("
我正在尝试更改用户输入的字母的大小写,并将该字母的小写和大写版本存储在变量中。我已经编写了下面的代码,但它在运行时遇到了问题。有人指出是什么导致了问题吗? #include #include #i
假设我有这段代码: char num[2] = {15, 240}; char* p_num; 现在,如果我理解的一切正确,数组中的位应该像这样对齐: 00001111 11110000 我的问题是
var html = '' + count + '' + i.Description + '' + i.Priority + '' + i.Status + 'johnsmith- ' + creat
我在虚拟机上安装了 minix3,并希望我可以操纵当前的队列选择算法,以便我可以将其从优先级顺序更改为包括随机分类的低优先级作业的优先级顺序。我发现我需要更改的代码部分在 proc.c 中,具体部分是
我是一名优秀的程序员,十分优秀!