SpriteKit(5) - 交互(Node重力感應(yīng))

import SpriteKit
import GameplayKit
import CoreMotion

class GameGravity: SKScene {
    
    var motionManager : CMMotionManager = CMMotionManager()
    var node : SKSpriteNode!
    
    override func didMove(to view: SKView) {
        //布置場(chǎng)景
        self.size = UIScreen.main.bounds.size
        node = SKSpriteNode()
        node.name = "gravity"
        node.size = CGSize(width: 100, height: 100)
        node.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
        node.color = UIColor.red
        self.addChild(node)

        print(motionManager)
        if motionManager.isAccelerometerAvailable {
            print("支持重力")
        }

        //重力感應(yīng)操作
        motionManager.startAccelerometerUpdates()
        self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame)
        self.node.physicsBody = SKPhysicsBody(rectangleOf: self.node.frame.size)
        self.node.physicsBody?.isDynamic = true             //能承受碰撞和其他外力作用
        self.node.physicsBody?.affectedByGravity = false    //不受重力影響
        self.node.physicsBody?.mass = 0.2                   //給node任意質(zhì)量,顯得更加自然
    }
    
    
    override func update(_ currentTime: TimeInterval) {
        guard let data : CMAccelerometerData = self.motionManager.accelerometerData else {
            print("data == nil")
            return
        }
        let value  : Double = data.acceleration.y
        print(data)
        if fabs(value) > 0.2 {
            let fvector = CGVector(dx: 80.0 * CGFloat(value), dy: 0)
            self.node.physicsBody?.applyForce(fvector)
        }
    }  
}
重力感應(yīng)方向

因?yàn)檫@里是橫屏操作,所以考慮好重力感應(yīng)的x,y,z和node位置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容