首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sprite-kit collison

Sprite-kit collison
EN

Stack Overflow用户
提问于 2016-09-05 08:10:40
回答 1查看 48关注 0票数 0

我的项目中的所有这些代码都工作得很好,但我有一些问题。当飞机接触到屏幕的边界时,它在接触后开始旋转。我想不出如何让它在碰到屏幕边缘时不会旋转。只有在我使用以下命令时才会出现此问题:

代码语言:javascript
运行
复制
plane.physicsBody = SKPhysicsBody(texture: plane.texture!, size: plane.size)

其他形式的定义我没有问题,但我需要它的纹理的大小。

代码语言:javascript
运行
复制
plane = SKSpriteNode(imageNamed: sett.store() as! String)
plane.size = CGSize(width: 80, height: 80)
plane.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 4)
// scorenode collison off, makes images spin on any contact
plane.physicsBody = SKPhysicsBody(texture: plane.texture!, size: plane.size)
plane.physicsBody?.categoryBitMask = Physics.Plane
plane.physicsBody?.collisionBitMask = Physics.Bird
plane.physicsBody?.contactTestBitMask = Physics.Bird | Physics.Score | Physics.Coin
plane.physicsBody?.affectedByGravity = true
plane.physicsBody?.dynamic = true
plane.zPosition = 2
self.addChild(plane)

// screen boarder so cant leave screen
let boredBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
boredBody.friction = 0
self.physicsBody = boredBody

我的另一个问题还是飞机的问题

代码语言:javascript
运行
复制
plane.physicsBody = SKPhysicsBody(texture: plane.texture!, size: plane.size)

但我也需要这个,所以它是纹理的大小。当它在屏幕上命中我的得分节点时,它应该只增加1分,但当它穿过scoreNode时,它会变化1-大约60分。我该怎么解决这个问题?

代码语言:javascript
运行
复制
let scoreNode = SKSpriteNode()
scoreNode.size = CGSize(width: 800, height: 1)
scoreNode.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + 350)
scoreNode.physicsBody = SKPhysicsBody(rectangleOfSize: scoreNode.size)
scoreNode.physicsBody?.affectedByGravity = false
scoreNode.physicsBody?.dynamic = false
scoreNode.physicsBody?.categoryBitMask = Physics.Score
scoreNode.physicsBody?.collisionBitMask = 0
scoreNode.physicsBody?.contactTestBitMask = Physics.Plane
scoreNode.color = SKColor.whiteColor()

// when scoreNode and plane touch && initates score and highScore
if firstBody.categoryBitMask == Physics.Score && secondBody.categoryBitMask == Physics.Plane || firstBody.categoryBitMask == Physics.Plane && secondBody.categoryBitMask == Physics.Score {
    score += 1
    if score >= highScore{
        highScore = score
        scoreLabel.text = "SCORE: \(score)"
        highScoreLabel.text = "HIGH SCORE: \(highScore)"
        let highScoreDefault = NSUserDefaults.standardUserDefaults()
        highScoreDefault.setValue(highScore, forKey: "highScore")
        highScoreDefault.synchronize()
    } else {
        scoreLabel.text = "SCORE: \(score)"
        highScoreLabel.text = "HIGH SCORE: \(highScore)"
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-05 08:38:08

它是旋转的,因为碰撞给物理物体带来了角速度。这就是它应该是的。如果你真的不想让一个物体有角速度,你可以通过设置节点物理体来实现。

allowsRotation属性设置为false。

在这种情况下,它将类似于:

scoreNode.physicsBody?.allowsRotation = false

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/instp/SKPhysicsBody/allowsRotation

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39322544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档