Cocos2D - частицы следуют за эмиттером вместо того, чтобы оставаться на том месте, где они были выпущены.

В настоящее время в cocos2D у меня есть очень простой эмиттер частиц, инициализированный следующим образом:

    turnEmitter = [[CCParticleFlower alloc] init];
    turnEmitter.texture = [[CCTextureCache sharedTextureCache] addImage:@"Pocket.png"];
    [self addChild:turnEmitter z:1];
    turnEmitter.scale = 0.7f;
    turnEmitter.positionType = kCCPositionTypeFree;

Он просто добавляется прямо в слой игрового процесса.

Этот эмиттер следующим образом следует за спрайтом по экрану (происходит в методе обновления):

    turnEmitter.position = turnEmblem.position;

Теперь проблема в том, что хвост частиц, оставшихся позади эмиттера, движется вместе с эмиттером, вместо того, чтобы выпущенные частицы просто оставались в том положении, в котором они были выпущены, что дает действительно странный и глупый эффект.

Я хочу, чтобы частицы вообще не следовали за эмиттером после того, как они были созданы, к сожалению, мне не удалось найти способ сделать это.

Как видно из приведенного выше кода, я уже поискал и нашел людей, которые предлагают изменить свойство эмиттера positionType, хотя я перепробовал все возможности, и это не решило проблему.

Есть ли у кого-нибудь идеи относительно того, что это может быть?


person CodingBeagle    schedule 10.04.2012    source источник
comment
что дает действительно странный и глупый эффект lol   -  person Matisse VerDuyn    schedule 10.04.2012
comment
Вы на правильном пути, изменение positionType должно решить вашу проблему, по крайней мере, один из positionType должен. Вы уверены, что перепробовали все варианты и протестировали каждый из них?   -  person LearnCocos2D    schedule 10.04.2012
comment
Привет :) Да, я почти уверен, что попробовал использовать все возможные варианты. К сожалению, я не могу попробовать это сейчас, но сделаю это позже сегодня. Я отчитаюсь с точными свойствами, которые я пробовал тогда :) Спасибо, что нашли время, чтобы помочь!   -  person CodingBeagle    schedule 11.04.2012
comment
Да, я только что нашел все 3 возможных типа свойств в исходном коде Cocos2D: kCCPositionTypeFree, kCCPositionTypeRelative и kCCPositionTypeGrouped. TypeFree и TypeRelative не оказали никакого влияния, в то время как TypeGrouped просто держал частицы сгруппированными вокруг эмиттера вместо того, чтобы распространять их. Теперь с TypeFree и TypeGrouped порожденные частицы будут как бы оставаться позади эмиттера при его движении, но они все равно будут перемещены относительно эмиттера, поэтому похоже, что хвост следует за ним странным образом.   -  person CodingBeagle    schedule 11.04.2012
comment
в то время как TypeFree действительно кажется, что он должен сделать частицы полностью независимыми от этого эмиттера, чего явно не происходит. Я не совсем уверен, что с этим делать, и какое-то время застрял на этом.   -  person CodingBeagle    schedule 11.04.2012
comment
Я тоже столкнулся с этой проблемой, я некоторое время покопался в исходном коде, кажется, что это связано с масштабом, если частица масштабируется, код обновления позиции должен учитывать масштаб, в противном случае он будет казаться связанным.   -  person ocean    schedule 24.12.2012


Ответы (1)


Вы можете попробовать изменить "emitterMode" на "kCCPositionTypeFree". У меня была аналогичная проблема, когда у меня был эмиттер как дочерний элемент CCNode. CCNode вращался, а частицы и эмиттер - нет. Точно так же это выглядело глупо, потому что иллюзия вращения была разрушена. Мне нужно установить на эмиттере следующее:

emitter.emitterMode = kCCPositionTypeRelative;
emitter.positionType = kCCPositionTypeRelative;
person ezekielDFM    schedule 07.06.2012
comment
emittermode здесь не причем. Он должен быть установлен либо в режим гравитации, либо в режим радиуса. - person zeroliu; 28.07.2014