Im создает искровой эффект для бомбы, которая вращается и прокручивается по экрану с помощью SKEmitterNode. Я пришел к тому, что я не могу правильно позиционировать искровой эффект. Я могу заставить SKEmitterNode и spriteNode перемещаться по экрану вместе с искровым эффектом, расположенным в центре бомбы, в то время как бомбу вращается. Эффект, который я хочу достичь, - это искра, расположенная правильно в конце фитиля на бомбе, когда бомбу вращается.конкретное позиционирование SKEmitterNode от класса к основной сцене
Первая часть кода из myScene:
MCBomb *_multiUp = [MCBomb spriteNodeWithImageNamed:@"MultiShotPowerUp"];
[_mainLayer addChild:_multiUp];
// Create spark.
NSString *bombSparkPath = [[NSBundle mainBundle] pathForResource:@"BombSpark" ofType:@"sks"];
SKEmitterNode *_bombSpark = [NSKeyedUnarchiver unarchiveObjectWithFile:bombSparkPath];
_bombSpark.targetNode = _mainLayer;
[_mainLayer addChild:_bombSpark];
_multiUp.spark = _bombSpark;
Следующие два фрагмента кода являются из класса .m
-(void)updateSpark {
if (self.spark) {
self.spark.position = self.position;
}
и .h
@interface MCBomb : SKSpriteNode
@property (nonatomic) SKEmitterNode *spark;
-(void)updateSpark;
As скоро, когда я добавлю CGPointMake в микс, например self.spark.position = CGPointMake(0.9, 0.9);
Когда вызываемый spriteNode плавает по экрану, а SKEmitterNode появляется в нижнем левом углу, статическом.
Или, если я что-то вроде:
self.spark.position = CGPointMake (self.size.width +50 , self.size.height + 400);
SKEmitterNode статичен в своем новом положении и spriteNode плавает по экрану. Или, если я это сделать:
self.spark.position = CGPointMake (self.size.width +50 , self.size.height + 400);
self.position = self.spark.position;
я как spriteNode и EmitterNode статическими в там новом положении.
Как вы можете видеть, В моем расстройстве я сжимаю соломинку! Позиционирование является экстремальным только для аффекта, я все еще участвую и могу сделать некоторые советы о том, как получить правильный аффект.
Ниже приведен полный класс, пожалуйста, см новый комментарий:
-(void)spawnMultiShotPowerUp {
// Setting up Texture Atlas.
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"Parts"];
MCBomb *_multiUp = [MCBomb spriteNodeWithImageNamed:@"MultiShotPowerUp"];
_multiUp.name = @"multiUp";
_multiUp.position = CGPointMake(-_multiUp.size.width, randomInRange(150, self.size.height -100));
_multiUp.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:16.0];
_multiUp.physicsBody.categoryBitMask = mCMultiUpCategory;
_multiUp.physicsBody.collisionBitMask = 0;
_multiUp.physicsBody.velocity = CGVectorMake(10, randomInRange(-40, 40));
_multiUp.physicsBody.angularVelocity = M_PI;
_multiUp.physicsBody.linearDamping = 0.0;
_multiUp.physicsBody.angularDamping = 0.0;
[_mainLayer addChild:_multiUp];
// Create spark.
NSString *bombSparkPath = [[NSBundle mainBundle] pathForResource:@"BombSpark" ofType:@"sks"];
SKEmitterNode *_bombSpark = [NSKeyedUnarchiver unarchiveObjectWithFile:bombSparkPath];
_bombSpark.targetNode = _mainLayer;
_bombSpark.position = CGPointMake(20, 0);
_multiUp.spark = _bombSpark;
[_multiUp addChild:_bombSpark];
}
Вы не должны редактировать ответ, чтобы развернуть свой вопрос или задать дополнительный вопрос.Если мой ответ предоставил ответ на ваш вопрос, проверьте его как правильное. Если вы хотите расширить свой вопрос, в пределах его первоначального объема, отредактируйте свой вопрос. Если у вас есть другой вопрос, вы должны задать другой вопрос, а не изменить его, чтобы включить его. – sangony
Отмечено, извинения. – Coxy
Эффект искра влияет на изменения, Искра теперь кружит бомбу, как луна вокруг земли! Я не могу разместить узел в правильном положении, когда бомба случайно попадает в сцену, если она движется вверх, расстояние между двумя узлами увеличивается, уменьшается и уменьшается, настолько, что узел бомбы уходит со дна страницы искры практически в точном правильном месте? Я редактировал свой оригинальный вопрос, добавив полный класс. Пожалуйста, объясните это странное поведение. – Coxy