2017-01-11 3 views
3

Я делаю игровое приложение с SpriteKit и последним Xcode.
Я хочу отображать одиночные цветные спрайты в пикселях.
Я пробовал следующий код.
Спрайты SKSpriteNode размыты только на реальной машине iPhone 7 Plus

let sprite = SKSpriteNode(color: SKColor.gray, size: CGSize(width: 16, height: 16)) 
sprite.anchorPoint = CGPoint(x: 0, y: 0) 
sprite.position = CGPoint(x: 100, y: 100) 
sprite.texture?.filteringMode = .nearest 
addChild(sprite) 

В большинстве случаев он идеально отображался. (В частности, это все симуляторы iOS, настоящая машина iPhone 6s, iPod touch, iPad.)
Однако в iPhone 7 Plus настоящая машина размыта, как на изображении ниже.

enter image description here

Я понимаю, что невозможно отобразить пиксель идеального, так как изображение 1242 х 2208 пикселей снижаются до 1080 х 1920 пикселей в серии iPhone Plus.
Но скриншот должен быть пиксельным, потому что он получает 1242 x 2208 пикселей до понижающей дискретизации.
Я не могу попробовать, потому что у меня его нет, но я думаю, что это будет тот же результат на реальной машине iPhone 6 Plus и iPhone 6s Plus.

Есть ли способ решить эту проблему?

Мой английский не очень хорошо.
Спасибо.


Я попытался идею @ Knight0fDragon.
Я уладил спрайты с высотой 0.666667 в 20 чувствах.
Я пробовал размер SKView при 414 x 736 и 360 x 640.
В результате, хотя это не идеальный пиксель, он стал намного лучше.
Однако размер скриншота по-прежнему составляет 1242 x 2208 пикселей.

https://i.stack.imgur.com/Cadgp.png

+0

Хороший вопрос! Это то, о чем я тоже задумывался. Некоторые рамки имеют возможность доступа к разрешению 1920x1080 напрямую, без масштабирования. Я удивлен, что SpriteKit не является одним из них. – Confused

+0

Вы уверены, что не находитесь в режиме заполнения масштаба? Какова размер вашей сцены также – Knight0fDragon

+0

@Confused apple OS не позволяет вам получить доступ к 1920x1080 напрямую, сохраняя при этом стиль стиля сетчатки. Вам нужно будет избавиться от всех сетчатых и точечных систем на месте и написать прямо на GPU для его достижения. – Knight0fDragon

ответ

2

Вот пиксель совершенный 1080 по 1920 изображения для работы с для тех, кто хочет видеть, если они могут решить эту проблему.

enter image description here

ближайшего соседа к 1 242:

enter image description here

ближайшего соседа обратно к 1080:

enter image description here

+0

Я добавил ближайшего соседа, затем отступил. Я наложился в GIMP, мои глаза не обнаруживают изменения – Knight0fDragon

+0

Я думаю, что GIMP и Photoshop могут справиться с этим правильно. Вопрос в том ... делает iPhone и iOS? – Confused

+0

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

2

Я предложил бы использовать SKShapeNode, который имеет .isAntialiased поле (набор это к fa ЛСЭ).

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

Если вы должны иметь их как спрайты, то вы можете преобразовать ShapeNode в текстуру, и надеюсь, что он не теряет качества:

Вот выборка я сделал, что превращает labelNode в текстуру: https://gist.github.com/anonymous/4ea86cf6a32bdd79376cc2a4f4d5a151

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

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