【发布时间】:2015-02-10 12:25:59
【问题描述】:
我在使用 Swift 开发的横向游戏时遇到问题。它改编自纵向模式教程和代码,但是我在项目设置中设置了正确的方向,并在 GamePlayScene.sks 文件中设置了尺寸(并在构建之前保存)
如果我在主 didMoveToView 函数中添加一个精灵,例如背景,那么 width 属性将按预期工作:
let background : SKSpriteNode = SKSpriteNode(imageNamed:"background")
background.position = CGPoint(x: self.frame.minX, y: self.frame.minY)
background.anchorPoint = CGPoint(x: 0, y: 0)
background.size.width = self.frame.size.width
但是,当我尝试添加从我的 GroundNode.swift 类调用的地面物理对象时,我只能通过使用类似的设置让地面拉伸屏幕的一半。就好像节点突然认为屏幕是纵向的一样。
我将这段代码紧跟在主函数中的上述代码之后:
var ground = GroundNode(size: CGSizeMake(self.frame.size.width, 100))
ground.zPosition = 20
self.addChild(ground)
这是我的地面节点类的缩写版本:
import Foundation
import SpriteKit
class GroundNode: SKSpriteNode {
init(size: CGSize) {
super.init(texture: nil, color: UIColor.blackColor(), size: size)
self.name = "Ground"
setUpPhysicsBody()
}
func setUpPhysicsBody(){
self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
self.position = CGPoint(x: 0, y: 0)
self.physicsBody?.affectedByGravity = false
self.physicsBody?.dynamic = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
这是我运行项目时的结果:
如您所见,背景完全符合预期,但地面节点仅覆盖屏幕的一半。它也没有与任何应该站在上面的物体正确交互。它们漂浮在上方,是的,当我移开地面时,它们正确地落下,尽管这可能是因为它们的节点类也受到同样的问题。
请给点意见?
【问题讨论】: