Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift skspritenode被卡在任何它碰到的墙里面_Swift_Sprite Kit_Collision Detection_Skspritenode - Fatal编程技术网

Swift skspritenode被卡在任何它碰到的墙里面

Swift skspritenode被卡在任何它碰到的墙里面,swift,sprite-kit,collision-detection,skspritenode,Swift,Sprite Kit,Collision Detection,Skspritenode,我的播放器根据按下的按钮将其速度的dx更改为-200或200来移动,但有时当它撞到墙上时,它会粘在墙上,无法移动。有没有办法防止这种情况 player.position = CGPointMake(CGFloat(i)*48 + 10, y*48 + 700) player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size) player.physicsBody?.categoryBitMask = playerCategory

我的播放器根据按下的按钮将其速度的dx更改为-200或200来移动,但有时当它撞到墙上时,它会粘在墙上,无法移动。有没有办法防止这种情况

player.position = CGPointMake(CGFloat(i)*48 + 10, y*48 + 700)
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
player.physicsBody?.categoryBitMask  = playerCategory
player.physicsBody?.collisionBitMask = wallCategory
player.physicsBody?.contactTestBitMask = firstPort | secPort
player.physicsBody?.allowsRotation = false
player.physicsBody?.friction = 0
player.physicsBody?.restitution = 0
player.name = "Pl"
world.addChild(player)

let sprite: SKSpriteNode = SKSpriteNode(imageNamed: "GTU.png")
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite.physicsBody?.affectedByGravity = false
sprite.physicsBody?.dynamic = false
sprite.position = CGPointMake(CGFloat(i)*48 + 10, y*48 + 700)
sprite.physicsBody?.categoryBitMask =    wallCategory
sprite.physicsBody?.collisionBitMask = playerCategory | firstPort | secPort | unopenedPortal
sprite.physicsBody?.contactTestBitMask = playerCategory | unopenedPortal
sprite.physicsBody?.friction = 0
sprite.name = "Block"
world.addChild(sprite)

override func update(currentTime: CFTimeInterval) {
    _deltaTime = currentTime - _lastUpdateTime;
    if(isRightPressed == true){
        _playerSpeedX = 200.0
    }else if(isLeftPressed == true){
            _playerSpeedX = -200.0

    }else{
        _playerSpeedX = 0
    } 
    if(player.physicsBody?.velocity.dx == 0.0 && _playerSpeedX != 0){
        player.physicsBody?.velocity = CGVectorMake(CGFloat(_playerSpeedX), player.physicsBody!.velocity.dy + 170.0)
    }else{
        player.physicsBody?.velocity = CGVectorMake(CGFloat(_playerSpeedX), player.physicsBody!.velocity.dy)
    }
}

需要查看代码。张贴相关部分,不要在玩家身上张贴所有启用精确碰撞检测的操作,否则你可能需要让他移动得更慢。他仍然被精确碰撞检测卡住,但几秒钟后(抓住相反方向的箭头)他挣脱了。即使我让他慢下来,他仍然被困在墙上,在地板上绊倒