Как «уменьшить» симулятор детской площадки и ошибки изображения - PullRequest
0 голосов
/ 31 января 2019

Я новичок в быстрых игровых площадках (как я обычно использую проекты), и мне кажется, что я сталкиваюсь с 2 проблемами.Первая проблема заключается в том, что симулятор «увеличен», и я не могу играть в игру с тем размером, в котором я хочу играть. Я добавил ширину и высоту в sceneView, но он показывает мою сцену в другом размере, идействительно "увеличено".Вторая проблема, с которой я столкнулся (которую я даже не знаю, является ли это проблемой), заключается в том, что я продолжаю получать сообщение об ошибке «невозможно получить данные изображения для SKSpriteNode», однако мои изображения по-прежнему работают в симуляторе, поэтому это не так.действительно вызывает какие-либо проблемы ... Помощь будет высоко ценится!

Я пробовал разные режимы масштабирования, а также размеры при просмотре сцены, и это, похоже, не меняет размер сцены.Я также изменил размер GameScene.sks, и это тоже ничего не меняет ...

import SpriteKit
import GameplayKit
import UIKit
import PlaygroundSupport

class GameScene: SKScene, SKPhysicsContactDelegate {

var squareTouched = false

var stars = SKEmitterNode()

var pointsBool = true

var scoreLabel = SKLabelNode()

var numberOfPoints = -1

var e = SKSpriteNode()
var square = SKSpriteNode()

var backgroundMusic = SKAudioNode()

var button = SKSpriteNode()

var points = SKSpriteNode()
var points1 = SKSpriteNode()

var timer:Timer!
var gameTimer:Timer!
var levelTimer:Timer!

var number = 1
var timeIntervalTime = 1.75
var level = 1

var animationDuration:TimeInterval = 5

let squareCategory:UInt32 = 0x1 << 1
let eCategory:UInt32 = 0x1 << 2
let pointsCategory:UInt32 = 0x1 << 4

override func didMove(to view: SKView) {

    self.physicsWorld.contactDelegate = self

    backgroundMusic = SKAudioNode(fileNamed: "gameMusic.mp3")
    self.addChild(backgroundMusic)

    stars = SKEmitterNode(fileNamed: "stars")!
    stars.position = CGPoint(x: 0, y: 1472)
    stars.advanceSimulationTime(30)
    stars.zPosition = -1
    self.addChild(stars)

    points = SKSpriteNode(imageNamed: "points.png")
    points.size = CGSize(width: 20, height: 100)
    points.physicsBody = SKPhysicsBody(rectangleOf: points.size)
    points.physicsBody?.isDynamic = false
    points.position = CGPoint(x: -350, y: -590)
    points.physicsBody?.affectedByGravity = false
    points.name = "points"

    points1 = SKSpriteNode(imageNamed: "points")
    points1.size = CGSize(width: 20, height: 100)
    points1.physicsBody = SKPhysicsBody(rectangleOf: points1.size)
    points1.physicsBody?.isDynamic = false
    points1.position = CGPoint(x: 350, y: -590)
    points1.physicsBody?.affectedByGravity = false
    points1.name = "points1"

    square = SKSpriteNode(imageNamed: "square")
    square.size = CGSize(width: 100, height: 100)
    square.physicsBody = SKPhysicsBody(rectangleOf: square.size)
    square.physicsBody?.isDynamic = true
    square.position = CGPoint(x: 290, y: -590)
    square.physicsBody?.affectedByGravity = false
    square.name = "square"

    button = SKSpriteNode(imageNamed: "restart")
    button.size = CGSize(width: 75, height: 75)
    button.position = CGPoint(x: 320, y: 600)
    button.zPosition = 1
    button.name = "button"
    self.addChild(button)

    square.physicsBody?.categoryBitMask = squareCategory
    square.physicsBody?.contactTestBitMask = eCategory | pointsCategory
    square.physicsBody?.usesPreciseCollisionDetection = true

    points.physicsBody?.categoryBitMask = pointsCategory
    points.physicsBody?.contactTestBitMask = squareCategory
    points.physicsBody?.usesPreciseCollisionDetection = true

    self.addChild(square)
    self.addChild(points)
    self.addChild(points1)

    scoreLabel.position = CGPoint(x: -350, y: 605)
    scoreLabel.fontSize = 50
    scoreLabel.text = "\(numberOfPoints)"
    self.addChild(scoreLabel)

    timer = Timer.scheduledTimer(timeInterval: timeIntervalTime, target: self, selector: #selector(self.adde), userInfo: nil, repeats: true)

    gameTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.counter), userInfo: nil, repeats: true)

