SKTexture в: текстура выдает пустой результат

#swift #sprite-kit #sprite-sheet #sktexture

#swift #sprite-kit #sprite-sheet #sktexture

Вопрос:

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

Можно было бы подумать, что приведенное ниже даст вам половину нижней левой четверти изображения.

 let allTex = SKTexture(imageNamed: "zelda")
let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1/2, height: 1/2), in: allTex)
  

Однако это дает пустые результаты.

Ответ №1:

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

 let allTex = SKTexture(imageNamed: "zelda")
let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1/2, height: 1/2), in: allTex)
  

Это, однако, дает пустые результаты из-за вывода типа, говорящего, что результаты должны быть int, за которым следует какое-то неудачное округление 1/2 до 0. Чтобы исправить это, сделайте это вместо:

 let allTex = SKTexture(imageNamed: "zelda")
let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1.0/2.0, height: 1.0/2.0), in: allTex)
  

Это приводит к тому, что результаты вычисления становятся двойными 0,5, а затем, в конечном итоге, используется CGRect с точным значением float вместо округленного int.

Комментарии:

1. Это не проблема с CGRect, это проблема с тем, что вы не указали, что такое 1 и 2, поэтому компилятор будет использовать Int, когда нет десятичных знаков, потому что Int — самый быстрый тип для работы

2. @Knight0fDragon Уверен, что я понимаю, что происходит. Просто что-то, из-за чего я ударился головой о стену, так надеясь спасти кого-то другого таким же образом. С этим можно было столкнуться во многих местах, но в данном конкретном случае это было немного сложно реализовать из-за молчаливого сбоя и отсутствия изображения на экране.

3. Я просто уточнял, почему вы получили ошибку, которую вы получили.

4. @Knight0fDragon Спасибо, добавил упоминание о выводе типа в ответ.