精灵套件 - 如果球移开或靠近地面,则由于冲击和重力而检测到Y.

时间:2014-04-27 00:45:03

标签: ios objective-c sprite-kit skphysicsbody

我正在为一个SKSpriteNode(一个Ball)创建一个假阴影,其中有物理实体和Y方向的脉冲应用于它。我喜欢减少在球抬起时留在地面上的阴影的不透明度,并在它向后朝地面时将其减少到100%。任何想法?

2 个答案:

答案 0 :(得分:1)

是的,请使用更新方法。然后只需在每次更新时测试球Y位置。

  1. 将球添加到场景中。
  2. 为场景添加阴影。
  3. 在场景的更新方法中(由SpriteKit在每一帧调用)将阴影移动到正确的坐标。 (阴影击中的Y等级,球的X)。
  4. 将不透明度设置为(300.0-ball.position.y / 300.0)。 300.0是阴影完全消失的高度。

答案 1 :(得分:0)

以下是代码示例。您也可以使用SKAction上下移动对象,而不是像在更新方法中那样手动操作。这完全取决于您的代码以及最适合您的代码。

#import "MyScene.h"

@implementation MyScene
{
    SKSpriteNode *object1;
    SKSpriteNode *shadow;
    BOOL goUp;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        object1 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(50, 50)];
        object1.position = CGPointMake(100, 25);
        [self addChild:object1];

        shadow = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(50, 50)];
        shadow.position = CGPointMake(200, 25);
        [self addChild:shadow];

        goUp = true;

    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //
}

-(void)update:(CFTimeInterval)currentTime
{
    if((goUp == true) && (object1.position.y == 200))
        goUp = false;

    if((goUp == false) && (object1.position.y == 25))
        goUp = true;

    if(goUp == true)
    {
        object1.position = CGPointMake(object1.position.x, object1.position.y+1);
        shadow.alpha -= 0.005;
    }

    if(goUp == false)
    {
        object1.position = CGPointMake(object1.position.x, object1.position.y-1);
        shadow.alpha += 0.005;
    }
}

@end