2016-07-13 4 views
1

Ich bin sehr neu für Swift und ich versuche, einen Ball zu erstellen, die auf und ab springt. Wenn ich verwende:Warum, wenn ich SKSpriteNode mit einem Bild verwenden, es prallt nicht, aber wenn ich SKShapeNode verwende es funktioniert?

import Foundation 
import SpriteKit 

class Ball { 
    let movingObject: SKShapeNode 

    init() { 
     movingObject = SKShapeNode(circleOfRadius: 25) 
     movingObject.physicsBody = SKPhysicsBody(circleOfRadius: 25) 
     movingObject.physicsBody?.affectedByGravity = true 
     movingObject.physicsBody?.restitution = 1 
     movingObject.physicsBody?.linearDamping = 0 

    } 
} 

es funktioniert gut. Wenn ich jedoch versuche, ein Bild zu verwenden, springt es nicht zurück.

class Ball { 
    let movingObject: SKSpriteNode 
    let picture: String 

    init(picture: String) { 
     self.picture = picture 
     movingObject = SKSpriteNode(imageNamed: picture) 
     movingObject.physicsBody = SKPhysicsBody(circleOfRadius: movingObject.size.width * 0.5) 
     movingObject.physicsBody?.affectedByGravity = true 
     movingObject.physicsBody?.restitution = 1 
     movingObject.physicsBody?.linearDamping = 0 

    } 
} 
+2

Bitte [Bearbeiten] Ihre Frage Titel mehr sinnvoll zu sein. Es sollte das tatsächliche Problem oder die Frage beschreiben, die du fragst (* dieser Code funktioniert nicht * ist keine Problembeschreibung, die nützlich ist). Dein Titel sollte klar genug sein, um zukünftigen Lesern, die sie in einem Suchergebnis sehen, eine Bedeutung zu geben. (Stellen Sie sich vor für ein Problem, das Suchen und Finden von 100 Fragen, deren Titel sind alle Variationen von * Dieser Code * nicht funktioniert, wäre das nützlich für Sie, ohne sich durch alle 100 Beiträge lesen zu müssen, um zu sehen, wenn man auf Sie zutrifft?) –

+0

auch bitte Zeige den Code, der "funktioniert" und den Code, der "nicht funktioniert". Sei klar, worin das Problem besteht. – matt

+0

Debug und sehen, was 'movingObject.size.width' erweist sich zu sein ... – matt

Antwort

2

Der einzige Unterschied zwischen Ihren beiden Physikkörpern ist der Radius. Daher muss dies das Problem sein.

Versuchen Sie, den Radius auf 25 einzustellen, wie Sie es mit dem Formknoten getan haben, um zu bestätigen, und versuchen Sie dann zu begründen, warum movingObject.size.width * 0.5 nicht zu einem vernünftigen Wert kommt. Sie können einen Haltepunkt setzen und den Debugger verwenden, um print movingObject.size zu helfen.

+0

täuschend ähnlich, was ich gesagt ... :) – matt

1

über die SKSpriteNode Quellen:

/** 
    Initialize a sprite with an image from your app bundle (An SKTexture is created for the image and set on the sprite. Its size is set to the SKTexture's pixel width/height) 
    The position of the sprite is (0, 0) and the texture anchored at (0.5, 0.5), so that it is offset by half the width and half the height. 
    Thus the sprite has the texture centered about the position. If you wish to have the texture anchored at a different offset set the anchorPoint to another pair of values in the interval from 0.0 up to and including 1.0. 
    @param name the name or path of the image to load. 
    */ 
    public convenience init(imageNamed name: String) 

Im ersten Fall verwenden Sie 25 als Radius, in den nächsten müssen Sie prüfen, ob movingObject.size.width` * 0.5 eine gültige Maßnahme.

Wenn Sie in Debug-Phasen versuchen, sich auf der showsPhysics Eigenschaft durch Drehen zu helfen:

-Code beispiel:

override func viewDidLoad() { 
     super.viewDidLoad() 

     if let scene = GameScene(fileNamed:"GameScene") { 
      // Configure the view. 
      let skView = self.view as! SKView 
      skView.showsPhysics = true 
      ... 
     } 
} 

Sie können die physicBody Grenzen Ihrer Objekte und Sie leicht ansehen kann es sofort bemerken, wenn etwas nicht stimmt.

enter image description here

Verwandte Themen