SpriteKit SKFieldNode:为什么我不能在运行时移动字段?

时间:2015-02-27 04:58:34

标签: sprite-kit skfieldnode

我正在尝试在运行时移动SKFieldNode(radialGravity):

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

一旦命令字段节点改变位置,它就会崩溃。我将字段节点放在didMoveToView的静态位置没有问题。

我猜测SKFieldNodes只需要留在原地,但也许是一个解决方案。

主要思想是将径向场附加到精灵(附有物理实体),以便它们具有吸引/排斥相互作用。我意识到这可以通过更加手动的方式完成,但我试图利用SpriteKit中可用的物理。

谢谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

在我的应用程序中,我的方法与您非常相似。我可以很好地设置字段节点的新位置。这是一段摘录:

// _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会显示哪一行代码?