2015-04-20 6 views
1

Я начал учиться быстро, сделав игру и столкнувшись с некоторыми проблемами.
Я работаю над плиткой. Я создал доску с белыми плитами 6x6 с некоторыми отверстиями, а поверх них я создал плитки, которые будут перемещаться по цвету.
Swift SKView textureFromNode идет не так

  • белая плитка статична
  • цвет плитки динамичнее

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

Как вы можете видеть на втором изображении белых плиток и цветных плиток не соответствуют их позиции. Между ними есть небольшой разрыв. У меня есть ряд позиций, и плитки помещаются в одну и ту же позицию, но когда я создаю спрайт, они немного сдвинуты.

let boardTexture = self.view?.texture(from: backgroundNodes) 
boardBackground = SKSpriteNode(texture: boardTexture) 

После поиска и чтения я попытался все это, но не помог:

  • инстанцирует все после первого обновления вызова
  • добавить в backgroundNodes другого спрайта, который больше, как экран
  • изменение SKTexture filteringMode
  • место для высева место: 1.2345 -> 1.2

ответ

4

Вы должны всегда использовать

SKView().texture(from: SKNode, crop: CGRect) 

иначе вы склонны получить артефакты. Зерна должно быть, как правило,

CGRect(x:-size.width/2, y:-size.height/2, width:size.width, height:size.height) 

, если ваш узел имеет анкерную точку по умолчанию 0,5 0,5 (т.е. в центре). Использование этого даст вам размер, который вы планируете использовать. Кроме того, вам не нужен этот

self.view?.texture(from:backgroundNodes) 

вместо этого, просто сказать

SKView().texture(from:backgroundNodes) 

и вы можете избежать необходимости хранить ссылку где-нибудь. Кроме того, если вы что-то делаете в функции init подкласса sknode, не будет никакого «вид» члена, потому что он еще не был добавлен в дерево.

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

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