#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 Спасибо, добавил упоминание о выводе типа в ответ.