2013-10-08 12 views
8

क्या स्प्राइटकिट में ढाल वाले बक्से को बनाने का कोई संभावित तरीका है? मैंने इसके साथ एक आकृति नोड भरने की कोशिश की है, लेकिन यह नोट करता है कि केवल ठोस रंग skshapenode के साथ काम करते हैं।Spritekit में ग्रेडियेंट कैसे बनाएं?

+0

मैं वापस कर रहा हूँ .. और इस पाया: https://gist.github.com/Tantas/7fc01803d6b559da48d6 – Jonny

+0

इस https का संदर्भ लें: // stackoverflow .com/प्रश्न/188944 9 3/बनाना-a-skscenes-background-transparent-not-working-is-this-a-bug/24494346 # 24494346 – Suresh

उत्तर

4

मुझे नहीं लगता कि यह वर्तमान SKShapeNode के साथ संभव है, जो वर्तमान में इसकी मूलभूत सुविधाओं को आसानी से संभालता है। यदि आप पूर्व-मौजूदा स्प्राइट ढाल छवियों का उपयोग नहीं करना चाहते हैं तो एक अच्छा दृष्टिकोण SKTexture को CIFilter (जैसे CILinearGradient इस मामले में) को मूल बॉक्स छवि पर लागू करने से, और से SKSpriteNode बनाने से बनाना होगा।

0

मैट का जवाब सही है, लेकिन मैं अभी तक ढाल जोड़ने में असमर्थ हूं। यह मेरा घुमावदार प्रयास है, अगर कोई जानता है कि इसे कैसे काम करना है, तो कृपया थ्रेड के लिए अपडेट करें।

यहाँ 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); 

एक और अच्छा आपके फ़िल्टर का परीक्षण करने रास्ता है, यहाँ एक समाधान है WWDC 2013

+0

मैं हमें ग्रेडियंटेंट लेयर बनाने और यूआईएममेज संदर्भ बनाने में सक्षम था, जो इसे प्रस्तुत करता था संदर्भ पर परत, और परिणामस्वरूप UIImage से बनावट बनाना, यह तेज़ था, और मुझे धीमा नहीं हुआ (लेकिन मुझे केवल एक बटन के लिए एक बनाने की आवश्यकता है)। – AwDogsGo2Heaven

+0

@ AwDogsGo2Heaven क्या आप उस कोड को उत्तर के रूप में जोड़ सकते हैं। – DogCoffee

+1

मैंने उपरोक्त उत्तर जोड़ा। – AwDogsGo2Heaven

6

से डेमो एप्लिकेशन CIFunHouse डाउनलोड है। (ध्यान दें, मैं Rubymotion, एक गहरे लाल रंग का उद्देश्य सी/iOS के लिए बाध्यकारी, उपयोग कर रहा हूँ लेकिन तर्क बिल्कुल वैसा ही है। किसी को इस संपादित करें और उद्देश्य सी बराबर डाल करना चाहता है, आगे बढ़ो

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) 
+0

धन्यवाद लेकिन यह ओएसएक्स के लिए काम नहीं करेगा: स्प्राइट किट। यह आईओएस तक ही सीमित है। – Jonny

+0

वैसे भी कारण क्यों? – AwDogsGo2Heaven

+1

UIGraphicsBeginImageContextWithOptions मौजूद नहीं है। – Jonny

4

ठीक यहाँ है मैं अब कुछ उपयोग कर रहा हूं। मैंने इसे AwDogsGo2Heaven के समाधान पर आधारित किया, हालांकि मैक के लिए अनुकूलित किया गया। एक पूरी तरह से संगत समाधान के साथ मीठा होगा। मुझे यकीन है कि संदर्भ कैसे बनाएं। लेकिन काम करने लगता है। इसके अलावा मैं पैमाने के बारे में अनिश्चित हूं। रेटिना मैक और गैर रेटिना मैक पर चल रहा है और किसी भी समस्या को नहीं देख सकता है लेकिन संदर्भ स्केल 2 का उपयोग करके बनाया गया है, इसलिए गैर रेटिना मैक के लिए ओवरकिल हो सकता है। मैंने इसे SKTexture पर एक श्रेणी में रखा है।

इसका उपयोग करने के लिए, बसपर कॉल करें 210।

संपादित करें: अपडेट किया गया कोड और यहाँ और अधिक चर्चा: Gradient texture has wrong scale on retina Mac

संबंधित मुद्दे