精灵套件 - 多个移动物体上的阴影影响脉冲和重力

时间:2014-04-29 00:45:38

标签: sprite-kit skphysicsbody

根据我的第一个问题hereTheis Egeberg回答(解决方案在评论中更多地由Theis解释并且像魔术一样工作)我还需要知道以下内容:

(这可能有一个简单的答案,但我会把它留给Theis或任何可以弄明白的人。)

如果我有另一个物体在Y轴上以已经移动的球弹回另一个速度怎么办?如何更改球上阴影的alpha值。

为了更好地解释它并使其更加混乱,我们可以说我们有一个乒乓球拍上下移动和一个弹跳它的乒乓球。使用Theis之前提供的公式,我们现在知道如何在地面上制作乒乓球拍(之前是球)的alpha动画,但球拍上乒乓球的阴影怎么样? 我们怎样才能改变球拍的不透明度? 它会像在火箭球上使用相同的公式一样简单:)? 它可以作为一个类使用,并在这里和那里多次使用,你会如何在更新等地方编写和使用它?

以下是我使用Theis Egeberg公式实现的代码。

- (void)update:(CFTimeInterval)currentTime
{

[self enumerateChildNodesWithName:@"shadowOnTheGround" usingBlock:^(SKNode *node, BOOL *stop) {

        SKSpriteNode* racket = (SKSpriteNode*)[self childNodeWithName:@"racket"];

        node.position = CGPointMake(60,217);

        float racketY = racket.position.y;
        float theisFormula = (430.0- recketY)/430;
        node.alpha = theisFormula;
      //NSLog(@"%f", theisFormula);

}]; 
}

1 个答案:

答案 0 :(得分:0)

您可以使用userData属性

将每个阴影节点与其特定的阴影施法者相关联
shadowNode.name = @"shadowOnTheGround" //as you have set

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObject:racketNode forKey:@"caster"];
//racketnode refers to the caster object

shadowNode.userData = dic;

现在,在-update:方法中,

- (void)update:(CFTimeInterval)currentTime
{

    [self enumerateChildNodesWithName:@"shadowOnTheGround" usingBlock:^(SKNode *node, BOOL *stop) {

        SKSpriteNode* caster = (SKSpriteNode*)[node.userData objectForKey:@"caster"];

//You have your shadow node and it's caster, apply generic code for transforming shadow.

        node.position = CGPointMake(60,217); //Is this needed?

        float casterY = caster.position.y;
        float theisFormula = (430.0- casterY)/430;  //Make this generic
        node.alpha = theisFormula;
      //NSLog(@"%f", theisFormula);

}]; 
}

使用此代码,您可以将多个阴影与其特定对象相关联,并使用相同的代码块对其进行转换。