Swift-Sprite Kit Physics-将Dynamic切换为true和false

问题描述 投票:1回答:1

我有一个简单的应用,可以动态创建形状。这种形状具有物理性质,但首先将其动力学设置为false(按预期)。

var dot = SKSpriteNode(imageNamed: "ShapeDot.png");

override func sceneDidLoad() {
    dot.name = "MyShapeDot";
    dot.size = CGSize(width: 10,height: 10);
    dot.position = CGPoint(x: 0, y: 0);
    dot.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(dot.size.width/2))
    dot.physicsBody?.isDynamic = false;
    dot.physicsBody?.allowsRotation = false;
    dot.physicsBody?.pinned = false;
    dot.physicsBody?.affectedByGravity = true;
    //add to spritekit scene     
    self.addChild(dot)
}

形状已成功添加到.sks和控制器(我在屏幕上看到了)。然后在轻击手势上,我正在调用一个函数以打开物理精灵节点的动力学。

func MyTapGesture(){
   dot.physicsBody?.isDynamic = true;
}

正在调用MyTapGesture(我调试它会触发),但是形状不会变得动态并开始使用重力……有人知道我所缺少的吗?

我正在从我的interfaceController调用MyTapGesture ...它已经连接好了

let gameScene = GameScene();

@IBOutlet weak var spriteTapGestures: WKTapGestureRecognizer!

@IBAction func onSpriteTap(_ sender: Any) {
    NSLog("tap")    
    gameScene. MyTapGesture()
}

在MyTapGesture中,我也尝试了print(dot),它输出以下内容:

name:'MyShapeDot' texture:[<SKTexture> 'ShapeDot.png' (128 x 128)] position:{0, 0} scale:{1.00, 1.00} size:{10, 10} anchor:{0.5, 0.5} rotation:0.00

这使我相信它应该起作用,并且我正在调用附加到该对象的类的正确引用。但这是行不通的。如果我在创建我的点的SpriteKit类的更新函数中调用MyTapGesture(),

override func update(_ currentTime: TimeInterval) {
   MyTapGesture()
}

它有效,并且动态更新! ...由于某种原因,我的点击手势一定是在调用错误的参考或其他内容???如此困惑,因为调试显示了针对我创建的形状打印的正确数据...

我有一个简单的应用,可以动态创建形状。这种形状具有物理性质,但首先将其动力学设置为false(按预期)。 var dot = SKSpriteNode(imageNamed:“ ShapeDot.png”); ...

swift swift5.1
1个回答
0
投票

为了解决这个问题,我意识到我的界面控制器中的gameScene var没有正确的引用。所以我将其实例化为nil:

© www.soinside.com 2019 - 2024. All rights reserved.