2016-03-31 3 views
2

Ich bin ein Spiel erstellen und ich habe Probleme, meine Kugeln in Richtung meines Joysticks spawnen. hier ist die Methode für meine Kugelnwie man ein SKAction in Richtung eines Joysticks Grad

func spawnBullets(){ 

    let bullet = SKSpriteNode(imageNamed: "bullet.png") 
    bullet.zPosition = -5 
    bullet.position = CGPointMake(hero.position.x, hero.position.y)   
    bullet.xScale = 0.25 
    bullet.yScale = 0.25 
    bullet.physicsBody = SKPhysicsBody(rectangleOfSize: bullet.size) 
    bullet.physicsBody?.categoryBitMask = PhysicsCategory.bullet 
    bullet.physicsBody?.contactTestBitMask = PhysicsCategory.enemy 
    bullet.physicsBody?.affectedByGravity = false 
    bullet.physicsBody?.dynamic = false 
    let action = SKAction.moveToY(self.size.height + 30, duration: 1.0)  
    let actionDone = SKAction.removeFromParent() 
    bullet.runAction(SKAction.sequence([action, actionDone])) 
    self.addChild(bullet) 
} 

hier ist, wie ich in meinem

override func didMoveToView(view: SKView) { 

_ = NSTimer.scheduledTimerWithTimeInterval(0.25, target: self, 
selector: Selector ("spawnBullets"), userInfo: nil, repeats: true) 
} 

die Methode nenne und hier ist, wie ich codiert Berührungen Funktion bewegt (ich glaube, dass das Verfahren ist, dass ich bearbeiten müssen)

override func touchesMoved(touches: Set<UITouch>, withEvent event: 
UIEvent?) { 
    for touch in touches { 
     let location = touch.locationInNode(self) 
     let v = CGVector(dx: location.x - joystickBase.position.x, dy: 
     location.y - joystickBase.position.y) 
     let angle = atan2(v.dy, v.dx) 
     let deg = angle * CGFloat(180/M_PI) 
     let length: CGFloat = joystickBase.frame.size.height/2 
     let xDist:CGFloat = sin(angle - 1.5709633) * length 
     let yDist:CGFloat = cos(angle - 1.5709633) * length 
     print(deg + 180) 

     if (stickActive == true) { 

     if (CGRectContainsPoint(joystickBase.frame, location)) { 

      joystick.position = location 

     }else{ 

joystick.position = CGPointMake(joystickBase.position.x - 
xDist, joystickBase.position.y + yDist) 
      } 

     } 
    } 
} 
+0

@ crashoveride777 –

Antwort

1

Sie sind die Kugeln in vertikaler Richtung nur bewegt:

let action = SKAction.moveToY(self.size.height + 30, duration: 1.0)

Nicht sicher, ob das ein Doppelstockspiel ist oder nicht.

Sprites auf dem Joystick zu gehen Um basiert, wird die folgende gerade tun

let accel = 10 //accel is the # of pixels the sprite moves per frame, do not use moveTo, because moveTo will change the speeds of your sprite based on distance 
let action = SKAction.moveByX(joystick.x * accel,y:joystick.y * accel,duration:1) 

Dies natürlich basiert auf dem Verständnis, dass Ihr Joystick von -1,0 bis 1,0 auf jeder Achse gehen Koordinaten, und dieser Punkt oben oder rechts bekommen Sie ein 1.0 Ergebnis

Ich würde nicht einmal diesen Ansatz obwohl, SKActions sind keine gute Wahl für Dinge, die nicht automatisiert sind. Sie sollten in Ihrer Update-Phase zu einem bestimmten Zeitpunkt zu aktualisieren, die Position des Sprites seines

sprite.position.x += joystick.x * accel 
sprite.position.y += joystick.y * accel 
+0

@knightOfdragon könnten Sie mir ein Beispiel für den Code geben, mit Ihrem Rat umgesetzt? Ich habe versucht, mit Ihrer Methode, aber ich habe ein paar Fehler –

+0

Sie können nicht einfach kopieren, und ich bin mir nicht sicher, welchen Code Sie möchten, dass ich, was ich post geht in der Update-Anweisung, aber Sie erhalten Ihre Joystick-Werte ist abhängig von dir – Knight0fDragon

+0

Die Update-Methode ..... Ich habe dir gerade gesagt, die Position direkt setzen – Knight0fDragon

Verwandte Themen