swift - Swift - Sprite Kit 物理 - 将动态切换为真假
问题描述
我有一个简单的应用程序,我正在动态创建一个形状。这个形状有物理特性,但一开始它的动力学设置为假(如预期的那样)。
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()
}
它有效并且动态更新!...所以出于某种原因,我的点击手势一定是调用了错误的引用或什么???很困惑,因为调试显示为我创建的形状打印了正确的数据......
解决方案
为了解决这个问题 - 我意识到我的界面控制器中的 gameScene 变量没有正确的参考。所以我将它实例化为 nil:
var gameScene : GameScene?;
然后在接口控制器awake func中分配变量
if let scene = GameScene(fileNamed: "GameScene") {
gameScene = scene
}
推荐阅读
- lucene - 对子类的全文搜索返回 java.lang.illegalArgumentException:给定类的全文索引过多:客户
- python - 使用 pymongo 获取带有排序和限制的请求结果
- microsoft-graph-api - Microsoft Graph:在驱动器上搜索 DriveItems 会返回所有 DriveItems
- c# - 即使对于没有帖子的标签,也可以按标签计算帖子
- excel - 保存文件时忽略斜线
- php - Vagrant 虚拟主机/共享文件夹无法访问
- java - 将 Jackson 注释添加到招摇生成的类中
- jquery - 使用 jquery 循环遍历表值以进行数据库更新
- security - Thorntail 基本认证
- view - WheelPicker OnwheelChangeListener 返回 null onpause