SKPhysicsBody =============
Thân thể vật lý gắn với nút, tương tác với SKPhysicsWorld của cảnh.
- Phương thức khởi tạo, không thể kế thừa. Chịu ảnh hưởng từ trọng lực và các lực khác trong SKPhysicsWorld.
/// Hình tròn có bán kính r, tâm tại gốc tọa độ
public init(circleOfRadius r: CGFloat)
/// Hình tròn có bán kính r, tâm tại center
public init(circleOfRadius r: CGFloat, center: CGPoint)
/// Hình chữ nhật kích thước s, tâm tại gốc tọa độ
public init(rectangleOf s: CGSize)
/// Hình chữ nhật kích thước s, tâm tại center
public init(rectangleOf s: CGSize, center: CGPoint)
/// Đường đa giác lõm hoặc lồi, không tự cắt, theo chiều ngược kim đồng hồ, vị trí tương đối với gốc tọa độ của nút
public init(polygonFrom path: CGPath)
- Phương thức khởi tạo, không thể kế thừa. Môi trường tĩnh, không có khối lượng, không chịu ảnh hưởng từ SKPhysicsWorld. Các cạnh có thể va chạm với vật thể có khối lượng nhưng không va chạm lẫn nhau. Nếu trực tiếp đặt vị trí của nút khác trùng với hình dạng của nó, có thể dẫn đến hiện tượng xuyên qua!
/// Một đoạn thẳng từ p1 đến p2.
public init(edgeFrom p1: CGPoint, to p2: CGPoint)
/// Tạo từ đường dẫn path. Đường dẫn không được tự cắt.
public init(edgeChainFrom path: CGPath)
/// Tạo từ đường dẫn path. Điểm cuối sẽ nối lại với điểm đầu. Đường dẫn không được tự cắt.
public init(edgeLoopFrom path: CGPath)
/// Tạo từ CGRect thành hình chữ nhật.
public init(edgeLoopFrom rect: CGRect)
/// @available(iOS 8.0, *) Tạo từ texture, kích thước thường là kích thước của texture
public init(texture: SKTexture, size: CGSize)
/// @available(iOS 8.0, *) Tạo từ texture, chỉ hiển thị pixel có độ trong suốt vượt ngưỡng alphaThreshold, kích thước thường là kích thước của texture
public init(texture: SKTexture, alphaThreshold: Float, size: CGSize)
/// Tạo từ tập hợp các thân thể vật lý
public init(bodies: [SKPhysicsBody])
- Các thuộc tính vật lý
/// Có bị ảnh hưởng bởi trọng lực và lực tác động khác không. Mặc định là true.
open var isDynamic: Bool
/// Dùng phát hiện va chạm chính xác. Khi tốc độ cao, vật có thể rời khỏi điểm va chạm trước khi phản ứng. Mặc định là false, nếu set thành true sẽ tính toán trước quỹ đạo để dự đoán va chạm, tiêu hao nhiều tài nguyên.
open var usesPreciseCollisionDetection: Bool
/// Cho phép quay hay không, mặc định là true
open var allowsRotation: Bool
/// @available(iOS 8.0, *) Có bị cố định vào nút cha như khớp nối không, mặc định là false
open var pinned: Bool
/// Có đang đứng yên không
open var isResting: Bool
/// Hệ số ma sát, mặc định là 0.2 (0~1)
open var friction: CGFloat
/// @available(iOS 8.0, *) Điện tích, chỉ có hiệu lực khi có trường điện từ, mặc định là 0
open var charge: CGFloat
/// Hệ số đàn hồi, mặc định là 0.2 (0~1)
open var restitution: CGFloat
/// Hệ số cản không khí hoặc nước, mặc định là 0.1 (0~1)
open var linearDamping: CGFloat
/// Hệ số cản quay, mặc định là 0.1 (0~1)
open var angularDamping: CGFloat
/// Mật độ, mặc định là 1
open var density: CGFloat
/// Khối lượng, mặc định là 1, liên quan đến mật độ density
open var mass: CGFloat
/// Diện tích chiếm giữ, diện tích thực tế là cần nhân với 150²
open var area: CGFloat { get }
/// Bị ảnh hưởng bởi trọng lực không, mặc định là true. Nếu set false thì vẫn bị ảnh hưởng bởi trọng lực tạo bởi linearGravityField(withVector:) và radialGravityField().
open var affectedByGravity: Bool
/// Lấy danh sách các khớp
open var joints: [SKPhysicsJoint] { get }
/// Nút sở hữu thân thể này
weak open var node: SKNode? { get }
/// Vận tốc, mặc định là (0, 0)
open var velocity: CGVector
/// Vận tốc góc, mặc định là 0
open var angularVelocity: CGFloat
- Liên quan đến bitMask của thân thể
/// @available(iOS 8.0, *) Những trường lực nào ảnh hưởng, mặc định 0xFFFFFFFF là tất cả đều ảnh hưởng
open var fieldBitMask: UInt32
/// Mã bitmask của vật thể, cần thiết khi muốn nhận kết quả va chạm hoặc tiếp xúc. Kết hợp với contactTestBitMask. Mặc định 0xFFFFFFFF.
open var categoryBitMask: UInt32
/// Các loại vật thể có thể va chạm, ảnh hưởng đến chuyển động. Nếu bằng 0 thì không va chạm, xuyên qua. Mặc định 0xFFFFFFFF là tất cả đều va chạm
open var collisionBitMask: UInt32
/// Các loại vật thể có thể tiếp xúc, dùng để báo cáo kết quả va chạm thông qua delegate của cảnh. Kết hợp với categoryBitMask. Mặc định 0x0
open var contactTestBitMask: UInt32
/// Tất cả các thân thể tiếp xúc
open func allContactedBodies() -> [SKPhysicsBody]
- Áp dụng lực
/// Áp dụng lực liên tục, tăng gia tốc theo công thức F=ma, vận tốc tăng dần. Không thay đổi ngay lập tức.
/// Áp dụng lực tại tâm của vật thể.
open func applyForce(_ force: CGVector)
/// Áp dụng lực tại điểm point của vật thể
open func applyForce(_ force: CGVector, at point: CGPoint)
/// Áp dụng lực xoắn (quay) lên vật thể
open func applyTorque(_ torque: CGFloat)
/// Cộng dồn vận tốc cũ để tạo vận tốc mới
/// Áp dụng xung lực tại tâm của vật thể.
open func applyImpulse(_ impulse: CGVector)
/// Áp dụng xung lực tại điểm point của vật thể
open func applyImpulse(_ impulse: CGVector, at point: CGPoint)
/// Áp dụng xung lực xoắn (quay) lên vật thể
open func applyAngularImpulse(_ impulse: CGFloat)