2016-01-27 11 views
11

मैंने भौतिकी के शरीर के साथ एक स्प्राइटकिट दृश्य बनाया है। यह काफी अच्छा काम कर रहा है। मैं "कैमरा नोड" के साथ ऐप्पल के सर्वोत्तम अभ्यास का उपयोग करके, दृश्य के चारों ओर भी स्क्रॉल कर रहा हूं।स्प्राइटकिट भौतिकी जोड़ों को आगे बढ़ने के लिए दूषित

मेरे दृश्यों नोड पेड़ कि तरह है:

Scene 
|- World 
    |- Camera node 
    |- Game nodes with physics bodys 

मेरे समस्या है, खेल के दौरान मैं नए जोड़ों (ज्यादातर स्थिर जोड़) गतिशील के साथ नए नोड्स पैदा करते हैं। उस बिंदु पर, दुनिया के नोड की शुरूआत की तुलना में एक अलग स्थिति होती है (उदाहरण: शुरूआत (0,0), खेल के दौरान (1000,500) ..) अब, निश्चित जोड़ों के लिए एंकरपॉइंट नहीं है जिस स्थिति में मैं इसे चाहता हूं, यह दृश्य में कहीं है।

मुझे लगता है कि दृश्य की समन्वय प्रणाली भौतिकी इंजन की समन्वय प्रणाली के लिए अलग है।

[world.scene convertPoint:node.position fromNode:node.parent]; 

मैं "नोड" की स्थिति में anchorPoint सेट करना चाहते हैं:

लंगर बिंदु के लिए, मैं निम्नलिखित रूपांतरण का उपयोग करें। विश्व नोड को स्थानांतरित करने के बाद, एंकरपॉइंट की गणना अब और काम नहीं कर रही है।

आपकी मदद के लिए धन्यवाद!

Greetz - Nekro

अद्यतन: प्लेयर पर दृश्य केंद्र के लिए

कोड

- (void)centerOnNode:(SKNode*)node { 
    CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent]; 
    node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y); 
} 
+0

कैमरा नोड की बजाय दुनिया में अपने गेम नोड्स जोड़ने का प्रयास करें। मैंने एक टेस्ट ऐप लागू किया और विश्व/कैमरे को उम्मीद के अनुसार काम करने के बाद एक जोड़ जोड़ा। – 0x141E

+0

@ 0x141E इसके लिए खेद है, मैंने अपना टेक्स्ट अपडेट किया। मैं गेम नोड्स को कैमरा नोड के समानांतर में जोड़ा जाता है, न कि कैमरा नोड के बच्चे के रूप में। अजीब बात यह है कि, अगर मैं अपने स्प्राइटकिट दृश्य के लिए भौतिकी के विज़ुअलाइज़ेशन को सक्रिय करता हूं, तो स्पोरैडिक जोड़ मेरे केंद्रीय प्लेयर नोड से जुड़े दिखाई देते हैं .. मैंने पहले से ही एक ही फ़ंक्शन को ब्रेकपॉइंट सेट किया है जिसमें मैं जोड़ बनाता हूं, लेकिन ऐसा लगता है कि यह पथ है इस "भूत-जोड़ों" के लिए कभी नहीं दौड़ें ... – Nuker

+0

बस यह सुनिश्चित करने के लिए: आपके भौतिकी निकाय दृश्य समन्वय का उपयोग कर जुड़े हुए हैं? और नोड का नहीं? – ColdSteel

उत्तर

0

SpriteKit भौतिकी के साथ जोड़ों के लिए दो शर्तें हैं:

  1. दुनिया (दृश्य) अंतरिक्ष में जोड़ों को परिभाषित करें।
  2. दुनिया को स्थानांतरित न करें।

आपके प्रश्न और टिप्पणियों से, ऐसा लगता है कि आपको # 1 सही मिला है: जब जोड़ नोड्स के बीच होता है जो दृश्य के सीधे बच्चे नहीं होते हैं, तो आपको उन्हें उपयोग करने से पहले समन्वय को दृश्य स्थान में परिवर्तित करने की आवश्यकता होती है एक संयुक्त परिभाषित करने के लिए।

हालांकि, जब आप रूट समन्वय प्रणाली को स्थानांतरित करने का प्रयास करते हैं तो स्प्राइटकिट भौतिकी इसे अच्छी तरह से संभाल नहीं पाती है। इसलिए, दुनिया को स्थानांतरित करके "कैमरा" को लागू करने से जोड़ों के लिए परेशानी होती है। इसके बजाय:

  • आप लक्षित करना बर्दाश्त कर सकते हैं, तो केवल iOS 9.0/ओएस एक्स 10.11/tvOS 9.0 और ऊपर, SKCameraNode बजाय दुनिया हिलाने की का उपयोग करें। यह भी आसान है!

    (यदि आप इस बारे में सोच रहे हैं कि आप केवल आईओएस 9 का समर्थन कर सकते हैं, तो adoption rate statistics देखें, और अपने विकास कार्यक्रम की तुलना करें ... यदि आप थोड़ी देर के लिए शिपिंग नहीं करेंगे, तो आईओएस 9 " 1 "समय आपका काम हो गया द्वारा OS संस्करण। याद रखें भी वहाँ उत्साही ग्राहकों और प्रारंभिक उपयोगकर्ताओं के बीच एक उच्च सहसंबंध है।)

  • आप आईओएस का समर्थन कर रहे हैं तो 8/ओएस एक्स 10.10 अभी भी, एक अतिरिक्त परत जोड़ने की कोशिश अपने दृश्य में: एक नोड को स्थानांतरित करके एक कैमरा नकली जो आपके दृश्य का बच्चा है और आपकी सभी गेम सामग्री के माता-पिता हैं।

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