हैलो मैं स्विफ्ट में SpriteKit
गेम पर काम कर रहा हूं कि अभी केवल दो दृश्य, लोडिंग दृश्य और गेम दृश्य हैं। गेम दृश्य प्रस्तुत होने से पहले जानकारी प्राप्त करने के लिए डेटाबेस तक पहुंच जाता है। खेल दृश्य में सबकुछ बढ़िया काम करता है। जब मैं सीधे लोडिंग दृश्य में जाता हूं तो मैं सीधे गेम दृश्य के बजाय मुद्दों में भाग ले रहा हूं। कॉल बैक के माध्यम से मैं डेटाबेस दृश्य करने के बाद गेम दृश्य पेश करने के लिए लोडिंग दृश्य को बताता हूं।स्प्राइटकिट को नए दृश्य में संक्रमण करते समय UIElements के बारे में त्रुटि मिल रही है
2015-11-12 09: 48: लेकिन जब मैं पेश करने की कोशिश मैं इन बड़े पैमाने पर त्रुटियों की 10+ मिल 33.880 SpaceAcademy [2373: 764,586] इस आवेदन एक पृष्ठभूमि धागा, से autolayout इंजन को संशोधित करने है जो इंजन भ्रष्टाचार और अजीब दुर्घटनाओं का कारण बन सकता है। इससे भविष्य में रिलीज में अपवाद होगा। (यादृच्छिक जानकारी का एक समूह द्वारा पीछा किया)
अब मैं पता लगा है कुछ परीक्षण के माध्यम से कि अपनी मेरी UIElement
जैसे बटन, स्लाइडर, और लेबल है कि इस कारण हो रही है के रूप में। लेकिन मैंने उन्हें didMoveToView
फ़ंक्शन में स्थानांतरित कर दिया ताकि मैं उलझन में हूं कि वे अभी भी त्रुटियों को फेंक रहे हैं क्योंकि वे "पृष्ठभूमि धागे" में हैं ..
कुछ अजीब बात यह है कि ये घातक त्रुटियां नहीं हैं। मेरा कंसोल बस उड़ाता है और UIElements
दस सेकंड देरी के बाद दिखाई देता है। कुछ और अजीब बात यह है कि अगर मैं टैप करता हूं जहां मुझे पता है कि बटन को फ़ंक्शन माना जाता है तो अभी भी कहा जाता है कि बटन वास्तव में वहां था।
मैं कंसोल विस्फोट से छुटकारा पाने के लिए एक समाधान की सराहना करता हूं लेकिन अधिक महत्वपूर्ण रूप से UI Elements
की दस दूसरी देरी से छुटकारा पाएं, धन्यवाद !!
कोड की स्थापना पर्दे
let skView = view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
let scene = GameScene(size: view.bounds.size)
scene.scaleMode = SKSceneScaleMode.ResizeFill
let loading = LoadingScene(size: view.bounds.size, newScene: scene)
skView.presentScene(loading, transition: SKTransition.crossFadeWithDuration(1))
scene.setEverythingUp(loading)
लोड हो रहा है दृश्य: GameScene से
import Foundation
import SpriteKit
class LoadingScene:SKScene{
var newScene:SKScene!
var oldCount = 0
var loadCount = 0{
didSet{
print(loadCount)
if loadCount == 0{
if oldCount == 1{
self.view?.presentScene(newScene)
}
}
oldCount = loadCount
}
}
init(size: CGSize, newScene:SKScene) {
self.newScene = newScene
super.init(size: size)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func didMoveToView(view: SKView) {
self.backgroundColor = UIColor.blackColor()
let imageArray = [
SKTexture(imageNamed: "Loader/Loader1.png"),
SKTexture(imageNamed: "Loader/Loader2.png"),
SKTexture(imageNamed: "Loader/Loader3.png")
]
let loader = SKSpriteNode(texture: imageArray[0])
let animation = SKAction.animateWithTextures(imageArray, timePerFrame: 0.33)
loader.runAction(SKAction.scaleBy(0.25, duration: 0))
loader.zPosition = 100
loader.runAction(SKAction.repeatActionForever(animation))
loader.position = CGPointMake(self.size.width/2, self.size.height/2)
self.addChild(loader)
}
func start(){
self.loadCount = self.loadCount + 1
}
func end(){
self.loadCount = self.loadCount - 1
}
}
कोड:
func setEverythingUp(myLoadingScene: LoadingScene){
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var Id = 0
if let tempID = defaults.objectForKey("UserId") as? Int {
Id = tempID
}else{
print("newUser")
defaults.setObject(0, forKey: "UserId")
defaults.synchronize()
}
self.mySettings = Settings(UserId: Id)
self.myURLRequests = URLRequests(thesettings: self.mySettings)
///////////call back system here, start() increments number of tasks waiting to finish, end() means a task is finished
myLoadingScene.start()
myURLRequests.getFleet(self, UserId: self.mySettings.UserId, enemy: false){() ->() in
myLoadingScene.end()
}
myLoadingScene.start()
myURLRequests.getFleet(self, UserId: self.mySettings.UserId, enemy: true){() ->() in
myLoadingScene.end()
}
self.backgroundColor = SKColor.blackColor()
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
addStars()
self.anchorPoint = CGPoint(x:self.size.width/2, y:self.size.height/2)
self.myCamera.position = CGPointMake(200, 0)
self.addChild(self.myCamera)
self.camera = self.myCamera
self.myAnchor.position = self.myCamera.position
}
override func didMoveToView(view: SKView) {
print("in view")
let pinch = UIPinchGestureRecognizer(target: self, action: Selector("PinchScale:"))
let tap = UITapGestureRecognizer(target: self, action: Selector("Tap:"))
let pan = UIPanGestureRecognizer(target: self, action: Selector("DragMove:"))
self.view?.addGestureRecognizer(pinch)
self.view?.addGestureRecognizer(tap)
self.view?.addGestureRecognizer(pan)
let fireButton = UIButton(type: .System)
fireButton.setTitle("Fire!", forState: UIControlState.Normal)
fireButton.titleLabel!.font = UIFont(name: "TrebuchetMS", size: 70)
fireButton.sizeToFit()
fireButton.frame = CGRect(x: self.size.width*0.5 - 80, y: 20, width: self.size.width*0.3, height: 30)
fireButton.addTarget(self, action: Selector("FireButtonClicked"), forControlEvents: UIControlEvents.TouchUpInside)
self.view?.addSubview(fireButton)
let alternateControls = false
let AngleLabel = UILabel()
AngleLabel.text = "Angle"
AngleLabel.font = UIFont(name: "TrebuchetMS", size: 30)
AngleLabel.textColor = UIColor.blueColor()
let AngleSlider = UISlider()
AngleSlider.addTarget(self, action: Selector("AngleSlided:"), forControlEvents: UIControlEvents.ValueChanged)
AngleSlider.maximumValue = 90
AngleSlider.minimumValue = -90
AngleSlider.value = 0
AngleSlider.continuous = true
let PowerLabel = UILabel()
PowerLabel.text = "Power"
PowerLabel.font = UIFont(name: "TrebuchetMS", size: 30)
PowerLabel.textColor = UIColor.blueColor()
let PowerSlider = UISlider()
PowerSlider.addTarget(self, action: Selector("PowerSlided:"), forControlEvents: UIControlEvents.ValueChanged)
PowerSlider.maximumValue = 0.99
PowerSlider.minimumValue = 0.1
PowerSlider.value = 0.5
PowerSlider.continuous = true
if alternateControls{
AngleLabel.frame = CGRect(x: self.size.width*0.05, y: 10, width: self.size.width*0.3, height: 60)
AngleSlider.frame = CGRect(x: self.size.width * -0.05, y: self.size.height*0.55, width: self.size.height*0.7, height: 30)
AngleSlider.transform = CGAffineTransformMakeRotation(CGFloat(M_PI) * 1.5)
PowerLabel.frame = CGRect(x: self.size.width*0.7, y: 10, width: self.size.width*0.3, height: 60)
PowerSlider.frame = CGRect(x: self.size.width * 0.65, y: self.size.height*0.55, width: self.size.height*0.7, height: 30)
PowerSlider.transform = CGAffineTransformMakeRotation(CGFloat(M_PI) * 1.5)
}else{
AngleLabel.frame = CGRect(x: self.size.width*0.21, y: self.size.height-80, width: self.size.width*0.3, height: 60)
AngleSlider.frame = CGRect(x: self.size.width * 0.025, y: self.size.height-30, width: self.size.width*0.45, height: 30)
PowerLabel.frame = CGRect(x: self.size.width*0.71, y: self.size.height-80, width: self.size.width*0.3, height: 60)
PowerSlider.frame = CGRect(x: self.size.width * 0.525, y: self.size.height-30, width: self.size.width*0.45, height: 30)
}
self.view?.addSubview(AngleLabel)
self.view?.addSubview(AngleSlider)
self.view?.addSubview(PowerLabel)
self.view?.addSubview(PowerSlider)
}
UIElements को हटाने से आधा त्रुटियां हटा दी गईं, लेकिन अभी भी लगभग 8 या तो – AwesomeTN
UIElement क्या है? मुझे आपके द्वारा पोस्ट किए गए कोड में UIElement का कोई संदर्भ नहीं दिखाई देता है। ऑटोलाउट एक यूआईकिट सुविधा है, जो आप दिखा रहे हैं वह स्प्राइटकिट है। –
UIButton, UILabel, ect – AwesomeTN