こんにちは、SwiftのSpriteKit
ゲームで作業中です。現在、ロードシーンとゲームシーンの2つのシーンしかありません。ゲームシーンは、提示される前に情報を得るためにデータベースに達する。ゲームシーンのすべてが素晴らしい作品です。私はゲームシーンにまっすぐではなく、最初にロードシーンに行くときに問題にぶつかっています。コールバックを介して、データベースシーンの処理が完了したら、シーンを提示するようにロードシーンに指示します。新しいシーンに移行するときにUIElementsに関するエラーが発生する
2015年11月12日09:48:33.880 SpaceAcademy [2373:764586]このアプリケーションは バックグラウンドスレッドから自動レイアウトエンジンを変更している、私が提示しようとすると、しかし、私は、これらの大規模なエラーの10+を取得します はエンジンの破損や奇妙なクラッシュにつながります。これにより、将来のリリースで 例外が発生します。 (ランダムな情報が続いています)
これで、ボタン、スライダ、ラベルなど、私のUIElement
が原因であることがわかりました。しかし、私はそれらをdidMoveToView
関数に移動しました。なぜなら、「バックグラウンドスレッド」にあるために、なぜ彼らはまだエラーを投げているのか混乱しています。
また、これらは致命的なエラーではありません。私のコンソールは爆発し、UIElements
は10秒遅れて表示されます。何か他の奇妙なことは、私がボタンが実際にボタンが実際にそこにあったかのように呼び出されているとわかっている場所をタップすると、それがまだ呼び出されているということです。
私はコンソールの爆発を取り除くための解決に感謝しますが、もっと重要なのは、UI Elements
の10秒遅れを取り除く、ありがとう!! 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への参照がありません。 AutoLayoutはUIKitの機能です。あなたが見せているのはSpriteKitです。 –
UIButton、UILabel、等 – AwesomeTN