    levelTimer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(self.levels), userInfo: nil, repeats: true)

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let touch = touches.first
    let touchLocation = touch?.location(in: self)

    let body: SKPhysicsBody? = self.physicsWorld.body(at: touchLocation!)

    if body?.node?.name == "square" {
        squareTouched = true
    }

    let positionInScene = touch?.location(in: self)
    let touchedNode = self.atPoint(positionInScene!)

    if let name = touchedNode.name {
        if name == "button" {

            let gameScene = GameScene(fileNamed: "GameScene")
            gameScene!.scaleMode = SKSceneScaleMode.aspectFit
            let transition = SKTransition.fade(withDuration: 0.5)
            self.view?.presentScene(gameScene!, transition: transition)

            level = 0
            number = 1
            timeIntervalTime = 2.5
            animationDuration = 6

        }
    }
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    if squareTouched {

        let touch = touches.first
        let whereTouched = touch?.location(in: self)
        let whereTouchedBefore = touch?.previousLocation(in: self)

        let square = self.square

        var newPosition = square.position.x + ((whereTouched?.x)! - (whereTouchedBefore?.x)!)

        newPosition = max(newPosition, -320)
        newPosition = min(newPosition, 320)

        square.position = CGPoint(x: newPosition, y: square.position.y)

    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    squareTouched = false
}

//1s
@objc func counter() {

    number += 1

    timeIntervalTime -= 0.1
    animationDuration -= 0.05

    if animationDuration < 1.6 {

        let label = SKLabelNode()
        label.position = CGPoint(x: 0, y: 0)
        e.removeFromParent()
        timer.invalidate()
        label.text = "You Won!!! :)"

    }

}

//60s
@objc func levels() {

    level += 1

    let label = SKLabelNode()
    label.position = CGPoint(x: 0, y: 0)
    label.fontSize = 80
    label.text = "level \(level)"
    addChild(label)

    let show:SKAction = SKAction.fadeIn(withDuration: 2)
    let hide:SKAction = SKAction.fadeOut(withDuration: 1)

    label.run(SKAction.sequence([show, hide]))


}

@objc func adde() {

    e = SKSpriteNode(imageNamed: "e")

    let ePosition = GKRandomDistribution(lowestValue: -319, highestValue: 319)
    let position = CGFloat(ePosition.nextInt())

    e.size = CGSize(width: 75, height: 75)
    e.position = CGPoint(x: position, y: 640)
    e.physicsBody = SKPhysicsBody(rectangleOf: e.size)
    e.name = "e"

    e.physicsBody?.categoryBitMask = eCategory
    e.physicsBody?.contactTestBitMask = squareCategory

    e.physicsBody?.isDynamic = true

    self.addChild(e)

    var actionArray = [SKAction]()

    actionArray.append(SKAction.move(to: CGPoint(x: position, y: -550), duration: animationDuration))
    actionArray.append(SKAction.removeFromParent())

    e.run(SKAction.sequence(actionArray))

}

func didBegin(_ contact: SKPhysicsContact) {

    let bodyAName = contact.bodyA.node?.name
    let bodyBName = contact.bodyB.node?.name

    if bodyAName == "square" && bodyBName == "e" || bodyAName == "e" && bodyBName == "square"{

        if bodyAName == "square" {

            e.removeFromParent()
            square.removeFromParent()
            timer.invalidate()

            let label = SKLabelNode()
            label.position = CGPoint(x: 0, y: 0)
            label.text = "Game Over :("
            self.addChild(label)

        } else if bodyBName == "e" {

            print("Yay e")

        }

    }

    if bodyAName == "square" && bodyBName == "points" || bodyAName == "points" && bodyBName == "square"{

        if bodyAName == "square" && pointsBool == false{

            numberOfPoints += 1
            scoreLabel.text = "\(numberOfPoints)"
            pointsBool = true

        } else if bodyBName == "points" {

            print("Yay points")

        }

    }

    if bodyAName == "square" && bodyBName == "points1" || bodyAName == "points1" && bodyBName == "square"{

        if bodyAName == "square" && pointsBool == true{

            numberOfPoints += 1
            scoreLabel.text = "\(numberOfPoints)"
            pointsBool = false

        } else if bodyBName == "points1" {

            print("Yay points")

        }

    }
}

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

// Load the SKScene from 'GameScene.sks'
let sceneView = SKView(frame: CGRect(x:0 , y:0, width: 750, height: 
1334))
if let scene = GameScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit

// Present the scene
sceneView.presentScene(scene)
}

PlaygroundSupport.PlaygroundPage.current.liveView = sceneView

Я ожидаю, что размер будет соответствовать размеру, указанному в моем коде ... (также яя не уверен, что происходит с ошибками)

...