当在另一个类中使用ApplicImpulse时,Swift Center on Camera无法正常工作

时间:2015-03-31 02:48:03

标签: swift sprite-kit

我是快速编程的新手,并且在上周一直坚持这个问题。我试图以一个英雄为中心,同时向他施加冲动。如果我在场景课中创建了一个英雄并使他居中,那么我的代码就可以工作了,但是当我把一个英雄放在另一个班级并尝试将他从场景课中心化时,它就无法工作。如果我只是通过改变他的x或y位置来移动他,而不是如果我施加冲动,那么现在集中在工作上。似乎当一个英雄在一个单独的类中时,当他在运动时施加脉冲x和y显示为零,但是当他在同一类中而不是x和y时,在运动中出现好。非常感谢任何帮助。

当所有内容都在同一个班级时,Center ON与ApplyImpulse配合使用的代码*****

class GameScene: SKScene {

  var hero:SKSpriteNode?
  var mazeWorld:SKNode?
  var player=Player()
  var heroLocation:CGPoint = CGPointZero

  override func didMoveToView(view: SKView) {
    mazeWorld = childNodeWithName("mazeWorld")
    heroLocation = mazeWorld!.childNodeWithName("sPoint")!.position

    self.anchorPoint = CGPoint(x: 0.5,y: 0.3)

    hero?.position = heroLocation

    hero = SKSpriteNode(imageNamed:"hero_walk_down_0")
    hero!.physicsBody?.dynamic = false
    hero!.physicsBody?.affectedByGravity = true
    hero!.physicsBody?.pinned = false
    hero!.physicsBody = SKPhysicsBody(rectangleOfSize: hero!.size)
    hero!.physicsBody?.mass = 1.0;
    hero!.setScale(0.8)

    mazeWorld!.addChild(hero!)
  }

  override func touchesBegan(touches: NSSet, withEvent event: UIEvent)  

  {
     /* Called when a touch begins */

    for touch: AnyObject in touches {
      hero!.physicsBody?.applyImpulse(CGVector(dx: 240, dy: 550))
    }
  }

  override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
  }

  func centerOnNode(node:SKNode){

        let cameraPositionInScene:CGPoint = self.convertPoint(node.position, fromNode: mazeWorld!)

        mazeWorld!.position = CGPoint(x:mazeWorld!.position.x - cameraPositionInScene.x, y: mazeWorld!.position.y - cameraPositionInScene.y)
   }


   override func didSimulatePhysics() {
       self.centerOnNode(hero!)
   }



}

****以下是中心ON的代码,由于某种原因不适用于申请冲动

import SpriteKit

class GameScene: SKScene {

  var hero:SKSpriteNode?
  var mazeWorld:SKNode?
  var player=Player()
  var heroLocation:CGPoint = CGPointZero

  override func didMoveToView(view: SKView) {
    mazeWorld = childNodeWithName("mazeWorld")
    heroLocation = mazeWorld!.childNodeWithName("sPoint")!.position

    self.anchorPoint = CGPoint(x: 0.5,y: 0.3)

    player.position = heroLocation

    mazeWorld!.addChild(player)
  }

  override func touchesBegan(touches: NSSet, withEvent event: UIEvent) 

  {
    /* Called when a touch begins */

    for touch: AnyObject in touches {
        player.jumpRight()
    }
  }

  override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
  }


  func centerOnNode(node:SKNode){

        let cameraPositionInScene:CGPoint = self.convertPoint(node.position, fromNode: mazeWorld!)

        mazeWorld!.position = CGPoint(x:mazeWorld!.position.x - cameraPositionInScene.x, y: mazeWorld!.position.y - cameraPositionInScene.y)
    }


    override func didSimulatePhysics() {
       self.centerOnNode(player)
    }



}

import Foundation
import SpriteKit

class Player: SKNode{

  var objectSprite:SKSpriteNode?

  override init()
  {
    super.init()

    objectSprite = SKSpriteNode(imageNamed:"hero_walk_down_0")
    objectSprite!.physicsBody?.dynamic = false
    objectSprite!.physicsBody?.affectedByGravity = true
    objectSprite!.physicsBody?.pinned = false
    objectSprite!.physicsBody = SKPhysicsBody(rectangleOfSize: objectSprite!.size)
    objectSprite!.physicsBody?.mass = 1.0
    objectSprite!.setScale(0.8)

    addChild(objectSprite!)

}

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

  func jumpRight()
  {
       objectSprite!.physicsBody?.applyImpulse(CGVector(dx: 240, dy: 550))
   }
} 

0 个答案:

没有答案