2016-12-06 3 views
1

Спрайты в моей игре SpriteKit, хотя и правильно масштабируются, в моих сценах становятся очень маленькими. Я слежу за несколькими различными учебниками, используя спрайты с одинаковым размером, и они отлично масштабируются в симуляторе. Ниже приведены фрагменты кода и скриншоты. Например, кнопка паузы в правом верхнем углу экрана сумасшедшая, но фактические разрешения активов являются стандартными по размеру.Спрайты SpriteKit не масштабируются должным образом

GameScene.swift

private let pauseTex = SKTexture(imageNamed: "PauseButton")  

... 

private func setupPause() { 
    pauseBtn.texture = pauseTex 
    pauseBtn.size = pauseTex.size() 
    pauseBtn.anchorPoint = CGPoint(x: 1.0, y: 1.0) 
    pauseBtn.position = CGPoint(x: size.width, y: size.height) 
    pauseBtn.zPosition = Layer.Foreground.rawValue 
    worldNode.addChild(pauseBtn)Btn) 

    ... 
} 

GameVC.swift

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 

    ... 

    if let skView = self.view as? SKView { 
     if skView.scene == nil { 

      let aspectRatio = view.bounds.size.height/view.bounds.size.width 
      let scene = MenuScene(size: CGSize(width: 750, height: 750 * aspectRatio)) 

      scene.scaleMode = .aspectFill 
      skView.ignoresSiblingOrder = true 

      ... 
     } 
    } 
} 

enter image description here

enter image description here

+0

Вы установили свойство 'size' узла? –

+0

Вы хотите установить размер сцены в соответствии с размером окна на устройстве, а затем настроить свои объекты так, чтобы размер был в зависимости от фактического размера экрана (проценты просты). Вы должны явно настроить его. – MoDJ

+0

Какой размер 1x графики 2x и 3x, они должны быть правильными кратными – Knight0fDragon

ответ

1

В основном то, что произошло здесь, Майк запуталась с размером сцены против размера экрана. Он думал, что, поскольку спрайт был 32 пикселя, он должен занимать 10% экрана iPhone SE, так как он имеет ширину 1x 320 (от 640 [2x]). Но на самом деле его сцена составляет 750 пикселей в ширину , поэтому он показывался только на 5%. Он переключил свой размер сцены на 375x667 (разрешение iPhone не для сетчатки), чтобы правильно использовать графику сетчатки, и теперь все должно быть для него настроено.

Единственная проблема, с которой он столкнется сейчас, обрезается на устройствах iPad. Для этого ему просто нужно работать в безопасных зонах.

0

Размер ваших активов не всегда отражают нужный размер на экране из-за к рассогласованию расхождений между различными (это верно, если SKScenescaleMode установлено на resizeFill). Если вам нужен конкретный размер для спрайта, вам необходимо установить SKNodesize.

Что это будет выглядеть в методе:

private func setupPause() { 

    pauseBtn.anchorPoint = CGPoint(x: 1.0, y: 1.0) 

    // Set size property (arbitrarily selected below) 
    pauseBtn.size = CGSize(width: 50, height: 50) 

    pauseBtn.position = CGPoint(x: size.width, y: size.height) 
    pauseBtn.zPosition = Layer.Foreground.rawValue 
    worldNode.addChild(pauseBtn) 

} 
+0

. Это неверно, за исключением случая изменения размера resizeFill или поддельного размера, что сделало бы размер кнопки непропорциональным по различным размеры экрана – Knight0fDragon

+0

@ Night0fDragon, вы правы, я мог бы объяснить это лучше. Однако это не меняет того факта, что не было установлено ни свойство 'size', ни метод' setScale() ', и он полагался исключительно на исходный размер/масштаб ресурса (что явно не является желаемым масштабом). –

+0

Нам не хватает информации, как scaleMode, размер сцены и размер всех 3-х активов. – Knight0fDragon

Смежные вопросы