अपने खेल में मैं कुछ चीजों को रोकना चाहता हूं जब "एंडगेम" फ़ंक्शन को बुलाया जाता है, जबकि अन्य चीजें चलती रहती हैं। मैं "रुका हुआ" बूलियन का उपयोग करके अधिकांश कार्यों के लिए इसे पूरा करने में सक्षम हूं, लेकिन मैं इसे अपनी स्क्रॉलिंग पृष्ठभूमि के लिए काम करने के लिए नहीं प्राप्त कर सकता हूं। मुझे पता है कि समस्या यह है कि पृष्ठभूमि की कार्रवाई लूप के लिए कैसे निहित है, लेकिन मुझे यकीन नहीं है कि इसे कैसे प्राप्त किया जाए। यहाँ मेरे कोड का एक उदाहरण है:

class GameScene: SKScene {

var sun = SKSpriteNode()
var background = SKSpriteNode()

override func didMoveToView(view: SKView) {

sun = SKSpriteNode(imageNamed: "Sun")
    sun.zPosition = -2
    sun.setScale(0.8)
    sun.position = CGPoint(x: self.frame.size.width * 0.632, y: self.frame.size.height * 0.90)
    let rotate = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(10))
    let rotateForever = SKAction.repeatActionForever(rotate)
    sun.runAction(rotateForever)
    addChild(sun)

let backgroundTexture = SKTexture(imageNamed: "Background")
    backgroundTexture.filteringMode = .Nearest

    let moveBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: NSTimeInterval(0.004 * backgroundTexture.size().width * 2.0))
    let resetBackground = SKAction.moveByX(backgroundTexture.size().width, y: 0, duration: 0.0)
    let moveBackgroundForever = SKAction.repeatActionForever(SKAction.sequence([moveBackground,resetBackground]))

    for var i:CGFloat = 0; i < 4.0 + self.frame.size.width / ( backgroundTexture.size().width ); ++i {
        background = SKSpriteNode(texture: backgroundTexture)
        background.setScale(0.5)
        background.zPosition = -1
        background.position = CGPointMake(i * background.size.width, backgroundVert)
        background.runAction(moveBackgroundForever)
        addChild(background)
    }
}

func endGame {
sun.paused = true
background.paused = true
}
}

इस उदाहरण में "रुका हुआ" बूलियन पूरी तरह से घूर्णन SKSpriteNode के लिए काम करता है जिसे "सूर्य" कहा जाता है, लेकिन यह पृष्ठभूमि के लिए काम नहीं करता है। कोई विचार?

1
Grambo 1 पद 2015, 06:27

2 जवाब

सबसे बढ़िया उत्तर

आपको जो करना चाहिए वह आपके पृष्ठभूमि स्प्राइट के लिए 1 SKNode बना है, इस नोड में सभी पृष्ठभूमि नोड्स जोड़ें, फिर मास्टर नोड को अपने दृश्य में जोड़ें। फिर, जब आपको रुकने की आवश्यकता होती है, तो आप केवल मास्टर नोड को रोकते हैं, और मास्टर नोड उसके सभी बच्चों को रोक देगा

for var i:CGFloat = 0; i < 4.0 + self.frame.size.width / (backgroundTexture.size().width ); ++i {
    var background = SKSpriteNode(texture: backgroundTexture)
    background.setScale(0.5)
    background.zPosition = -1
    background.position = CGPointMake(i * background.size.width, backgroundVert)
    background.runAction(moveBackgroundForever)
    self.background.addChild(background)
}
addChild(background)
2
Knight0fDragon 1 पद 2015, 16:53

लगता है कि आप लूप के लिए कई बैकग्राउंड बना रहे हैं। लेकिन आप केवल एक को रोक रहे हैं।

0
Stefan 1 पद 2015, 16:47