Swift - Sprite Kit Physics - Переключить Dynami c в true и false - PullRequest
1 голос
/ 18 января 2020

У меня есть простое приложение, в котором я динамически создаю фигуру. Эта форма имеет физику, но начинается с того, что ее динамика имеет значение 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 (я отлаживал, что он срабатывает), но форма не становится Dynami c и начать использовать гравитацию ... Кто-нибудь знает, что мне не хватает ???

Я вызываю MyTapGesture из моего интерфейса Controller ... Он подключен так

let gameScene = GameScene();

@IBOutlet weak var spriteTapGestures: WKTapGestureRecognizer!

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

В MyTapGesture я также пробовал печатать (точка), и он выводит следующее:

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

Это заставляет меня думать, что это должно работать, и я вызываю правильную ссылку на класс это привязано к объекту. Но это не работает. Если я вызываю MyTapGesture () в обновлении fun c класса SpriteKit, где была создана моя точка

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

Это работает, и динамика обновляется! ... так что по какой-то причине мой жест касания должен вызывать неправильную ссылку или что-то в этом роде ??? Так запутано, что отладка показывает правильные данные, напечатанные для созданной мной фигуры ...

1 Ответ

0 голосов
/ 23 января 2020

Чтобы решить эту проблему - я понял, что моя переменная gameScene в контроллере интерфейса не имела правильной ссылки. Так что я создал его как nil:

var gameScene : GameScene?;

И затем назначил переменную в контроллерах интерфейса пробуждения удовольствия c

if let scene = GameScene(fileNamed: "GameScene") {
    gameScene = scene
}
...