Ich habe versucht, einen quadratischen Tropfen von der Oberseite des Bildschirms zu machen. Aber wenn es auf halbem Weg ist, springt es vom Bildschirm ab. Ich habe kein Objekt in der Mitte des Bildschirms erstellt. Ich kann nicht verstehen, warum es in der Mitte des Bildschirms springt.SKSpriteNode Prellen von etwas, das ich nicht in Swift erstellt habe
Hier ist der Link zu einem Video von mir den Code ausgeführt wird: http://sendvid.com/enm9l1np
Hier ist der Code:
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
var animator : UIDynamicAnimator?
let BlueSquare = SKSpriteNode()
let RedSquare = SKSpriteNode()
var scorenumber = 0
var Ground = SKSpriteNode()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
physicsWorld.gravity = CGVector(dx: 1.0, dy: -9.0)
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
// 2. Set the friction of that physicsBody to 0
borderBody.friction = 0
// 3. Set physicsBody of scene to borderBody
self.physicsBody = borderBody
let width = UInt32(self.frame.size.width)
let X = arc4random() % width
Ground = SKSpriteNode(imageNamed: "Ground")
Ground.setScale(1.0)
Ground.position = CGPoint(x: self.frame.width/2, y: 5)
Ground.physicsBody = SKPhysicsBody(rectangleOfSize: Ground.size)
Ground.physicsBody!.affectedByGravity = false
Ground.physicsBody!.dynamic = false
Ground.zPosition = 3
self.addChild(Ground)
//INizialize
animator = UIDynamicAnimator(referenceView: self.view!)
//Add Gravity
//animator?.addBehavior(gravity, sprite)
BlueSquare.size = CGSize(width: 100, height: 100)
BlueSquare.position = CGPoint(x: CGFloat(X), y: 1000)
BlueSquare.physicsBody?.affectedByGravity = true
BlueSquare.physicsBody?.dynamic = false
BlueSquare.name = "bluecube"
BlueSquare.physicsBody = SKPhysicsBody(circleOfRadius: 20)
BlueSquare.color = SKColor.blueColor()
// BlueSquare.physicsBody?.velocity = CGVectorMake(0, 0)
//BlueSquare.physicsBody?.applyImpulse(CGVectorMake(0, -90))
self.addChild(BlueSquare)
let X2 = arc4random() % width
RedSquare.size = CGSize(width: 100, height: 100)
RedSquare.position = CGPoint(x: CGFloat(X2), y: 1000)
RedSquare.physicsBody?.affectedByGravity = true
RedSquare.physicsBody?.dynamic = true
RedSquare.name = "redcube"
RedSquare.physicsBody = SKPhysicsBody(circleOfRadius: 20)
RedSquare.hidden = false
RedSquare.color = SKColor.redColor()
self.addChild(RedSquare)
var gameTimer = NSTimer!()
gameTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "spawning1", userInfo: nil, repeats: true)
}
func spawning1() {
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
// let location = touch.locationInNode(self)
let currentPoint = touch.locationInNode(self)
let currentNode = nodeAtPoint(currentPoint)
let nodeName: String? = currentNode.name
if nodeName == "bluecube" {
BlueSquare.hidden = true
score()
}
if nodeName == "redcube" {
RedSquare.hidden = true
score()
}
}
}
func score() {
scorenumber++
print(scorenumber)
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if CGRectIntersectsRect(RedSquare.frame, Ground.frame) {
RedSquare.position = CGPoint(x: RedSquare.position.x, y: RedSquare.position.y + 10)
}
}
}
Bitte beginnen Sie nicht Variablennamen mit einem Großbuchstaben. Variablennamen (und Methodennamen) sind 'camelCase', Klassennamen sind 'CamelCase'. Sie können sehen, dass der Formatierer Ihre Variablennamen blau schreibt, weil er glaubt, dass sie ein Klassenname sind. – Hamish