簡體   English   中英

如何在Sprite Kit(Swift)中為內部具有SKSpriteNode的實體創建實體

[英]How to create a physics body for an SKSpriteNode with an interior in Sprite Kit (Swift)

我目前正在制作一個iOS游戲,其中球必須在下圖定義的框架內反彈:

在此處輸入圖片說明

游戲依靠以下方法自動創建物理體並將其分配給游戲周圍的框架。

frame.physicsBody = SKPhysicsBody(texture: frameTexture, size: frame.size)

但是,此代碼指定了包圍圖像外部而不是內部的主體,因此將空白內部視為實體。 反過來,這意味着球不能在框架內,並且在生成后立即被迫離開屏幕。

有什么辦法可以給物理身體一個內部?

這里的另一篇文章: 具有Inner Edges的SpriteKit SKPhysicsBody旨在做類似的事情,但不涉及在紋理周圍自動包裹(因此提出了新的問題)

您可以使用init(edgeLoopF​​rom :)初始化程序來實現內部邊緣摩擦。 您可以在下面使用此代碼:

 override func didMove(to view: SKView) {
    //Setup scene's physics body (setup the walls)
    physicsBody = SKPhysicsBody(edgeLoopFrom: frame)

    let back = SKSpriteNode(imageNamed: "1")
    back.position = CGPoint(x: frame.midX, y: frame.midY)
    back.size = CGSize(width: 500, height: 600)
    back.zPosition = -3
    let rect = CGRect(origin: CGPoint(x: -back.size.width/2, y: -back.size.height/2), size: back.size)
    back.physicsBody = SKPhysicsBody(edgeLoopFrom: rect)

    addChild(back)

    //Add Red ball "inside" the back sprite
    let red = SKShapeNode(circleOfRadius: 20)
    red.fillColor = .red
    red.strokeColor = .clear
    red.position = back.position
    red.physicsBody = SKPhysicsBody(circleOfRadius: 20)
    red.physicsBody?.restitution = 1
    red.physicsBody?.friction = 0
    red.zPosition = 1
    red.physicsBody?.affectedByGravity = false

    addChild(red)

    red.physicsBody?.applyImpulse(CGVector(dx: 20, dy: 15))

}

請遵循此問題 ,並查看下面給出的答案。

我正在提供我的項目的屏幕截圖 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM