我正在尝试在运行时移动SKFieldNode(radialGravity):
let movingField = SKFieldNode.radialGravityField(
movingField.position = location //location is a touch position
addChild(movingField)
一旦命令字段节点改变位置,它就会崩溃。我将字段节点放在didMoveToView的静态位置没有问题。
我猜测SKFieldNodes只需要留在原地,但也许是一个解决方案。
主要思想是将径向场附加到精灵(附有物理实体),以便它们具有吸引/排斥相互作用。我意识到这可以通过更加手动的方式完成,但我试图利用SpriteKit中可用的物理。
谢谢!
答案 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会显示哪一行代码?