खोज…


यादृच्छिक संख्या उत्पन्न करना

हालाँकि 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 होना चाहिए और सभी प्रणालियों पर अपडेट को कॉल करना होगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow