【发布时间】:2017-12-21 02:03:37
【问题描述】:
我的 SKSpriteKit 应用程序中有一个单独的“Floor”类。当我第一次创建这个类时,我使用
在整个框架周围设置了一个障碍self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame)
但这实际上阻止了 SKSpriteNodes 从屏幕顶部进入,所以现在我试图弄清楚如何创建框架墙的左、右和底部,而不是顶部。这样我就可以避免屏幕底部的一个 SKSpriteNode(用户仍然可以看到)在离开显示器时左右移动。我正在尝试下面哪个正在构建,好像它会起作用但是当我启动游戏时我看不到墙壁?我不太确定我做错了什么,我有
skView.showsPhysics = true
import Foundation
import SpriteKit
class Floor: SKNode {
override init() {
super.init()
let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
leftWall.position = CGPoint(x: 100, y: 100)
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
leftWall.physicsBody!.isDynamic = false
self.addChild(leftWall)
let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height))
rightWall.position = CGPoint(x: 200, y: 200)
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
rightWall.physicsBody!.isDynamic = false
self.addChild(rightWall)
// Set the bit mask properties
self.physicsBody?.categoryBitMask = balloonCategory
self.physicsBody?.contactTestBitMask = nailDropCategory
//self.physicsBody?.collisionBitMask = balloonCategory
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemted")
}
}
【问题讨论】:
-
场景大小和缩放模式是什么? IE。您将这些 Sprite 节点定位在 100,100 和 200,200 处,您确定这在场景的可见部分内吗?此外,不是主要问题,而是:您将物理主体分配给场景两次,并且它只能有一个,因此将物理主体添加到精灵中,即不是“self.physicsBody=”而是“leftWall.physicsBody=”。
-
关闭墙壁的重力
-
基本上你想做
leftWall.isDynamic = false -
@AliBeadle 我必须使用“self.physicsBody”因为它是一个单独的类权利v
-
没有。每个 SKNode(并且 SKScene 是一个 SKNode)最多可以有一个物理体。通过创建两个物理体并将它们应用到同一个节点(不清楚,但我假设您的代码是您的 SKScene 的一部分),那么您实际上将失去第一个。因此,除了 KnightOfDragon 对您的主要问题的解决方案(我认为他是正确的),我认为您还需要考虑将您的物理体移动到其他地方。它们的正常位置是在它们影响的节点上 - 即您的 SKSpriteNodes。
标签: swift sprite-kit skspritenode skphysicsbody