2017-12-21 8 views
-1

Ich habe eine separate "Floor" -Klasse in meiner SKSpriteKit-Anwendung. Als ich diese Klasse erstellt, hatte ich eine Barriere um den gesamten RahmenWand/Barriere mit SKSpriteNode physicsBody erstellen

self.physicsBody = SKPhysicsBody mit (edgeLoopFrom: self.frame)

aber das war eigentlich SKSpriteNodes vom Betreten von dem Stopp Oben auf dem Bildschirm, also versuche ich jetzt herauszufinden, wie ich eine linke, rechte und untere der Rahmenwand, aber nicht die Oberseite erstellen kann. Dies ist, damit ich einen meiner SKSpriteNodes am unteren Bildschirmrand vermeiden kann (immer noch für Benutzer sichtbar), der sich nach links und rechts bewegt, um das Display zu verlassen. Ich versuche darunter, das baut, als würde es funktionieren, aber wenn ich das Spiel starte, sehe ich nicht die Wände? Ich bin nicht sicher, was ich falsch mache, ich habe

skView.showsPhysics = true

import Foundation 
import SpriteKit 

    class Floor: SKNode { 
     override init() { 
      super.init() 

      let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height)) 
      leftWall.position = CGPoint(x: 100, y: 100) 
      leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size) 
      leftWall.physicsBody!.isDynamic = false 
      self.addChild(leftWall) 

      let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height)) 
      rightWall.position = CGPoint(x: 200, y: 200) 
      rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size) 
      rightWall.physicsBody!.isDynamic = false 
      self.addChild(rightWall) 

      // Set the bit mask properties 
      self.physicsBody?.categoryBitMask = balloonCategory 
      self.physicsBody?.contactTestBitMask = nailDropCategory 
      //self.physicsBody?.collisionBitMask = balloonCategory 
     } 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemted") 
     } 
    } 
+0

eingestellt Was ist die Szene, Größe und Maßstab-Modus? I.e. Sie positionieren diese Sprite-Knoten bei 100,100 und 200,200, sind Sie sicher, dass das im sichtbaren Bereich Ihrer Szene liegt? Auch nicht das Hauptproblem, sondern: Du weist der Szene zweimal einen Physikkörper zu und es kann nur einen haben, also füge die Physikkörper den Sprites hinzu, also nicht "self.physicsBody =" sondern "leftWall.physicsBody =". –

+0

Schalten Sie die Schwerkraft für Ihre Wände aus – Knight0fDragon

+0

im Grunde möchten Sie tun 'leftWall.isDynamic = false' – Knight0fDragon

Antwort

2

Gravity Ihre Wände beeinflusst, so dass sie fallen für immer in Vergessenheit.

Wenn Sie Ihren Rand Schleife erstellt, Sie haben müssen, um nicht zu kümmern, da Kantenschleifen immer statisch sind, weil es keine volumne hat

Jetzt sind Sie mit volumenbasierten Körper, so dass man für Dinge berücksichtigen müssen wie Schwerkraft und andere Kräfte beeinflussen Ihren Körper.

Um Ihren Körper diese Kräfte ignorieren, einfach isDynamic = false

let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height)) 
leftWall.position = CGPoint(x: 100, y: 100) 
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size) 
leftWall.physicsBody!.isDynamic = false 
self.addChild(leftWall) 

let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 100, height: frame.height)) 
rightWall.position = CGPoint(x: 200, y: 200) 
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size) 
rightWall.physicsBody!.isDynamic = false 
self.addChild(rightWall) 
Verwandte Themen