Sprite kit SpriteKit SKFieldNode:为什么可以';我不能在运行时移动字段吗?
我试图在运行时移动SKFieldNode(radialGravity):Sprite kit SpriteKit SKFieldNode:为什么可以';我不能在运行时移动字段吗?,sprite-kit,skfieldnode,Sprite Kit,Skfieldnode,我试图在运行时移动SKFieldNode(radialGravity): let movingField = SKFieldNode.radialGravityField( movingField.position = location //location is a touch position addChild(movingField) 只要我命令field节点改变位置,它就会崩溃。我可以在didMoveToView中将字段节点放置在静态位置 我猜SKFieldNodes必须保持在原位,
let movingField = SKFieldNode.radialGravityField(
movingField.position = location //location is a touch position
addChild(movingField)
只要我命令field节点改变位置,它就会崩溃。我可以在didMoveToView中将字段节点放置在静态位置
我猜SKFieldNodes必须保持在原位,但也许有一个解决方案
其主要思想是将径向场附加到精灵上(精灵上连接有物理体),使其具有吸引/排斥相互作用。我意识到这可以通过更手动的方法来实现,但我试图利用SpriteKit中可用的物理特性
谢谢 通过使字段节点移动以跟踪触摸事件,我可以轻松地移动字段节点。很好 游戏场景的内部
-(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显示哪行代码?请添加错误日志以及调用此代码的位置和次数。