传递UIBezierPath以查看绘图类

时间:2015-03-16 05:56:15

标签: ios swift uibezierpath

我正在制作一个基于关卡的游戏,其中包含许多不同的对象。在每个级别中,每种类型的对象都有不同的数量。因此,我一直试图使绘图部分尽可能通用,这样我所要做的就是传入坐标,它会自动绘制。为此,我制作了一个协议,强制每个对象类实现getBP()方法,该方法返回UIBezierPath为每个对象绘制。然后,视图类只需要说

Object.getBP().fill()

但是,这导致了一些奇怪的问题。对象不会以正确的坐标绘制。 y坐标是正确的,但x坐标将它始终放在屏幕的左侧。我认为可能是在视图类中没有创建Bezier路径。这是我在Surface.swift中的代码(这是为了在游戏中绘制一个表面):

func getBP() -> UIBezierPath {
    var rect:CGRect
    var length:Double = getSurfaceVector().getMagnitude()//length of the surface
    var cx = points.1.x+(points.0.x-points.1.x)//center coords of the surface
    var cy = points.1.y+(points.0.y-points.1.y)
    var bp = UIBezierPath(roundedRect: CGRectMake(CGFloat(cx - length/2), CGFloat(cy-RECT_HEIGHT/2), CGFloat(length), CGFloat(RECT_HEIGHT)), cornerRadius: CGFloat(5))
    let transform:CGAffineTransform = CGAffineTransformMakeRotation(CGFloat(Double(angle)*(Double(M_PI)/Double(180))))
    bp.applyTransform(transform)
    return bp
}

点只是表面起点和终点的元组。 RECT_HEIGHT是绘制以表示曲面的矩形的高度。 angle是表面水平面的角度。

在View.swift中创建表面,我这样做:

Surface(fixed: true, points: (Vector(x: 50, y:100), Vector(x: Double(UIScreen.mainScreen().bounds.width), y: 100)))

我将该表面添加到游戏中的对象数组中。我通过说

在View.swift文件中绘制它
surface.stroke()

表面在y屏幕上绘制y值为100,但它以x = 0为中心,因此它在屏幕的一半和一半处。此外,它不会以角度绘制 - 它始终是水平的。有没有更好的方法来做到这一点?发生了什么事?

0 个答案:

没有答案