Я новичок в быстрых игровых площадках (как я обычно использую проекты), и мне кажется, что я сталкиваюсь с 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
Я ожидаю, что размер будет соответствовать размеру, указанному в моем коде ... (также яя не уверен, что происходит с ошибками)