2016-08-05 8 views
1

Ich habe ein Projekt erstellt, wo ich einen Ball habe und wenn die Ansicht lädt, fällt es runter, was gut ist. Ich versuche den Ball wieder hochzuspringen und wieder runterzufallen, wenn der Spritenode angetippt wird.Berühre Sprite, springe hoch und dann wieder runter (wiederhole so oft wie spritenode angetippt wird.)

--Dieser Frage war edited-- Ursprünglich konnte ich es bekommen, wenn sprite.userInteractionEnabled = false zu arbeiten. Ich musste diese Aussage richtig stellen, um den Punktestand zu verändern.

enter image description here

Jetzt kann ich nicht die Kugeln angezapft zu fallen und werden zu springen. Wenn ich ball.physicsBody?.dynamic = true wende, fallen die Bälle aufgrund der Schwerkraft. Wie tippe ich das Sprite selbst und lasse es springen.

GameScene.swift (Für diejenigen, die den Code für sich. Versuchen wollen)

import SpriteKit 

class GameScene: SKScene { 
var ball: Ball! 


private var score = 0 { 
    didSet { scoreLabel.text = "\(score)" } 
} 


override func didMoveToView(view: SKView) { 
    let ball = Ball() 


    scoreLabel = SKLabelNode(fontNamed:"Geared-Slab") 
    scoreLabel.fontColor = UIColor.blackColor() 
    scoreLabel.position = CGPoint(x: self.frame.midX, y: 3 * self.frame.size.height/4) 
    scoreLabel.fontSize = 100.0 
    scoreLabel.zPosition = 100 
    scoreLabel.text = String(score) 
    self.addChild(scoreLabel) 





    ball.position = CGPoint(x:self.size.width/2.0, y: 440) 

    addChild(ball) 



    ball.physicsBody = SKPhysicsBody(circleOfRadius: 120) 
    ball.physicsBody?.dynamic = true 
    ball.physicsBody?.allowsRotation = false 

    ball.physicsBody?.restitution = 3 
    ball.physicsBody?.friction = 0 
    ball.physicsBody?.angularDamping = 0 
    ball.physicsBody?.linearDamping = 0 

    ball.physicsBody?.usesPreciseCollisionDetection = true 
} 


class Ball: SKSpriteNode { 



    init() { 
     let texture = SKTexture(imageNamed: "Ball") 
     super.init(texture: texture, color: .clearColor(), size: texture.size()) 
     userInteractionEnabled = true 

    } 


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let scene = self.scene as! GameScene 
     scene.score += 1 



    } 

Früher war es ein SKNode angezapft CGVectorMake (Impuls, Geschwindigkeit) mit jetzt, es ist ein SKSpriteNode, und ich habe versucht mit SKAction, aber es funktioniert entweder nicht, oder ich stelle es an den falschen Ort (berührt beginnen).

Antwort

1

Ich habe Ihren Code getestet und es scheint, dass firstBall.userInteractionEnabled = true die Ursache ist. Ohne es sollte es funktionieren. Ich habe etwas recherchiert (here for example), kann aber nicht herausfinden, was der Grund für dieses Verhalten mit userInteractionEnabled ist. Oder aus welchem ​​Grund verwenden Sie userInteractionEnabled?

Aktualisierung aufgrund Aktualisierung der Frage definiert

Ersteball.physicsBody?.restitution = 3 die bounciness der Physik Körper. Der Standardwert ist 0,2 und die Eigenschaft muss zwischen 0,0 und 1,0 liegen. Wenn Sie es also auf 3.0 setzen, wird es einige unerwartete Effekte geben. Ich habe es einfach gelöscht, um den Standardwert von 0,2 zu verwenden.

Zweite, den Ball Sprung nach Hahn zu machen und erhöhen die Punktzahl ich

setzen
physicsBody?.velocity = CGVectorMake(0, 600) 
physicsBody?.applyImpulse(CGVectorMake(0, 1100)) 

im touchesBegan Methode des Ball class

Ergebnis

enter image description here

+0

Vielen Dank. Es funktionierte. Ich kann nicht glauben, dass es so einfach war. –

+0

meinst du, du könntest mir dabei helfen? Ich möchte nicht entfernen, dass du meine Frage beantwortet hast, weil du es richtig beantwortet hast, als ich es gefragt habe. –

+0

aktualisierte meine Antwort @JNorris – ronatory

Verwandte Themen