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

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

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

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

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

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

Спасибо!


person Z3lda    schedule 27.02.2015    source источник
comment
Пожалуйста, добавьте журнал ошибок и где и сколько раз вы вызываете этот код.   -  person    schedule 28.02.2015


Ответы (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;
}
person Patrick Collins    schedule 03.03.2015

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

// _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 при сбое вашего приложения?

person bio    schedule 04.01.2016