Ios SpriteKit摩擦似乎无法正常工作
在Xcode 7中的一个项目中,我有几个Ios SpriteKit摩擦似乎无法正常工作,ios,swift,sprite-kit,xcode7,Ios,Swift,Sprite Kit,Xcode7,在Xcode 7中的一个项目中,我有几个SKSpriteNodes,它们在屏幕上来回移动,还有一个叫做user,它意味着从一个精灵跳到另一个精灵,在屏幕上逐渐向上移动。但是,当user降落在一个移动的精灵上时,移动的精灵正好从它下面滑出,而user则会倒下。我认为这意味着我需要增加节点上的摩擦力属性,以便user能够“粘住”节点,但这只会使它在其他节点上反弹。我的问题是,前后移动的节点似乎“很滑”,而且user无法停留在它们上面 这是我的密码: 用户的我的类: class UserNode: S
SKSpriteNodes
,它们在屏幕上来回移动,还有一个叫做user
,它意味着从一个精灵跳到另一个精灵,在屏幕上逐渐向上移动。但是,当user
降落在一个移动的精灵上时,移动的精灵正好从它下面滑出,而user
则会倒下。我认为这意味着我需要增加节点上的摩擦力属性,以便user
能够“粘住”节点,但这只会使它在其他节点上反弹。我的问题是,前后移动的节点似乎“很滑”,而且user
无法停留在它们上面
这是我的密码:
用户的我的类
:
class UserNode: SKSpriteNode
{
class func newNode(position position: CGPoint) -> UserNode
{
let position = position
let sprite = UserNode(imageNamed: "userImage")
sprite.position = position
sprite.size = CGSize(width: sprite.size.width * 2, height: sprite.size.height * 2)
sprite.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "userImage"), size: sprite.size)
sprite.physicsBody?.affectedByGravity = true
sprite.physicsBody?.dynamic = true
sprite.physicsBody?.allowsRotation = false
sprite.physicsBody?.friction = 0.2
return sprite
}
}
用于移动用户
(我的游戏场景中的方法
)
你增加了平台上的摩擦力了吗?我猜你是用
SKAction
移动你的“移动”精灵的吧?是的,我试着增加了平台上的摩擦力@gliderman我实际上是通过改变它的速度来移动它的@WangYudong@isaac我知道这是个愚蠢的问题,但是您是否同时增加了平台和用户的摩擦力?也许需要用脉冲来改变速度?你增加了平台上的摩擦力了吗?我猜你是用SKAction
来移动“移动”精灵的?是的,我试着增加了平台上的摩擦力@gliderman我实际上是通过改变它的速度来移动它的@WangYudong@isaac我知道这是个愚蠢的问题,但是您是否同时增加了平台和用户的摩擦力?也许需要用脉冲来改变速度?
let scale: CGFloat = 2.0
let damping: CGFloat = 0.98
var point = CGPoint?()
func moveNodeToPoint(sprite: SKSpriteNode, point: CGPoint)
{
let dx = (point.x - sprite.position.x) * scale
let dy = (point.y - sprite.position.y) * scale
sprite.physicsBody?.velocity = CGVectorMake(dx, dy)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
/* Called when a touch begins */
for _: AnyObject in touches
{
if !welcomeNode.hidden
{
let fadeAway = SKAction.fadeOutWithDuration(0.3)
welcomeNode.runAction(fadeAway)
directionsNode.runAction(fadeAway)
touchStartNode.runAction(fadeAway)
welcomeNode.hidden = true
directionsNode.hidden = true
touchStartNode.hidden = true
}
//////////
point = CGPointMake(self.frame.midX, user.position.y + 300)
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
{
point = nil
}
override func update(currentTime: CFTimeInterval)
{
/* Called before each frame is rendered */
if (point != nil)
{
moveNodeToPoint(user, point: point!)
}
else
{
let dx = user.physicsBody!.velocity.dx * damping
let dy = user.physicsBody!.velocity.dy * damping
user.physicsBody?.velocity = CGVectorMake(dx, dy)
}
}
let screenSize = UIScreen.mainScreen().bounds
let width = screenSize.size.width * 2
let firstAction = SKAction.moveBy(CGVector(dx: width, dy: 0), duration: 2)
let secondAction = SKAction.moveBy(CGVector(dx: -width, dy: 0), duration: 2)
let actions = [firstAction, secondAction]
let barAction = SKAction.sequence(actions)
let mainBarAction = SKAction.repeatActionForever(barAction)
platform.runAction(mainBarAction)