2011-05-01 11 views
6

मैं रेटिना मोड में काम करने के लिए अपना बॉक्स 2 डी गेम प्राप्त करने का प्रयास कर रहा हूं, और उच्च-रिज़ॉल्यूशन मोड में चलते समय मैं बहुत परेशान करने वाले मुद्दों में भाग रहा हूं।cocos2d, box2d और रेटिना मोड: छोड़ दें, या इसे काम करने की कोशिश करें?

cocos2d रेटिना मोड में मेरे ग्राफिक्स को सही ढंग से प्रस्तुत करता है, लेकिन मुझे कम-रिज़ॉल्यूशन मोड के समान काम करने के लिए बॉक्स 2 डी प्राप्त करने के लिए हैक के बाद हैक की आवश्यकता मिल रही है। उदाहरण के लिए, मैं खोजने हूँ मैं डिबग आकार आकार सही आकर्षित रेटिना मोड में पाने के लिए कुछ इस तरह करने की जरूरत है:

b2Vec2 vertices[4]; 
vertices[0].Set(-0.5f/CC_CONTENT_SCALE_FACTOR(), 1.0f/CC_CONTENT_SCALE_FACTOR()); 
vertices[1].Set(-0.5f/CC_CONTENT_SCALE_FACTOR(), -1.0f/CC_CONTENT_SCALE_FACTOR()); 
vertices[2].Set(0.5f/CC_CONTENT_SCALE_FACTOR(), -1.0f/CC_CONTENT_SCALE_FACTOR()); 
vertices[3].Set(0.5f/CC_CONTENT_SCALE_FACTOR(), 1.0f/CC_CONTENT_SCALE_FACTOR()); 
int32 count = 4;  
b2PolygonShape polygon;  
polygon.Set(vertices, count); 

हैक कि (CC_CONTENT_SCALE_FACTOR() द्वारा सभी शीर्ष अंक का समायोजन), निश्चित रूप से अनिवार्य रूप से एक की ओर जाता है घनत्व हैक, समान आंदोलन रखने के लिए कम संकल्प मोड के लिए:

b2FixtureDef fixtureDef; 
fixtureDef.shape = &polygon; 
fixtureDef.density = 1.0f * CC_CONTENT_SCALE_FACTOR(); 
fixtureDef.friction = 0.9f; 
playerBody->CreateFixture(&fixtureDef); 

और वह एक और समायोजन हैक की ओर जाता है जब बलों को लागू करने:

b2Vec2 force = b2Vec2(10.0f/CC_CONTENT_SCALE_FACTOR(), 15.0f/CC_CONTENT_SCALE_FACTOR()); 
playerBody->ApplyLinearImpulse(force, playerBody->GetPosition()); 

मील रखें nd, मैं अपने डिबग ड्रा कॉल स्केलिंग द्वारा डिबग मोड में ड्राइंग रही है, इसलिए जैसे:

glPushMatrix(); 
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1.0f); 
world->DrawDebugData(); 
glPopMatrix(); 

क्या यह है कि मैं मूल रूप से रेटिना मोड के साथ काम करने के लिए Box2D होने के बारे में गलतफहमी हूँ है? मैं PTM_RATIO के स्थान पर Steffen Itterheim के सुझाए गए Box2DHelper class का उपयोग कर रहा हूं, लेकिन यह पर्याप्त नहीं लगता है। कोई विचार? मैं इस बिंदु पर अपने खेल के लिए पूरी तरह से रेटिना मोड पर छोड़ने वाला हूं।

m_debugDraw = new GLESDebugDraw(PTM_RATIO * CC_CONTENT_SCALE_FACTOR()); 
world->SetDebugDraw(m_debugDraw); 

मैं डॉन ':

उत्तर

7

मैं GLESDebugDraw वर्ग कि Cocos2D + Box2D Xcode टेम्पलेट और जिस तरह के साथ आता है का उपयोग कर रहा मैं पैमाने पर करने के लिए जब रेटिना में मोड बस के रूप में सरल रूप में है डिबग ड्रा बनाने टी CC_CONTENT_SCALE_FACTOR() का उपयोग करने के बाद कहीं भी contentSizeInPixels आदि जैसे कुछ स्पष्ट रूप से नामित वर्ग विधियों/गुणों को छोड़कर, कोकोस 2 डी बिंदु-आधारित समन्वय स्थान का उपयोग करता है जिसमें समन्वय मान समान रहता है चाहे रेटिना मोड या लो-रेज मोड में, जिसका अर्थ है PTM_RATIO का उपयोग दोनों मोड में बॉक्स 2 डी फिक्स्चर या आकार बनाने के लिए किया जा सकता है।

+0

दिलचस्प, मुझे इसे बाद में आजमाने की ज़रूरत होगी। यह शानदार होगा अगर यह उतना आसान था। –

+0

दुर्भाग्य से, यह अभी भी पर्याप्त प्रतीत नहीं होता है। मुझे अभी भी पता चल रहा है कि मेरे बॉक्स 2 डी स्थिरता आकार अभी भी रेटिना मोड में जितना बड़ा होना चाहिए उतना ही बड़ा होना चाहिए। अपने बॉक्स 2 डी फिक्स्चर के लिए कोष्ठक निर्दिष्ट करते समय आपको PTM_RATIO (चाहे वह 32 या 64 हो) को ध्यान में रखना न पड़े? –

+1

@ unforgiven3 लेकिन मैं वही PTM_RATIO का उपयोग कर रहा हूं, भले ही '[निर्देशक सक्षम रीटिना डिस्प्ले: हाँ] 'या' [निर्देशक सक्षम रीतिना डिस्प्ले: नहीं] '। Cocos2D sprites के बारे में: क्या आपने इस्तेमाल की गई सभी स्प्राइट छवियों के '-hd' संस्करण को तैयार किया था? – Lukman

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