SpriteKit SKFieldNode: почему я не могу переместить поле во время выполнения?

Я пытаюсь переместить SKFieldNode (radialGravity) во время выполнения:

let movingField = SKFieldNode.radialGravityField(
movingField.position = location  //location is a touch position
addChild(movingField)

Он падает, как только я приказываю полевому узлу сменить положение. У меня нет проблем с размещением узла поля в статической позиции на didMoveToView.

Я предполагаю, что узлы SKFieldNode просто должны оставаться на месте, но, возможно, есть решение.

Основная идея состоит в том, чтобы прикрепить радиальные поля к спрайтам (к которым прикреплены физические тела), чтобы они имели взаимодействия притяжения / отталкивания. Я понимаю, что это можно сделать с помощью более ручного подхода, но я пытался воспользоваться преимуществами физики, доступной в SpriteKit.

Спасибо!

2 ответа

Я могу легко перемещать узлы поля, заставляя их перемещаться в соответствии с сенсорными событиями. Работает отлично.

Внутри GameScene.m

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */

    self.backgroundColor = SKColorWithRGB(0, 0, 0);

    // This uses SKTUtils to load my simple SKEmitter
    SKEmitterNode *nd = [SKEmitterNode skt_emitterNamed:@"bokeh"];
    nd.particleZPosition += 100;
    nd.position = CGPointMake(self.size.width/2,self.size.height/2);
    nd.fieldBitMask = 1;

    field = [SKFieldNode radialGravityField];

    field.position = CGPointMake(self.size.width/2,self.size.height/2);;
    field.minimumRadius = 50;
    field.categoryBitMask = 1;

    [self addChild:field];
    [self addChild:nd];

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint t = [touch locationInNode:self];
    field.position = t;
}

В моем приложении у меня очень похожий подход, как у вас. Я могу установить новые позиции узлов поля просто отлично. Вот выдержка:

// _targetPos is the touch location in UIView coordinates
CGPoint pos = [k.world convertToScenePoint:_targetPos]; // convert to scene coordinates
self.gravityField.position = pos;
self.dragField.position = pos;

Я могу только предположить, что упомянутый вами сбой произошел где-то еще в вашем коде. Какую строку кода показывает Xcode при сбое вашего приложения?

Другие вопросы по тегам