2016-06-23 13 views
1

私はユーザーが指で線を描くことができるゲームを作っています。ウェブサイトにはたくさんのメソッドがあります。 UIView(UIKit)でCGContextを使用する方法と、SpriteKitでCGPathとSKShapeNodeを使用する方法の2つの方法を試しました。しかし後者ははるかに優れた品質を示しています。 CGContextを使用する最初のものは醜い荒いエッジを持っています。iOS CGContextを使用する描画線の品質は、SpriteKitのSKShapeNodeよりもはるかに悪いです。

次のスクリーンショットを参照してください。私はここでも両方のメソッドのコードの一部を添付しました(touchesMove関数内)。

注:var ref = CGPathCreateMutable()

CGContextのUIViewで enter image description here

CGPathAddLineToPoint(ref, nil, currentPoint.x, currentPoint.y) 

    UIGraphicsBeginImageContext(self.frame.size) 
    let context = UIGraphicsGetCurrentContext() 
    tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height)) 


    CGContextAddPath(context, ref) 

    // 3 
    CGContextSetLineCap(context, CGLineCap.Round) 
    CGContextSetLineWidth(context, brushWidth) 
    CGContextSetRGBStrokeColor(context, red, green, blue, 1.0) 
    CGContextSetBlendMode(context, CGBlendMode.Normal) 

    // 4 
    CGContextStrokePath(context) 

    // 5 
    UIGraphicsEndImageContext() 

SpriteKitベースでSKShapeNode enter image description herevar lineDrawing = SKShapeNode()

CGPathAddLineToPoint(ref, nil, location.x, location.y) 
lineDrawing.path = ref 
lineDrawing.lineWidth = 3 
lineDrawing.strokeColor = UIColor.blackColor() 
lineDrawing.alpha = 1.0 
self.addChild(lineDrawing) 

同じ品質のSKShapeNodeでUIViewに線を描画するにはどうすればよいですか? 、

UIGraphicsBeginImageContextWithOptions(self.frame.size, false, 0) 

WithOptionsバージョン:

UIGraphicsBeginImageContext(self.frame.size) 

あなたはこの代わりに使用する必要があります。

+0

実際のパスのプリントがあります。私の推測では、それぞれに異なる数のパスがあるということです。 –

答えて

1

1つの明白な問題は、網膜の画面を処理しない時代遅れの機能を使用しているということです最後の引数として0を指定すると、デバイスに網膜スクリーンがある場合、網膜解像度で画像コンテキストが作成されます。 0引数は "デバイス画面の倍率を使用する"という意味です。

各テストケースのパスにポイントを作成するコードが表示されていないため、その他の問題が発生することがあります。

+0

SKShapeNodeよりも優れています。パスを作成するためのコードは、次のように表示されます。(1) 'var ref = CGPathCreateMutable()'; (2)touchesBeganで、 'CGPathMoveToPoint(ref、nil、location.x、location.y)'; (3)touchesMove、 'CGPathAddLineToPoint(ref、nil、location.x、location.y)'にあります。私は何かが欠けていたか? –

+0

場所は 'let location = touch.locationInView(self)' –

+0

です。両方のテストで同じ速度で同じ形状(指などで)を描きます。 'CGContext'実装でパスの終点は何点ですか? SpriteKitのバージョンはいくつですか? –

関連する問題