2011-07-08 21 views
7

में आकार/फिक्स्चर/निकायों के केंद्र कैसे सेट करें हे, मैं एसएफएमएल और बॉक्स 2 डी को एकीकृत करने की कोशिश कर रहा हूं, और एसएफएमएल ने स्प्राइट्स, आकार इत्यादि के लिए सेटिंग केंद्र बनाये हैं। दूसरी तरफ, बॉक्स 2 डी, मुझे परेशानी हो रही है क्योंकि मैं यह नहीं समझ सकता कि कैसे आकार या स्थिरता के केंद्र को सेट या यहां तक ​​कि ढूंढें।बॉक्स 2 डी

मुझे ऐसा लगता है कि जब कोने एक b2_PolygonShape केंद्र शिखर सरणी में पहले सिरे पर सेट है करने के लिए मैन्युअल रूप से जोड़ना, लेकिन परिणाम बहुत अलग है जब शॉर्टकट कार्यों SetAsBox() या किसी अन्य SetAs_ का उपयोग कर रहे हैं _()। केंद्र आकार के बीच, या बॉक्स/आकार के आधे हद तक है।

मुझे बॉक्स 2 डी और एसएफएमएल की केंद्रित प्रणाली को सामान्य करने की आवश्यकता है, लेकिन मैं यह नहीं समझ सकता कि स्थानीय समन्वय प्रणाली वस्तुओं के लिए कैसे काम करती है।

मैं बॉक्स 2 डी में आकार, फिक्स्चर, निकायों इत्यादि जैसी कई वस्तुओं के केंद्र कैसे सेट/प्राप्त करूं?

+1

बी 2body के केंद्र से आपका क्या मतलब है? द्रव्यमान का केंद्र? – Andrew

+1

केंद्र जो वैश्विक, विश्व समन्वय प्रणाली में स्थिति के लिए उपयोग किया जाता है। स्थानीय शरीर समन्वय प्रणाली नहीं है जो मुझे लगता है कि शरीर पर जुड़ने के लिए प्रयोग किया जाता है। – Griffin

उत्तर

4

ठीक है मुझे एहसास हुआ कि एसएफएमएल और बॉक्स 2 डी वास्तव में सभी अलग नहीं थे, लेकिन मैं सिर्फ इस बारे में नहीं सोच रहा था कि विश्व निर्देशांक में आकार कैसे सही ढंग से किए/प्रस्तुत किए जाते हैं।

जब तक अन्यथा उल्लिखित, (0,0) हमेशा जब अपनी स्थिति को चारों ओर ले जाया जा रहा है/तैयार है, और प्रत्येक शिखर उस बिंदु के संबंध में तैयार की है refrence बिंदु/वस्तु के केंद्र के रूप में प्रयोग किया जाता है। के रूप में यह कहा वस्तु के ऊपरी बाएं कोने से ऑफसेट किया गया था, एक आकार/स्प्राइट के केंद्र नहीं (0,0) की स्थापना

SFML ट्यूटोरियल थोड़ा भ्रमित था।

-1

आप बस कर सकते हैं:

b2Body *body = ...; 
b2Vec2 pos = body->GetPosition(); 

इस दुनिया (pos.x और pos.y मीटर में परिभाषित) में शरीर की स्थिति है। इसका मतलब है कि आपको अनुपात का उपयोग करना है, उदाहरण: 1 मीटर = 20 पिक्सेल। इसलिए आपको पिक्सेल में स्थिति प्राप्त करने के लिए निर्देशांक को अपने अनुपात से गुणा करना होगा।

अपनी छवियों को आकर्षित करने के लिए उस स्थिति का उपयोग करें। यदि आवश्यक हो तो आप अपनी छवि में निर्देशांक जोड़ सकते हैं और शरीर की स्थिति के सापेक्ष इन निर्देशांकों पर छवि खींच सकते हैं।

ध्यान रखें कि आपको अपनी छवियों को उस अनुपात के साथ आकर्षित करना होगा। जब अनुपात बदलता है (ज़ूम इन या ज़ूम आउट), छवियों को भी बड़ा करना चाहिए।

