2016-03-05 13 views
5

में बहुत उच्च CPU उपयोग मैं स्प्राइटकिट में एक साधारण टाइल-आधारित गेम बना रहा हूं और मुझे अपने गेम में उच्च CPU उपयोग के साथ कुछ कठिनाई हो रही है। मेरे पास 60 टाइल्स से बना नक्शा है, और प्रत्येक टाइल SKSpriteNode का उप-वर्ग है। दृश्य में इन 60 स्प्राइट्स को प्रदर्शित करना आईफोन 6 एस सिम्युलेटर में 80% सीपीयू का उपयोग कर रहा है। कोई गति, उपयोगकर्ता बातचीत, या भौतिकी चल रहा है। जब मैंने UIKit में एक ही गेम बनाया और स्प्राइटकिट नहीं किया तो मेरा सीपीयू उपयोग 0 था। इतना सीपीयू का उपयोग क्या हो सकता है?स्प्राइटकिट

मेरी टाइल वर्ग:

import SpriteKit 
import UIKit 
class Tile: SKSpriteNode { 

var tileType = "grass", tileX = 0, tileY = 0 
    init (tileType: String, tileX: Int, tileY: Int) { 
     self.tileType = tileType 
     self.tileX = tileX 
     self.tileY = tileY 
     let texture = SKTexture(imageNamed: tileType) 
     super.init(texture: texture, color: UIColor(), size: texture.size()) 
     self.userInteractionEnabled = true 
     self.position = CGPoint(x: CGFloat(45+64*(tileX-1)), y: CGFloat(47+56*(tileY-1))) 
     self.zPosition = -1 

    } 
    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

और मेरे स्प्राइट किट दृश्य कोड:

import SpriteKit 
var map: [[String]] = [["grass","water","grass","rocky","rocky","grass","grass","grass","grass","water"],["grass","water","grass","grass","rocky","rocky","grass","grass","water","water"],["grass","water","water","grass","rocky","grass","grass","water","water","water"],["grass","grass","water","rocky","rocky","grass","grass","water","water","water"],["grass","grass","water","rocky","rocky","grass","water","water","water","water"],["grass","grass","water","rocky","rocky","grass","water","water","water","water"] ] 
class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 
     for (rowNumber, row) in map.enumerate() { 
      for (columnNumber, type) in row.enumerate() { 
       let theTile = Tile(tileType: type, tileX: columnNumber+1, tileY: rowNumber+1) 

       self.addChild(theTile) 
      } 
     } 
     self.backgroundColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0) 


    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 

उत्तर

9

iPhone सिम्युलेटर Xcode पर कोई वास्तविक डिवाइस में तुलना में ज्यादा बड़े CPU उपयोग कर सकते है।

CPU उपयोग के बारे में वास्तविक मीट्रिक रखने के लिए वास्तविक डिवाइस में परीक्षण करें।

+0

धन्यवाद! असली फोन पर 10% तक। –

+1

@ATyshka अगर इस उत्तर में आपकी समस्या हल हो गई है तो आपको इसे [स्वीकृत] (http://stackoverflow.com/help/accepted-answer) के रूप में चिह्नित करना चाहिए। – Whirlwind

+0

क्षमा करें! मैं इस साइट पर नया हूं –

1

Tyshka, आपको संसाधनों का पुन: उपयोग करने की आवश्यकता है। आपका कोड सटीक उसी इनपुट छवि डेटा के लिए एक नया SKTexture बनाता है। बस एक एसकेटेक्चर बनाएं और फिर इसे नए नोड के लिए बनावट के रूप में सेट करें। अपने कोड में एक नक्शा जोड़ें ताकि एसकेटेक्चर की जांच की जा सके और बनावट स्ट्रिंग नाम दिया जा सके।

+0

हाँ मुझे एहसास हुआ। ठीक कर देंगे! –

संबंधित मुद्दे