根据我的第一个问题here由Theis 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);
}];
}
答案 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);
}];
}
使用此代码,您可以将多个阴影与其特定对象相关联,并使用相同的代码块对其进行转换。