2016-12-06 1 views
2

Я хотел бы отобразить кучу перетаскиваемых изображений в spriteKit. Некоторые из изображений потребуют от меня резкой резки в графике, чтобы я мог видеть, что находится за изображениями. И когда я перетаскиваю изображения, я смогу увидеть другие изображения через отверстия, которые я разрезал на изображениях.как я разрезаю отверстие в изображении спрайта или текстуры, чтобы показать, что стоит за ним, используя spriteKit в swift

Если вам нужен визуальный, подумайте о кусочках головоломки.

Этот снизу обмен ссылками ниже выглядел очень просто и многообещающе, но вырез белого круга не отображается. По крайней мере, не в симуляторе. Мне нужно будет посмотреть, получится ли лучший результат на моем iphone через testflight.

Draw a hole in a rectangle with SpriteKit?

+0

Вы должны использовать SKCropNode, если вы читаете комментарии на тот, который вы опубликовали, вы можете видеть, что автор делает это – Knight0fDragon

+0

Хорошо. Я попробую skcropnode на основе этого ref: https://developer.apple.com/reference/spritekit/skcropnode – Neo42

+0

да, то, что вы делаете, на самом деле является инверсией этой ссылки, в которой находится .Subtract. I не помню 100%, так как это было некоторое время с тех пор, как я это сделал, но я не думаю. Subtract смешивает альфа-канал, поэтому вам, возможно, придется делать настраиваемый зеленый – Knight0fDragon

ответ

0

Используя этот

https://developer.apple.com/reference/spritekit/skcropnode

и

https://www.hackingwithswift.com/read/14/2/getting-up-and-running-skcropnode

«что-нибудь в цветной часть будет видна, все в прозрачной части будет invis кий «.

У меня есть мой первый успех. Очевидно, мне нужно поработать над позиционированием.

var taMain = SKTexture(imageNamed: "landscape144.jpg") 
var sprite1 = SKSpriteNode() 
sprite1 = SKSpriteNode(texture: taMain) 
sprite1.xScale = 2 
sprite1.yScale = 2 
sprite1.zPosition = 1 


var cropNode:SKCropNode = SKCropNode() 
cropNode.xScale = 1 
cropNode.yScale = 1 
cropNode.position = CGPoint(x: 0, y: 0) 
cropNode.zPosition = 2 

cropNode.maskNode = SKSpriteNode(imageNamed: "maskimage3.png") 
cropNode.maskNode?.position = CGPoint(x: 0, y: 0) 

cropNode.addChild(sprite1) 
self.addChild(cropNode) 

и во время touchesbegan

for touch: AnyObject in touches { 
//uncomment 2 lines to help you get your image positioned on screen. 
// it moves the whole cut image + hole 
//let location = touch.locationInNode(self) 
// cropNode.position = location 

//Or uncomment these 2 lines to move just the mask 
//let location = touch.locationInNode(cropNode) 
// cropNode.maskNode?.position = location //moves just the hole 
} 

Во время touchesbegan вы можете раскомментировать строку «cropNode.position = место», если вы хотите, чтобы переместить изображение и отверстие вместе и выяснить, хорошее место для это на экране. Или вы можете раскомментировать «cropNode.maskNode? .position = location», если вы хотите переместить отверстие.

Перемещение дыры работает только в том случае, если у вашего макияжа достаточно, чтобы покрыть все ваше изображение, из которого вы вырезаете. В противном случае вы теряете больше своего изображения, чем планировали. Таким образом, для моих целей я, вероятно, в конечном итоге сделаю изображение и маскирующие изображения, которые имеют точно такую ​​же высоту/ширину. Затем, в зависимости от того, что мне нужно, я загружу различные маскирующие элементы.

Мои изображения:


маска с прозрачным отверстием 144 на 144 пикселей

Mask with transparent hole 144 by 144 pixels


Пейзаж 144 на 144 пикселей

Landscape 144 by 144 pixels


Результаты в iphone 6 тренажере - Xcode 6,2

Results in iphone 6 simulator - xcode 6.2


маска большего размера с прозрачным отверстием

Larger Mask with transparent hole

+1

Можете ли вы показать, как выглядит 'maskimage.png', и конечный результат? – Confused

+0

Готово. Я уточнил свой код, загрузил исходные изображения, объяснил, что я понимаю об этом, и т. Д. ... – Neo42

1

Это известен как обратная маскировка. На данный момент, похоже, в SpriteKit нет простого способа сделать это.

Вам придется подделать его. Самый простой способ сделать это - реплицировать фон и положительно замаскировать его.

Это похоже на отверстие, но это не отверстие.

Поместите эту положительно маскированную репликацию, где будет отверстие, над «сыром», в котором есть «дыра».

Вот моя предыдущая попытка узнать, как сделать это в SpriteKit: How to cut random holes in SKSpriteNodes

+0

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

+0

согласны ли вы с этим утверждением: «На данный момент в SpriteKit нет простого способа сделать это». потому что я был бы ОЧЕНЬ счастлив услышать это, если вы можете! – Confused

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