- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Sprite Kit 绘图。我想检测用户的绘图何时相交。
我尝试遵循代码,但它不起作用。看起来 sprite kit 并没有保存所有的点:
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
touch = touches.anyObject() as UITouch!
for drawingPoint in drawingPoints{
if(touch.locationInNode(self) == drawingPoint){println(true)}
}
drawingPoints.append(touch.locationInNode(self))
}
最佳答案
这是一个在 swift 中用于分段交集的函数。
func linesIntersect(line1 : CGPointInterval, line2 : CGPointInterval) -> (intersects: Bool, point : CGPoint?)
{
//The algorithm is taken from http://www.amazon.com/dp/0672323699/?tag=stackoverfl08-20
// http://portal.aauj.edu/portal_resources/downloads/programming/windows_game_programming_guru.pdf
let p0_x = line1.start.x
let p1_x = line1.end.x
let p2_x = line2.start.x
let p3_x = line2.end.x
let p0_y = line1.start.y
let p1_y = line1.end.y
let p2_y = line2.start.y
let p3_y = line2.end.y
let s1_x = p1_x - p0_x
let s1_y = p1_y - p0_y
let s2_x = p3_x - p2_x
let s2_y = p3_y - p2_y
let s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y)
let t = ( s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y)
if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
{
// Collision detected
let finalX = p0_x + (t * s1_x)
let finalY = p0_y + (t * s1_y)
return (true, CGPointMake(finalX, finalY))
}
return (false, nil) // No collision
}
关于ios - Swift:从 sprite 工具包 SKShapeNode 图纸中检测交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894859/
我的应用程序中有一个轮子。我需要检索它停止的切片/楔形的值。 这段代码: print(wheelScene.atPoint(CGPoint(x: wheelScene.frame.midX,
我有一个 SKShapeNode,如果满足特定条件,它需要将它的每个角都变圆。阅读下面链接提供的答案,这似乎很容易,因为我会简单地使用 |= 来圆角需要舍入的加角(4x if 语句)。 How to
我正在尝试用图像/图案填充 SKShapeNode,但仍然不成功。 你能帮我解决这个问题或者给我一个替代方案吗? 我想创建一个可碰撞的自定义形状(来自任何 SpriteKit 类型),并填充图案图像。
我正在使用 SKShapeNodes 绘制一条线。这条线不断地“生长”,或者说总是向上移动。当用户点击屏幕时,线条应以 45 度角向右或向左改变方向。它会这样做,但是由于某种原因,当它改变方向时,线中
在我的应用程序中,我有两个凹形SKShapeNode,即nodeA和nodeB,nodeA在屏幕上固定,而nodeB可以由用户手指在屏幕上拖动。 NodeA 需要能够检测 NodeB 是否与它重叠。首
我正在尝试为要遵循的节点创建 CGPath,但是当我尝试使用 608_hd_best_practices_for_building_spritekit_games 中的操作和常量幻灯片中定义的 SKS
我有一个 SKShapeNode,它有多个 SKSpriteNode 作为其子节点,这些子节点位于其中心周围的不同位置。我还旋转了 SKShapeNode,这实际上旋转了它的所有子节点。但是,当我循环
我正在开发一个小游戏,我必须匹配一些颜色。我只使用 SKShapeNodes;但我似乎无法让这段代码工作。我只得到“不同颜色”的打印结果。 func didBegin(_ contact: S
我无法让 SKShapeNode 的子类接受初始化程序。为了解决这个问题,我尝试按照此处发布的示例 Adding Convenience Initializers in Swift Subclass
我正在尝试将渐变纹理应用于从路径创建的 SKShapeNode,以便线条从纯色变为透明。这适用于 SKSpriteNode,但我无法让它在 SKShapeNode 上工作。有谁知道这个问题的解决方案?
我想在另一个正方形里画一个正方形;但我无法以正确的方式定位第二个。根据第一个平方坐标进行定位可以做什么? var tileBackground = SKShapeNode(rectOfSize
我用来生成行的代码是这样的: func populate(num: Int) { for var i = 0; i < num; i++ { let lines = Line
如何对没有实例方法初始化器的 SKShapeNode 进行子类化?我能想到的唯一方法是: + (id)withColor:(UIColor *)aColor radius:(CGFloat)aRadi
我正在开发一个应用程序,我正在根据用户手指的触摸来绘制线条。一旦收到触摸结束事件,该行将转换为最后一条路径。当收到新的触摸开始事件时,将绘制一条名为“当前路径”节点的新线。我为具有相反接触位掩码的两条
我打开了 spritekit 应用程序示例并添加了这段代码 override func didMoveToView(view: SKView) { /* Setup your scene he
最近我一直在创建一个游戏,我在屏幕上放了圆圈。但是,我注意到这些圆形不是圆形,而是椭圆形。 y 轴被拉伸(stretch),x 轴被收缩。为了弄清楚这个问题,我现在正在尝试用一个矩形进行调试。我使矩形
我可以在一个 SkShapenode 中有一条具有多种线宽和颜色的路径吗?例如 我可以在一个节点中添加三个具有不同填充和描边大小边框的不同颜色的圆圈吗? 最佳答案 skshapenodes 真的不应该
我创建了一个名为“Character”的 SKShapeNode 子类,我尝试使用 rectOfSize 对其进行初始化,但是由于必须使用指定的初始化程序,我不能这样做。 我一直在阅读有关此机制的信息
在我的简单游戏中,我需要在下一步发生之前移除所有 SKShapeNodes。这是我的代码: for child in self.children(){ if(child==SKShapeNod
有没有办法围绕某个任意点旋转 SKShapeNode,特别是矩形? 我在 gameScene 类的开头声明了我的 SKShapeNode var bladeTouch = SKShapeNode()
我是一名优秀的程序员,十分优秀!