2017-01-27 10 views
2

Я делал рисунок с использованием встроенных инструментов рисования Swift для рисования простых дорожек с прямыми линиями. Одна аномалия, которую я заметил, заключается в том, что если вы хотите, чтобы путь был заполнен, но не имел штриха линии на его краю, он визуализируется без сглаживания и имеет грубый вид. Напротив, линия по умолчанию всегда делает плавно. Существует возможность включить сглаживание, но это тоже не имеет значения. Я мог бы просто сделать ход того же цвета, что и заливка, но это означает, что край расширяется наружу от точек позиции, которые определяют форму.Сглаживающие края неразвернутых контуров на SKShapeNode

//creates shape node to contain path 
      let myTriangle = SKShapeNode() 
    //declares path object 
      let myPath = CGPathCreateMutable() 
    //moves to starting point of shape 
      CGPathMoveToPoint(myPath, nil, -50, 0) 
    //draws lines of shape 
      CGPathAddLineToPoint(myPath, nil, 0, 100) 
      CGPathAddLineToPoint(myPath, nil, 50, 0) 
      CGPathAddLineToPoint(myPath, nil, -50, 0) 
    //closes path 
      CGPathCloseSubpath(myPath) 

      myTriangle.antialiased = true 
//adds path to shape node 
      myTriangle.path = myPath 
//sets fill colour and zero line width 
      myTriangle.fillColor = SKColor.blueColor() 
      myTriangle.lineWidth = 0 
//sets antialiasing 
      myTriangle.antialiased = true 
//sets position in parent object and adds node 
      myTriangle.position = CGPointMake(600, 600) 
      self.addChild(myTriangle) 

Любые идеи?

Большое спасибо, Kw

+0

может вы предоставляете несколько скриншотов, иллюстрирующих проблемы, и идеал? – Confused

+0

Вот пример, который я создал. Треугольник имеет код, который я разместил, за исключением самой левой точки, которую я переместил, чтобы показать край более четко. Обратите внимание, что красный ящик и черные круги имеют белую линию и идеально ровны. Красная коробка вращается и все еще отлично отрисовывается. Я увеличил изображение на 200%, поэтому надеюсь, что вы увидите разницу: http://imgur.com/a/ypPFk – Kwangle

+0

Это немного удивительно. Если вы погладите треугольник, все будет хорошо? –

ответ

1

О сглаживании вы можете посмотреть здесь к этому document. Я видел также у вас есть lineWidth равен 0, то это не поможет в соответствии с этим документом ..

Чтобы улучшить внешний вид вашего пути вы можете попробовать также:

yourPath.lineCap = CGLineCap(rawValue: 1)! 

где, следуя источник:

/* Line cap styles. */ 
public enum CGLineCap : Int32 { 
    case butt 
    case round 
    case square 
} 

Некоторый код примера написан в Swift 3:

 let myTriangle = SKShapeNode() 
     let myPath = CGMutablePath() 
     myPath.move(to: CGPoint(x:-110,y: 0)) 
     myPath.addLine(to: CGPoint(x:0,y: 290)) 
     myPath.addLine(to: CGPoint(x:260,y: 0)) 
     myPath.addLine(to: CGPoint(x:-110,y: 0)) 
     myPath.closeSubpath() 
     myTriangle.path = myPath 
     myTriangle.fillColor = SKColor.white 
     myTriangle.lineWidth = 2 
     myTriangle.lineCap = CGLineCap(rawValue: 1)! 
     myTriangle.strokeColor = SKColor.white 
     myTriangle.isAntialiased = true 
     myTriangle.position = CGPoint(x:self.frame.midX,y:self.frame.midY) 
     self.addChild(myTriangle) 

Выход этого кода (lineWidth 2 и lineCap индексируются ..):

enter image description here

Ваш выход (lineWidth равным 0):

enter image description here

+0

Я думаю, что это просто изменяет направление линий и углы рендеринга, аналогично Adobe Illustrator. – Kwangle

+0

@ Kwangle Я добавил некоторый код, который поможет вам в исследовании –

+0

Да, это нормально, но я хочу сгладить края без необходимости рисовать штрих вокруг пути. Кажется, что Swift только позволяет сглаживать поглаженные дорожки. Мне нужны были точные границы объектов, поскольку я использовал фигуры для проверки кода обнаружения столкновений, поэтому добавление нескольких пикселей по ширине нежелательно. Однако большое спасибо за ваши исследования и ввод. – Kwangle

 Смежные вопросы

  • Нет связанных вопросов^_^