खोज…
यादृच्छिक संख्या उत्पन्न करना
हालाँकि GameplayKit
(जो iOS 9 SDK के साथ पेश किया गया है) गेम लॉजिक को लागू करने के बारे में है, इसका उपयोग यादृच्छिक संख्याओं को उत्पन्न करने के लिए भी किया जा सकता है, जो कि ऐप्स और गेम में बहुत उपयोगी है।
GKRandomSource.sharedRandom
प्रयोग किया जाता है जो निम्नलिखित अध्यायों में तीन अतिरिक्त प्रकार के GKRandomSource
के बॉक्स से बाहर हैं।
- GKARC4RandomSource ARC4 एल्गोरिथ्म का उपयोग करता है
- GKLinearCongruentialRandomSource जो एक तेज लेकिन इतना यादृच्छिक
GKRandomSource
- GKMersenneTwisterRandomSource जो एक MersenneTwister एल्गोरिथ्म को लागू करता है। यह धीमी लेकिन अधिक यादृच्छिक है।
निम्नलिखित अध्याय में हम केवल का उपयोग nextInt()
एक की विधि GKRandomSource
। इसके अलावा nextBool() -> Bool
nextUniform() -> Float
और nextUniform() -> Float
पीढ़ी
सबसे पहले, GameplayKit
आयात करें:
तीव्र
import GameplayKit
उद्देश्य सी
#import <GameplayKit/GameplayKit.h>
फिर, एक यादृच्छिक संख्या उत्पन्न करने के लिए, इस कोड का उपयोग करें:
तीव्र
let randomNumber = GKRandomSource.sharedRandom().nextInt()
उद्देश्य सी
int randomNumber = [[GKRandomSource sharedRandom] nextInt];
ध्यान दें
अगलेआईंट () फ़ंक्शन, जब मापदंडों के बिना उपयोग किया जाता है, तो -2,147,483,648 और 2,147,483,647 के बीच एक यादृच्छिक संख्या वापस आ जाएगी, जिसमें हम भी शामिल हैं, इसलिए हमें यकीन नहीं है कि यह हमेशा एक सकारात्मक या गैर-शून्य संख्या है।
0 से n तक की संख्या उत्पन्न करना
इसे प्राप्त करने के लिए, आपको n को nextIntWithUpperBound()
विधि nextIntWithUpperBound()
चाहिए:
तीव्र
let randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: 10)
उद्देश्य सी
int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: 10];
यह कोड हमें खुद सहित 0 और 10 के बीच एक नंबर देगा।
M से n तक की संख्या उत्पन्न करना
ऐसा करने के लिए आप GKRandomDistribution
साथ GKRandomDistribution
ऑब्जेक्ट GKRandomSource
और सीमा में पास करें। एक GKRandomDistribution
GKGaussianDistribution
या GKShuffledDistribution
जैसे वितरण व्यवहार को बदलने के लिए उपयोग किया जा सकता है।
उसके बाद वस्तु को हर नियमित GKRandomSource
तरह इस्तेमाल किया जा सकता है क्योंकि यह GKRandom
प्रोटोकॉल को भी लागू करता है।
तीव्र
let randomizer = GKRandomDistribution(randomSource: GKRandomSource(), lowestValue: 0, highestValue: 6)
let randomNumberInBounds = randomizer.nextInt()
उद्देश्य-सी पुराना
int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: n - m] + m;
उदाहरण के लिए, 3 और 10 के बीच एक यादृच्छिक संख्या उत्पन्न करने के लिए, आप इस कोड का उपयोग करते हैं:
तीव्र
let randomNumber = GKRandomSource.sharedRandom().nextInt(upperBound: 7) + 3
उद्देश्य-सी पुराना
int randomNumber = [[GKRandomSource sharedRandom] nextIntWithUpperBound: 7] + 3;
GKEntity और GKComponent
एक इकाई एक खिलाड़ी के आंकड़े या एक दुश्मन के आंकड़े जैसे खेल की एक वस्तु का प्रतिनिधित्व करती है। चूंकि यह वस्तु हथियारों और पैरों के बिना बहुत कुछ नहीं करती है इसलिए हम घटकों को इसमें जोड़ सकते हैं। इस प्रणाली को बनाने के लिए Apple में GKEntity
और GKComponent
क्लासेस हैं।
मान लें कि हमारे पास निम्नलिखित अध्यायों के लिए निम्नलिखित क्लैसे है:
class Player: GKEntity{}
class PlayerSpriteComponent: GKComponent {}
GKEntity
एक इकाई घटकों का एक संग्रह है और इसके घटकों को जोड़ने, हटाने और बातचीत करने के लिए कई कार्य प्रदान करता है।
जबकि हम सिर्फ GKEntity का उपयोग कर सकते थे, यह एक विशिष्ट प्रकार की खेल इकाई के लिए उपवर्ग के लिए सामान्य है।
यह महत्वपूर्ण है कि केवल एक बार एक वर्ग के घटक को जोड़ना संभव है। यदि आप एक ही वर्ग का दूसरा घटक जोड़ते हैं तो यह GKEntity
अंदर पहले GKEntity
घटक को ओवरराइड करेगा
let otherComponent = PlayerSpriteComponent()
var player = Player()
player.addComponent(PlayerSpriteComponent())
player.addComponent(otherComponent)
print(player.components.count) //will print 1
print(player.components[0] === otherComponent) // will print true
आप पूछ सकते हैं क्यों। इसका कारण component(for: T.Type)
नामक component(for: T.Type)
जो एक विशिष्ट प्रकार की इकाई के घटक को लौटाता है।
let component = player.component(ofType: PlayerSpriteComponent.self)
घटक-विधियों के अतिरिक्त इसमें एक update
विधि है जो कि खेल तर्क के डेल्टा समय या वर्तमान समय को इसके घटकों के लिए प्रस्तुत करने के लिए उपयोग की जाती है।
var player = Player()
player.addComponent(PlayerSpriteComponent())
player.update(deltaTime: 1.0) // will call the update method of the PlayerSpriteComponent added to it
GKComponent
एक घटक दृश्य इकाई या तर्क घटक उदाहरण के लिए एक इकाई के कुछ का प्रतिनिधित्व करता है।
यदि किसी इकाई का अद्यतन तरीका कहा जाता है, तो यह उसके सभी घटकों को सौंप देगा। इस पद्धति को ओवरराइड करने के लिए एक इकाई में हेरफेर करने के लिए उपयोग किया जाता है।
class PlayerSpriteComponent: GKComponent {
override func update(deltaTime seconds: TimeInterval) {
//move the sprite depending on the update time
}
}
इसके अतिरिक्त यह संभव नहीं है कि यह किया या हटाए जाने या जोड़ने के बारे में अन्य घटकों को सूचित करने के लिए विधि didAddToEntity
और willRemoveFromEntity
को ओवरराइड किया didAddToEntity
।
एक घटक के अंदर एक अन्य घटक को हेरफेर करने के लिए यह संभव है कि GKEntity प्राप्त हो जो घटक को जोड़ा जाता है।
override func update(deltaTime seconds: TimeInterval) {
let controller = self.entity?.component(ofType: PlayerControlComponent.self)
//call methods on the controller
}
हालांकि यह संभव है कि यह एक सामान्य पैटर्न नहीं है क्योंकि यह दो घटकों को एक साथ तार करता है।
GKComponentSystem
जब तक हम सिर्फ का अद्यतन प्रतिनिधि प्रणाली का उपयोग कर के बारे में बात GKEntity
अद्यतन करने के लिए GKComponents
वहाँ अद्यतन करने के लिए एक अलग तरीका है GKComponents
जो कहा जाता है GKComponentSystem
।
इसका उपयोग उस स्थिति में किया जाता है जब किसी विशिष्ट प्रकार के सभी घटकों को एक बार में अपडेट करने की आवश्यकता होती है।
एक GKComponentSystem
एक विशिष्ट प्रकार के घटक के लिए बनाया गया है।
let system = GKComponentSystem(componentClass: PlayerSpriteComponent.self)
एक घटक जोड़ने के लिए आप जोड़ विधि का उपयोग कर सकते हैं:
system.addComponent(PlayerSpriteComponent())
लेकिन एक अधिक सामान्य तरीका यह है कि बनाई गई इकाई को GKComponentSystem
के घटकों के साथ पारित किया GKComponentSystem
और यह इकाई के अंदर एक मेल खाते हुए घटक को GKComponentSystem
।
system.addComponent(foundIn: player)
किसी विशिष्ट प्रकार के सभी घटकों को अपडेट करने के लिए अपडेट कॉल करें:
system.update(deltaTime: delta)
यदि आप एक इकाई आधारित अद्यतन तंत्र के बजाय GKComponentSystem
का उपयोग करना चाहते हैं, तो आपके पास हर घटक के लिए GKComponentSystem
होना चाहिए और सभी प्रणालियों पर अपडेट को कॉल करना होगा।