C'è un modo possibile per creare una casella piena di sfumature in SpriteKit? Ho provato a riempire un nodo di forma con quello, ma nota che solo i colori a tinta unita funzionano con skshapenode.Come creare un gradiente in Spritekit?
risposta
Non penso che questo sia possibile con l'attuale SKShapeNode
, che a malapena gestisce le sue funzionalità di base al momento. Un buon approccio se non si desidera utilizzare le immagini del gradiente di sprite preesistenti sarebbe quello di creare un SKTexture
da applicare un CIFilter
(come forse CILinearGradient
in questo caso) a un'immagine di casella di base e quindi creare il SKSpriteNode
da quello SKTexture
.
La risposta di Matt è corretta, ma non è ancora possibile aggiungere una sfumatura. Questo è il mio tentativo attuale, se qualcuno sa come farlo funzionare, si prega di aggiornare per thread.
Ecco la Core Image Ref
CIFilter *gradientFilter = [CIFilter filterWithName:@"CILinearGradient"];
//[gradientFilter setDefaults];
CIColor *startColor = [CIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
CIColor *endColor = [CIColor colorWithRed:0 green:0 blue:0 alpha:1.0];
CIVector *startVector = [CIVector vectorWithX:0 Y:0];
CIVector *endVector = [CIVector vectorWithX:0.21 Y:0.31];
[gradientFilter setValue:startVector forKey:@"inputPoint0"];
[gradientFilter setValue:endVector forKey:@"inputPoint1"];
[gradientFilter setValue:startColor forKey:@"inputColor0"];
[gradientFilter setValue:endColor forKey:@"inputColor1"];
SKEffectNode *effectNode = [SKEffectNode node];
effectNode.filter = gradientFilter;
effectNode.shouldEnableEffects = YES;
[self addChild:effectNode];
//effectNode.position = CGPointMake(200, 200);
Un altro buon modo per testare i filtri, è scaricare l'applicazione demo CIFunHouse dal WWDC 2013.
Sono stato in grado di creare un gradiente con CAGradientLayer e creare un contesto UIImage, rendendo questo strato sul contesto, e creando una texture dal risultante UIImage, era veloce, e non ho avuto alcun rallentamento (ma avevo solo bisogno di crearne uno per un pulsante). – AwDogsGo2Heaven
@ AwDogsGo2Heaven puoi aggiungere quel codice come risposta. – DogCoffee
Ho aggiunto la risposta sopra. – AwDogsGo2Heaven
Ecco una soluzione. (Nota, sto usando Rubymotion, un rubino vincolante per l'obiettivo C/iOS, ma la logica è esattamente la stessa. Se qualcuno vuole modificare questa e mettere l'obiettivo c equivalente, andare avanti
size = CGSizeMake(50,50)
scale = options[:scale] || UIScreen.mainScreen.scale
opaque = options.fetch(:opaque, false)
UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
context = UIGraphicsGetCurrentContext()
gradient = CAGradientLayer.layer
gradient.frame = CGRectMake(0,0,50,50)
gradient.colors = [SKColor.blackColor.CGColor,SKColor.whiteColor.CGColor]
gradient.renderInContext(context)
image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
texture = SKTexture.textureWithCGImage(image.CGImage)
node = SKSpriteNode.alloc.initWithTexture(texture)
Grazie, ma questo non funzionerà per OSX: Sprite Kit. È limitato a iOS. – Jonny
Qualche ragione, perché? – AwDogsGo2Heaven
UIGraphicsBeginImageContextWithOptions non esiste. – Jonny
OK qui è qualcosa che sto usando ora, l'ho basato sulla soluzione di AwDogsGo2Heaven, adattata per Mac. Sarebbe dolce con una soluzione completamente compatibile, sono tutt'altro che sicura di come creare i contesti, ma sembra funzionare, inoltre non sono sicuro della scala. In esecuzione su retina mac e non retina mac e non vedo alcun problema ma il contesto è creato usando la scala 2 quindi potrebbe essere eccessivo per mac non retina.Metto questo in una categoria su SKTexture
Per usarlo, basta chiamare il +(SKTexture*)gradientWithSize:(const CGSize)SIZE colors:(NSArray*)colors
.
Edit: codice aggiornato e più discussione qui: Gradient texture has wrong scale on retina Mac
- 1. Come creare un UITextField su SpriteKit
- 2. Come creare il gradiente radiale in Firemonkey
- 3. Creare un gradiente radiale di programmazione
- 4. Come creare un menu principale per un gioco spritekit fatto con swift in xcode?
- 5. SpriteKit - Creazione di un timer
- 6. Come utilizzare "enumerateChildNodesWithName" con Swift in SpriteKit?
- 7. Gradiente lungo un percorso
- 8. Come mettere in pausa completamente un gioco? SpriteKit/SceneKit [SWIFT]
- 9. Creare un gradiente radiale per Internet Explorer 6/7/8
- 10. del nodo con SpriteKit
- 11. Sottoclasse classi SpriteKit in Swift
- 12. Come funziona collisionBitMask? Swift/SpriteKit
- 13. Gradiente lineare multicolore in WinForms
- 14. Android - Come disegnare un gradiente ad arco
- 15. Come ottengo un gradiente di colore arcobaleno in C#?
- 16. Come creare un gradiente di sfondo animato come l'app di Instagram?
- 17. Dissolvenza dell'immagine in trasparenza come in un gradiente
- 18. Come animare il gradiente?
- 19. \ n non funziona in Sklabel SpriteKit
- 20. in gradiente Android
- 21. Gradiente discesa in Java
- 22. Mettere in pausa un SKAction in Spritekit con Swift
- 23. Discesa gradiente stocastica dall'implementazione della discesa del gradiente in R
- 24. spritekit ios9 fps drop
- 25. Come riempire un tracciato con gradiente in drawRect :?
- 26. Animazione di un gradiente SVG
- 27. Come faccio a collegare un file .sks a un file .swift in SpriteKit
- 28. Come creare uno sfondo usando il gradiente CSS con un colore piatto?
- 29. Fare una particella seguire un percorso in spriteKit
- 30. Rileva Sprite Collision senza rimbalzare in SpriteKit
sono tornato .. e trovato questo: https://gist.github.com/Tantas/7fc01803d6b559da48d6 – Jonny
consultare questo https: // StackOverflow .com/questions/18894493/making-a-skscenes-background-transparent-not-working-is-this-a-bug/24494346 # 24494346 – Suresh