我正试图在游戏场景框架的边缘创建一个难以穿透的边框。
在Swift中,我试图将其重写为:
override func didMoveToView(view: SKView) {
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: CGRect(x: 0,y: 100,width: self.frame.size.width,height: self.frame.size.height-200))
}
不是在框架的边缘给我一个清晰的边界,而是提供一个弱边框,我的播放器(没有指定的质量)可以通过。
我也不确定为什么我必须减去并添加到y轴以获得正确的边框,但这不是一个问题。任何帮助将不胜感激。
答案 0 :(得分:2)
首先应定义一个位掩码类别来表示游戏场景的物理主体。我通常使用32位二进制值00000000000000000000000000000001
,我将其定义为常量:
let SCENE_EDGE_CATEGORY: UInt32 = 0x1
通过定义常量,您现在可以以一种非常易读的方式定义场景的物理主体:
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody!.categoryBitMask = SCENE_EDGE_CATEGORY
对于您希望受场景边缘约束的任何精灵,请将其物理主体的碰撞位掩码设置为场景的类别位掩码。你告诉Sprite Kit您希望物理引擎处理该精灵与场景边缘之间的碰撞:
someSprite.physicsBody!.collisionBitMask = SCENE_EDGE_CATEGORY
希望这有帮助!
答案 1 :(得分:2)
关键是通过施加力/冲动或通过设置力度属性来移动精灵,以便它们正确响应
答案 2 :(得分:0)
试试这个:
override init(size: CGSize)
{
super.init(size: size)
physicsBody = SKPhysicsBody(edgeLoopFromRect: CGRectMake(0, 0, size.width, size.height))
anchorPoint = CGPointMake(0.0, 0.0)
}
对我来说很好。
答案 3 :(得分:0)
这肯定会帮助您在Swift中定义屏幕边缘。
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)