मेरे खेल के लिए, मैं ओपनजीएल के साथ एसडीएल का उपयोग कर रहा हूं, जो एक बहुत अच्छा संयोजन है, इसलिए मुझे नहीं पता कि एसएफएमएल कैसे काम करता है।

+0

मैं स्थानीय केंद्र के बारे में बात कर रहा हूं, जो स्थानीय केंद्र के चारों ओर सभी शीर्षकों को चित्रित करके वैश्विक निर्देशांक कैसे समाप्त होता है। – Griffin

2

मुझे लगता है कि box2d के साथ आप बहुभुज के 'सेंट्रॉइड' को अपने शरीर की स्थिति के साथ बनाने के लिए जिम्मेदार हैं। मूल रूप से आपको ऐसा करने के लिए कुछ करना है।

  • कंप्यूट कोने (b2vec)

  • शिफ्ट -centroid से कोने की अपनी सूची के केन्द्रक।

Box2d इस कार्य के साथ आपकी सहायता करने के लिए आवश्यक कार्य प्रदान करता है। SetAs__ के साथ क्या होता है यह है कि केंद्र (0,0) है और बहुभुज शरीर के केंद्र के आसपास समरूप रूप से बनाया गया है।

1

मैं इसे एक और प्रयास दूंगा। मुझे पूरा यकीन है कि मैं आपकी मदद कर सकता हूं लेकिन मैं आपके प्रश्न को पूरी तरह से समझ नहीं पा रहा हूं।

शरीर में एक स्थिति (b2Vec2) है।
एक शरीर b2Fixture रों (घनत्व, घर्षण, बहाली, आकार, आदि ...)
b2PolygonShape कोने और बड़े पैमाने पर डेटा है है। वे शिखर शरीर की स्थिति के सापेक्ष हैं।

एक b2PolgygonShape के लिए उदाहरण कोने (आयत, आकार: 1 मीटर * 1 मीटर)

(-0.5f, -0.5f) // left upper corner 
(0.5f, -0.5f) // right upper corner 
(0.5f, 0.5f) // right lower corner 
(-0.5f, 0.5f) // left lower corner 

ध्यान रखें कि आप कोने खुद के सेट नहीं कर सकते हैं! आपको उन्हें

b2PolgygonShape::Set(b2Vec2 *vertices, int count); 

यह विधि शीर्षस्थों के आधार पर जन डेटा की गणना करेगी।

+0

कोशिश करने के लिए धन्यवाद, लेकिन मैंने इसे समझ लिया! मेरा सवाल थोड़ा उलझन में था, लेकिन मुझे पता चला कि ग्लोबल, विश्व निर्देशांक में आकार को प्रस्तुत करते समय 0,0 का उपयोग रिफ्रेंस पॉइंट के रूप में किया जाता है। मुझे पता था कि यह अंत में स्पष्ट होगा! – Griffin

0

यह शायद संबंधित है, हालांकि मैं Box2DWeb और Easel.js का उपयोग कर बॉक्स 2 डी और एसएफएमएल के बजाय उपयोग कर रहा हूं। मुझे जिस मुद्दे का सामना करना पड़ा वह यह है कि Easel.js regX/regY (स्प्राइट के ग्राफ़िकल सेंटर) को द्रव्यमान के भौतिक केंद्र से मेल खाना चाहिए।

एक b2FixtureDef, शरीर के द्रव्यमान का केंद्र के साथ एक सरल b2Body लिए b2FixtureDef.shape की m_centroid साथ मेल खाता है (चाहे SetAsBox, SetAsArray, नई b2CircleShape, आदि)।

बहु स्थिरता निकायों और अनियमित बहुभुज, क्या मेरे लिए काम किया के लिए सभी जुड़नार (यानी फोन b2Body.CreateFixture) जोड़ने के लिए था, तो ग्राफिक regX/b2Body.m_sweep.localCenter.x/y के बराबर regY (सेट पिक्सेल/मीटर स्केल कारक से गुणा)।

यह सरल मंडलियों और बक्से के लिए काम नहीं करता था, लेकिन वे पहली जगह में कोई समस्या नहीं थीं। उम्मीद है की यह मदद करेगा।