2
我做一个简单的游戏(使用雨燕& SpriteKit),在那里我有就是可以被拖到了一圈。但圆圈不允许穿过墙壁。Swift Sprite碰撞。对象穿过墙壁
我的碰撞掩码完美的作品,但是当我拖动速度不够快,圆结束了穿墙。
的玩家精灵的初始化是这样的:
func initPlayerSprite(){
let playerTexture = SKTexture(imageNamed: "player.png")
let originX = CGRectGetMidX(self.frame)
let originY = CGRectGetMidY(self.frame)
player = SKSpriteNode(texture: playerTexture, size: CGSize(width: 26, height: 26))
player.position = CGPoint(x: originX , y: originY)
player.physicsBody = SKPhysicsBody(circleOfRadius: playerTexture.size().height/2)
player.physicsBody!.dynamic = true
player.physicsBody?.allowsRotation = false
player.physicsBody!.categoryBitMask = ColliderType.Player.rawValue
player.physicsBody!.contactTestBitMask = ColliderType.Floor.rawValue + ColliderType.Gap.rawValue
player.physicsBody!.collisionBitMask = ColliderType.Wall.rawValue + ColliderType.Floor.rawValue
self.addChild(player)
}
我对移动雪碧代码是这样的:
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?){
var nodeTouched = SKNode()
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
let dx = -player.position.x + location.x
let dy = -player.position.y + location.y
let movePlayer = SKAction.moveBy(CGVector(dx: dx, dy: dy), duration: 0.02)
}
}
任何想法如何确保碰撞检测工作,即使在高速度?
完美的,这解决了我的问题!谢谢!至于碰撞Bitmask,我应该把它改成“|”而不是“+”。这只是一个与UInt32匹配的实验,而据我测试..它令人惊讶的工程! –
不客气,快乐编码 – crashoverride777
我试过这个,但它没有帮助我。所以我创造了一个不同的方式来做到这一点。点击[这里](https://stackoverflow.com/a/47575444/1259775)来查看它 – aytek