मैं वर्तमान में एक आईफोन एप्लिकेशन लिखने के लिए एसडीएल 2 लाइब्रेरी और सी का उपयोग कर रहा हूं, और अधिकांश भाग के लिए चीजें अच्छी तरह से चल रही हैं। दुर्भाग्यवश, कुछ क्षेत्रों में विशेष रूप से आईओएस-विशिष्ट कार्यों में प्रलेखन काफी पतला प्रतीत होता है। मैं एसडीएल 2 का उपयोग करने के लिए नया हूं, और इससे चीजें बहुत मुश्किल हो जाती हैं। इस प्रकार, सब कुछ काम किया है, लेकिन मैं एक समस्या पर फंस गया हूँ। एसडीएल 2 विशेष रूप से मोबाइल एप्लिकेशन के लिए उपयोग किए जाने वाले छह ईवेंट-प्रकारों को परिभाषित करता है। README-ios.txt फ़ाइल इस तरह के रूप में उन्हें और उन्हें प्रयोग करने में बताता है:मुझे एसडीएल 2 आईओएस एप्लिकेशन घटनाओं का उपयोग कैसे करना चाहिए?
int HandleAppEvents(void *userdata, SDL_Event *event)
{
switch (event->type)
{
case SDL_APP_TERMINATING:
/* Terminate the app.
Shut everything down before returning from this function.
*/
return 0;
case SDL_APP_LOWMEMORY:
/* You will get this when your app is paused and iOS wants more memory.
Release as much memory as possible.
*/
return 0;
case SDL_APP_WILLENTERBACKGROUND:
/* Prepare your app to go into the background. Stop loops, etc.
This gets called when the user hits the home button, or gets a call.
*/
return 0;
case SDL_APP_DIDENTERBACKGROUND:
/* This will get called if the user accepted whatever sent your app to the background.
If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops.
When you get this, you have 5 seconds to save all your state or the app will be terminated.
Your app is NOT active at this point.
*/
return 0;
case SDL_APP_WILLENTERFOREGROUND:
/* This call happens when your app is coming back to the foreground.
Restore all your state here.
*/
return 0;
case SDL_APP_DIDENTERFOREGROUND:
/* Restart your loops here.
Your app is interactive and getting CPU again.
*/
return 0;
default:
/* No special processing, add it to the event queue */
return 1;
}
}
int main(int argc, char *argv[])
{
SDL_SetEventFilter(HandleAppEvents, NULL);
//... run your main loop
return 0;
}
मैं इस कोड के बारे में कुछ प्रश्न हैं।
SDL_SetEventFilter() क्या करता है? मैंने एसडीएल विकी पेज पढ़ा, और यह विशेष रूप से अस्पष्ट लग रहा था।
अभ्यास में, HandleAppEvents() फ़ंक्शन कैसे काम करता है? उदाहरण के लिए, अगर मैं इस तरह कोड है:
int main(int argc, char* argv[])
{
//Initialize SDL, etc...
SDL_SetEventFilter(HandleAppEvents, NULL);
//I've got some SDL_Textures and windows and things...
SDL_Window* my_window;
SDL_Renderer* windowrend;
SDL_Texture* tex1, tex2, tex3;
//Primitive game loop
while(game_is_running){
handle_input();
do_logic();
update_screen();
}
destroy_all_my_data();
SDL_Quit();
return 0;
}
कोड किस तरह HandleAppEvents में रखा जाना चाहिए() या मुख्य() स्मृति नष्ट या मेरे खेल लूप को रोकने के लिए जब मैं उदाहरण के लिए एक SDL_APP_WILLENTERBACKGROUND प्राप्त करते हैं,?
मान लें कि tex2 व्यय योग्य है और यदि ऐप को SDL_APP_LOWMEMORY प्राप्त होता है तो हटाया जा सकता है। मैं अन्य डेटा के साथ गड़बड़ किए बिना हैंडलएपएवेंट्स() से tex2 को कैसे हटाऊंगा?
उपयोगकर्ता डेटा सूचक में क्या है?
जब मेरा ऐप पृष्ठभूमि में प्रवेश करता है, तो क्या मुझे अपने बनावट को सतहों में परिवर्तित करना चाहिए, और उन्हें ../tmp/ निर्देशिका में बीएमपीएस के रूप में सहेजना चाहिए, या जब भी ऐप अग्रभूमि पर वापस आ जाएगा तब भी वे स्मृति में होंगे?
मुझे आशा है कि मेरे भ्रमित प्रश्न कुछ प्रकार की समझ लेंगे। यदि कोई जगह है तो मुझे एसडीएल 2 के लिए एक संपूर्ण दस्तावेज मिल सकता है, यह जानना बहुत अच्छा होगा।
एक नज़र डालने के लिए धन्यवाद!
+1 एक बहुत ही जानकारीपूर्ण उत्तर के लिए। यदि आपके पास समय है, तो मैं वास्तव में कुछ कोड देखना चाहता हूं जो आपके मतलब से बताता है! – BrainSteel
मुझे नहीं लगता कि इस मामले में एक कोड उदाहरण लागू होता है क्योंकि आप ज्यादातर "दार्शनिक" प्रश्न पूछ रहे हैं, और जहां ऐप विशिष्ट भाग (SDL_APP_LOWMEMORY, आदि) में कोड उपयोगी होगा ... लेकिन मेरे पास कोई नहीं है वहां देने के लिए उदाहरण में, संभवतः संसाधनों को मुक्त करना और उन्हें आवश्यकतानुसार उन्हें फिर से बनाने के लिए ट्रैक रखना शामिल है। लेकिन अगर आप उत्तर पर स्पष्टीकरण चाहते हैं, तो पूछो! – gabomdq
ठीक है, मैं देखता हूं कि आपका क्या मतलब है। मैं बाद में कोड के साथ प्रश्न को अद्यतन करने जा रहा हूं, और उम्मीद है कि मैं आपकी प्रतिक्रिया के माध्यम से विषय को बेहतर ढंग से समझ सकता हूं। – BrainSteel