2016-08-03 3 views
1

Как известно, начало координат SKScene находится внизу.SpriteKit/SKScene: Как нарисовать сверху слева, а не внизу слева?

Но я пытаюсь загрузить простой уровень из файла, который содержит матрицу из 0 и 1. Пока 0 ничего, 1 означает стену (простой прямоугольник).

Поскольку содержимое файла, очевидно, идет от верхнего левого до нижнего правого, я хотел бы рисовать сверху слева на сцене.

Но мой первый символ из файла рисуется внизу слева на сцене. Я попытался установить сцену yScale на -1, надеясь, что она инвертирует ось y, , но это не сработало.

Что является самым чистым способом, поэтому на этом SKScene Я всегда начинаю рисовать сверху вниз? Я все еще хочу сохранить свой anchorPoint на 0,5,0.5.

Так рисунок из верхнего левого будет расположена на x=-widthOfScreen/2 и y=heightOfScreen/2

+0

Посмотрите этот ответ http://stackoverflow.com/a/20734093/1894067 –

+0

Нету, как я писал yScale на SKScene делает не работа. Получение msg на консоли: SKScene: настройка масштаба SKScene не влияет. – NovumCoder

+0

Интересно, но без вашего кода я думаю, что ребята в ответ не могут лучше понять, как вам помочь, попробуйте добавить код, чтобы ответить на эту проблему. –

ответ

1

Я не уверен, если это то, что вы собираетесь, но если вы просто хотите, чтобы изменить систему координат вокруг того, что вы можете сделать, это создать расширение для CGPoint, что-то вроде

//CGPoint+SpriteKit.swift 
extension CGPoint { 
    func flipCoordinates() -> CGPoint { 
     return CGPoint(x: x, y: UIScreen.mainScreen().bounds.height - y) 
    } 
} 

Я думаю, что это должно работать, так как ваша точка якорь (0,5, 0,5)

+0

Не совсем то, что я сделал, но я просто перевернул Y-координату, рисуя плитки (уровень) и элементы. Все остальное я продолжаю рисовать обычным способом, так как точка привязки равна 0,5,0,5. Но переключение в одну точку вместо преобразования всего - самый простой способ. Благодарю. – NovumCoder

0

С SKSpriteNode позволит вам перевернуть его содержание, используя шкалу -1, вы можете поместить все узлы под мастер SKSpriteNode с yScale из -1.

final class GameScene: SKScene 
{  
    var masterNode:SKSpriteNode! = nil 
    override func addChild(node: SKNode) 
    { 
     if masterNode == nil 
     { 
      masterNode = SKSpriteNode() 
      masterNode.position = CGPoint(x:0, y:size.height) 
      masterNode.anchorPoint = CGPointZero 
      masterNode.yScale  = -1 
      super.addChild(masterNode)   
     } 
     masterNode.addChild(node) 
    } 
} 

Обратите внимание, что вам нужно будет держать у позиции masterNode по одной линии с размером просмотра, если/когда изменения размера.

+0

Зачем использовать динамическую отправку в GameScene? Это ограничение на класс, есть ли веская причина? –

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