从CGPoint数组创建一个SKShapeNode,它在屏幕的边缘开始和结束

时间:2015-06-20 06:15:06

标签: ios swift sprite-kit

好的,所以我正在使用SpriteKit和Swift开发我的第一款iOS游戏,而我很难找到完成这项任务的好方法。我试图弄清楚如何采用一个CGPoint数组,该数组基本上包含从屏幕的一个边缘到另一个边缘的用户制作的路径。我想弄清楚填补这个空间的最佳方式,也许是使用SKShapeNode,但也许是更好的方法。一个重要条件是确定路径的哪一侧将被填充,这应该根据游戏中的球是否在该区域来确定;我想这样做,以便没有球的区域被填满。我正在考虑制作一个SKShapeNode,以便我可以检查球的当前位置是否在该节点内,但我意识到我不是确定如何弄清楚如何设置节点,使其贴在屏幕的边缘。我唯一能想到的是添加屏幕角落,但如果我添加所有这些,它可能会变得非常混乱,所以我想知道最好的方法是什么。我开始编写这个函数但只是卡住了,不知道现在该做什么:

func fillInPolgyon(contactPoint: CGPoint) {
    var frameContactPoint = contactPoint

    if contactPoint.x < 3 && contactPoint.x > -3 {
        frameContactPoint.x = 0
    }
    else if contactPoint.y < 3 && contactPoint.y > -3 {
        frameContactPoint.y = 0
    }
    //println("ship hit bounds: \(frameContactPoint)")

    var polygonPath = UIBezierPath(CGPath: createTrailPath()!)
    polygonPath.addLineToPoint(frameContactPoint)
    polygonPath.closePath()

    var polygonPathCG = polygonPath.CGPath
    var ballLocation = ball.position

    if !polygonPath.containsPoint(ballLocation) {
        let filledPolygonNode = SKShapeNode(path: polygonPathCG)
        filledPolygonNode.name = FilledPolygonName
        filledPolygonNode.fillColor = UIColor(red: 0, green: 1, blue: 0, alpha: 1)
        addChild(filledPolygonNode)
        filledPolygonNode.physicsBody = SKPhysicsBody(edgeChainFromPath: polygonPathCG)
        filledPolygonNode.physicsBody!.categoryBitMask = FilledPolygon
        filledPolygonNode.physicsBody!.collisionBitMask = ShipCategory | BallCategory
        filledPolygonNode.physicsBody!.dynamic = false
        var trailPoints: [CGPoint] = [contactPoint]
    }
}

显然我在这里的东西很糟糕......它没有填满屏幕的角落,即使我检查确保它没有通过相同的接触点它(只要路径通过didBeginContact函数到达屏幕的墙壁就会调用此函数),但无论如何这些点都会略有不同,从而导致创建太多不需要的节点,从而导致严重的性能问题。那么,有没有人有任何想法?提前谢谢。

0 个答案:

没有答案
相关问题