2015-04-23 30 views
0

我正在制作一个有云移动的游戏,并且我希望它能在角色登陆时消失。但是,当我放置代码时,如果角色四处走动并在云底或云端下降的时候消失,它会消失。这里是我用于检测角色和云命中时的代码。确定SpriteNode在一个矩形上的位置SpriteNode

无论如何要确定角色何时降落在云层顶部,以便它在云层下降时从底部或侧面撞击云层时不会褪色?

下面是声明的对象代码:

Person.physicsBody?.usesPreciseCollisionDetection = true 
    Person.size = CGSizeMake(self.frame.size.width/25, self.frame.size.height/16.25) 
    Person.physicsBody = SKPhysicsBody(rectangleOfSize: Person.size) 
    Person.physicsBody?.restitution = 0 
    Person.physicsBody?.friction = 0 
    Person.physicsBody?.allowsRotation = false 
    Person.physicsBody?.affectedByGravity = true 
    Person.physicsBody?.dynamic = true 
    Person.physicsBody?.linearDamping = 0 
    Person.zPosition = 5 
    Person.physicsBody?.categoryBitMask = BodyType.PersonCategory.rawValue 
    Person.physicsBody?.contactTestBitMask = BodyType.CloudCategory.rawValue 
    Person.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame) * 1.7) 
    self.addChild(Person) 


    Cloud = SKSpriteNode(texture: NormalCloudTexture) 
    Cloud.zPosition = 7 
    Cloud.physicsBody?.usesPreciseCollisionDetection = true 
    Cloud.physicsBody?.affectedByGravity = false 
    Cloud.physicsBody?.allowsRotation = false 
    Cloud.size = CGSizeMake(self.frame.size.width/8.05, self.frame.size.height/40) 
    Cloud.physicsBody = SKPhysicsBody(rectangleOfSize: Cloud.size) 
    Cloud.physicsBody?.friction = 0 
    Cloud.physicsBody?.restitution = 0 
    Cloud.physicsBody?.dynamic = false 
    Cloud.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)/7.60) 
    addChild(Cloud) 

这里是当物体砸中下面的代码:

func didBeginContact(contact: SKPhysicsContact) 
{ 


    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

    switch(contactMask) 
    { 
    case BodyType.PersonCategory.rawValue | BodyType.CloudCategory.rawValue: 
     JumpContact = true 
     let CheckDelay = delay(0.055) 
      { 

        //cloud fades away here 

     } 

回答

1

我没有做过,但我有一个想法。 :)

我认为你应该做的:用contactPoint财产 轨道接触的位置,然后检查是否未接触到云低,然后从上面几个点的x位置。

我希望它能帮助你。 :)

0

谢谢您的推荐!我决定愚弄,这是你做的人!

//put like a few millisecond delay here, forgot it 

if (Person.physicsBody?.velocity.dy == 0){//this means the person has stopped moving since it landed 
        //cloud fades away 
       }