gpt4 book ai didi

iphone - Cocos2d - 如何让单个粒子跟随层,而不是发射器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:22 25 4
gpt4 key购买 nike

我有一个 CCSprite 和一个 CCParticleSystemQuad,它们都是 CCLayer 的子项。在我的更新方法中,我将发射器的位置设置为 Sprite 的位置,因此它会跟踪 Sprite 。正如您预期的那样,烟雾从 sprite 的底部掉落,即使您四处移动 sprite,烟雾似乎也是背景层的一部分。

如果我匹配他们的旋转,问题就来了。现在,例如,如果我的 sprite 来回摇摆,烟雾会呈弧形摆动并似乎附着在 sprite 上。

我怎样才能让烟雾沿着父图层直线继续而不是随着 Sprite 旋转?当我移动 sprite 时,它​​们不随 sprite 移动,那么为什么它们会随 sprite 一起旋转?

编辑:添加代码...

- (id)init
{
if (!(self = [super init])) return nil;

self.isTouchEnabled = YES;

CGSize screenSize = [[CCDirector sharedDirector] winSize];

sprite = [CCSprite spriteWithFile:@"Icon.png"]; // declared in the header
[sprite setPosition:ccp(screenSize.width/2, screenSize.height/2)];
[self addChild:sprite];

id repeatAction = [CCRepeatForever actionWithAction:
[CCSequence actions:
[CCRotateTo actionWithDuration:0.3f angle:-45.0f],
[CCRotateTo actionWithDuration:0.6f angle:45.0f],
[CCRotateTo actionWithDuration:0.3f angle:0.0f],
nil]];
[sprite runAction:repeatAction];

emitter = [[CCParticleSystemQuad particleWithFile:@"jetpack_smoke.plist"] retain]; // declared in the header - the particle was made in Particle Designer
[emitter setPosition:sprite.position];
[emitter setPositionType:kCCPositionTypeFree]; // ...Free and ...Relative seem to behave the same.
[emitter stopSystem];
[self addChild:emitter];

[self scheduleUpdate];

return self;
}


- (void)update:(ccTime)dt
{
[emitter setPosition:ccp(sprite.position.x, sprite.position.y-sprite.contentSize.height/2)];
[emitter setRotation:[sprite rotation]]; // if you comment this out, it works as expected.
}

// there are touches methods to just move the sprite to where the touch is, and to start the emitter when touches began and to stop it when touches end.

最佳答案

我在另一个网站上找到了答案 - www.raywenderlich.com

我不知道为什么会这样,但似乎 CCParticleSystems 不喜欢在您四处移动时旋转它们。他们不介意改变他们的角度属性。实际上,在某些情况下您可能需要这种行为。

无论如何,我做了一个调整发射器角度属性的方法,它工作正常。它获取您的触摸位置并将 y 分量缩放为角度。

- (void)updateAngle:(CGPoint)location
{
float width = [[CCDirector sharedDirector] winSize].width;
float angle = location.x / width * 360.0f;
CCLOG(@"angle = %1.1f", angle);
[smoke_emitter setAngle:angle]; // I added both smoke and fire!
[fire_emitter setAngle:angle];
// [emitter setRotation:angle]; // this doesn't work
}

关于iphone - Cocos2d - 如何让单个粒子跟随层,而不是发射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com