2015-07-12 88 views
0

我是SpriteKit的新手,试图构建基本的突破游戏。我面临的问题是我无法限制屏幕内的桨(这是另一个具有蓝色纹理的节点,如图所示)。当我移动桨时,它超出了屏幕限制。 我已经应用物理学,屏幕区域和桨,但没有运气。 enter image description here在SpriteKit中限制另一个节点

+0

你是如何移动桨叶的,你是如何为背景定义物理体的? – 0x141E

+0

假设我正在通过点击并按住左侧,右侧角落朝相应方向移动。我使用属性检查器来定义物理,通过启用物理定义。 – Hadi

+0

您是否使用边缘循环作为背景?另外,你是通过施加一个力还是冲动来移动桨,还是直接改变x和y值? – 0x141E

回答

1

由于您正在通过直接更改其位置来移动它,因此您的桨不会与边缘发生适当碰撞。要参与物理模拟,必须通过设定其速度或通过对其物理体施加力或冲量来移动桨。例如,

for touch in (touches as! Set<UITouch>) { 
    let location = touch.locationInNode(self) 
    if (location.x < size.width/2.0) { 
     paddle.physicsBody?.applyImpulse(CGVectorMake(-scale, 0)) 
    } 
    else { 
     paddle.physicsBody?.applyImpulse(CGVectorMake(scale, 0)) 
    } 
} 

其中scale确定被施加到身体在x尺寸的动量量。

编辑:

或者,也可以通过

let range = SKRange(lowerLimit: CGRectGetMinX(view.frame), upperLimit: CGRectGetMaxX(view.frame)) 
let constraint = SKConstraint.positionX(range) 
paddle.constraints = [constraint] 

约束桨的x位置是在设定范围内以上添加到didMoveToView方法。

+0

没有运气。我在屏幕区域周围添加了四个Color Sprite对象,并在其上应用了边界矩形物理。现在我在场景中也有一个球,那个球不会离开屏幕,但桨仍然熄灭。 – Hadi

+0

您是否将桨的'collisionBitMask'设置为0?它应该是'UInt32.max',默认值。 – 0x141E

+0

是的,但没有运气。 – Hadi

相关问题