दिलचस्प पोस्ट
गतिशील रूप से एक JDialog के लिए घटक जोड़ें सी में चार सरणी बनाम चार सूचक PHP से जावास्क्रिप्ट में चर प्राप्त करें कुंजी वस्तु (और इसके विपरीत) के लिए जावा ऑब्जेक्ट (बीन) को कैसे परिवर्तित करें? बेस64 जावा सांकेतिक शब्दों में बदलना और एक स्ट्रिंग डीकोड हमेशा दो दशमलव स्थानों को दिखाने के लिए मैं दशमलव को कैसे स्वरूपित कर सकता हूं? मैं MySQL रूट उपयोगकर्ता के पूर्ण विशेषाधिकार को कैसे पुनर्स्थापित कर सकता हूं? एक यूनिक्स टाइमस्टैम्प को जावास्क्रिप्ट में समय के लिए परिवर्तित करें सी ++ एसटीएल जैसी वेक्टर वर्ग की तलाश में है लेकिन स्टैक स्टोरेज का उपयोग करना विंडोज़ के कमांड प्रॉम्प्ट में 5 सेकंड के लिए कैसे सोएगा? (या डॉस) इकाई फ़्रेमवर्क बनाम LINQ से SQL जावास्क्रिप्ट विंडो का आकार बदलना घटना क्या मुझे एंड्रॉइड कस्टम व्यू के लिए तीनों कन्स्ट्रक्टर की ज़रूरत है? दबाए जाने के लिए प्रतीक्षा किए बिना मानक इनपुट से अक्षर कैप्चर करें विस्तारित तरीकों को केवल गैर-नेस्टेड, गैर-सामान्य स्थैतिक वर्ग में क्यों स्वीकार्य है?

स्प्राइटकिट – टाइमर बनाना

मैं एक टाइमर कैसे बना सकता हूं जो हर दो सेकंड में आग लगाता है जो कि मेरी स्क्रीन पर एचयूडी पर एक के स्कोर को बढ़ाता है? यह एचयूडी के लिए मेरे पास कोड है:

@implementation MyScene { int counter; BOOL updateLabel; SKLabelNode *counterLabel; } -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { counter = 0; updateLabel = false; counterLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; counterLabel.name = @"myCounterLabel"; counterLabel.text = @"0"; counterLabel.fontSize = 20; counterLabel.fontColor = [SKColor yellowColor]; counterLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; counterLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeBottom; counterLabel.position = CGPointMake(50,50); // change x,y to location you want counterLabel.zPosition = 900; [self addChild: counterLabel]; } } 

वेब के समाधान से एकत्रित समाधान "स्प्राइटकिट – टाइमर बनाना"

स्प्राइट किट में NSTimer उपयोग नहीं करते , performSelector:afterDelay: या ग्रैंड सेंट्रल डिस्पैच (जीसीडी, अर्थात किसी भी dispatch_... विधि dispatch_... ) क्योंकि इन समय के तरीके नोड, दृश्य या दृश्य के paused स्थिति की उपेक्षा करते हैं। इसके अलावा आपको पता नहीं है कि गेम लूप में किस बिंदु पर उन्हें निष्पादित किया जाता है जो आपके कोड के वास्तव में क्या करता है इसके आधार पर विभिन्न मुद्दों का कारण हो सकता है।

स्प्राइट किट में कुछ समय के लिए स्वीकृत तरीके केवल स्वीकार्य हैं या तो SKScene update: उपयोग update: विधि और समय का ट्रैक रखने के लिए पास-इन वर्तमान टाइम पैरामीटर का उपयोग करना।

या अधिक सामान्य तौर पर आप केवल एक एक्शन अनुक्रम का उपयोग करेंगे जो प्रतीक्षा कार्रवाई से शुरू होती है:

 id wait = [SKAction waitForDuration:2.5]; id run = [SKAction runBlock:^{ // your code here ... }]; [node runAction:[SKAction sequence:@[wait, run]]]; 

और बार-बार कोड चलाने के लिए:

 [node runAction:[SKAction repeatActionForever:[SKAction sequence:@[wait, run]]]]; 

वैकल्पिक रूप से आप performSelector:onTarget: उपयोग भी कर सकते हैं performSelector:onTarget: बजाय runBlock: या शायद एक customActionWithDuration:actionBlock: उपयोग करें customActionWithDuration:actionBlock: यदि आपको SKScene update: को मिमिक करने की आवश्यकता है update: विधि और नोड में इसे अग्रेषित करने के तरीके की जानकारी नहीं है या जहां अग्रेषण असुविधाजनक होगा।

विवरण के लिए SKAction संदर्भ देखें


अद्यतनः स्विफ्ट का इस्तेमाल करते हुए कोड के उदाहरण

स्विफ्ट 3

 let wait = SKAction.wait(forDuration:2.5) let action = SKAction.run { // your code here ... } run(SKAction.sequence([wait,action])) 

स्विफ्ट 2

 let wait = SKAction.waitForDuration(2.5) let run = SKAction.runBlock { // your code here ... } runAction(SKAction.sequence([wait, run])) 

औंड को बार-बार कोड चलाने के लिए:

 runAction(SKAction.repeatActionForever(SKAction.sequence([wait, run]))) 

स्विफ्ट में उपयोग करने योग्य:

 var timescore = Int() var actionwait = SKAction.waitForDuration(0.5) var timesecond = Int() var actionrun = SKAction.runBlock({ timescore++ timesecond++ if timesecond == 60 {timesecond = 0} scoreLabel.text = "Score Time: \(timescore/60):\(timesecond)" }) scoreLabel.runAction(SKAction.repeatActionForever(SKAction.sequence([actionwait,actionrun]))) 

मैंने ऊपर तेज उदाहरण लिया है और घड़ी के लिए अग्रणी शून्य में जोड़ा है।

  func updateClock() { var leadingZero = "" var leadingZeroMin = "" var timeMin = Int() var actionwait = SKAction.waitForDuration(1.0) var timesecond = Int() var actionrun = SKAction.runBlock({ timeMin++ timesecond++ if timesecond == 60 {timesecond = 0} if timeMin / 60 <= 9 { leadingZeroMin = "0" } else { leadingZeroMin = "" } if timesecond <= 9 { leadingZero = "0" } else { leadingZero = "" } self.flyTimeText.text = "Flight Time [ \(leadingZeroMin)\(timeMin/60) : \(leadingZero)\(timesecond) ]" }) self.flyTimeText.runAction(SKAction.repeatActionForever(SKAction.sequence([actionwait,actionrun]))) } 

निम्नलिखित कोड एक नया धागा बनाता है और मुख्य थ्रेड पर कुछ करने से पहले 2 सेकंड प्रतीक्षा करता है:

 BOOL continueIncrementingScore = YES; dispatch_async(dispatch_queue_create("timer", NULL);, ^{ while(continueIncrementingScore) { [NSThread sleepForTimeInterval:2]; dispatch_async(dispatch_get_main_queue(), ^{ // this is performed on the main thread - increment score here }); } }); 

जब भी आप इसे रोकना चाहते हैं – अभी continueIncrementingScore