2

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

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

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

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

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

谢谢!

4

2 回答 2

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;
}
于 2015-03-03T09:42:34.410 回答
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 会显示哪一行代码?

于 2016-01-04T15:20:30.953 回答