gpt4 book ai didi

iOS SpriteKit 协调 origin 问题

转载 作者:行者123 更新时间:2023-11-28 21:29:08 28 4
gpt4 key购买 nike

我一直在玩弄 SpriteKit,因为我想在一年内制作一款游戏,但最近我遇到了一些奇怪形式的减速带。

这就是问题所在。

我已经创建了一个常规的 SpriteKit 项目并更改了一些默认代码。我在位置 0,0 或 CGPointZero 添加了一个大小为 20,20(正方形)的 SKNode。

问题是,我的显示分辨率是 1024x768,如果我在横向运行我的应用程序,我无法在 0,0 点看到我的正方形,只有当我将 Y 位置设置为 100 时我才能看到它,比如

myNode.position = CGPoint(x: 0, y: 100)

如果我以纵向模式运行我的应用程序,如果 Y 轴固定,0 将位于左上角,但我再也看不到正方形了,除非我将 X 位置设置为 300,例如

myNode.position = CGPoint(x: 300, y: 0)

为什么无论我面向哪个屏幕方向,我都不能简单地看到 0,0 位置上的节点。

这是我的完整类(class)

import SpriteKit

class GameScene: SKScene {

let myNode = SKSpriteNode()

override func didMoveToView(view: SKView) {

myNode.size = CGSize(width: 20, height: 20)
myNode.position = CGPoint(x: 0, y: 0)
myNode.color = UIColor.blackColor()
myNode.anchorPoint = CGPointZero
myNode.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 20.0, height: 20.0))
myNode.physicsBody?.affectedByGravity = false
myNode.physicsBody?.categoryBitMask = 1
myNode.physicsBody?.collisionBitMask = 0
myNode.zPosition = 1
addChild(myNode)



}

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

for touch in touches {
let moveToY = touch.locationInNode(self).y
myNode.runAction(SKAction.moveToY(moveToY, duration: 5))
}


}

override func update(currentTime: CFTimeInterval) {
//print("Position Y: \(self.myNode.position.y)")
}


}

最佳答案

您可以在 View Controller 的 viewWillLayoutSubviews() 中创建和设置场景大小。

override func viewWillLayoutSubviews() {    
super.viewWillLayoutSubviews()
let skView = self.view as! SKView
let scene = YourGameScene(size: self.view.bounds.size)
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}

希望这对您有所帮助。
编辑:不要在viewDidLoad()中设置场景大小,因为如果手机改变方向, View 大小将不正确。在 viewWillLayoutSubviews() 中设置场景大小可确保根据手机的方向正确调整 View 大小。

关于iOS SpriteKit 协调 origin 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com