私は画面をタップするとボックスが浮動から重力の影響を受けて切り替わる簡単なアプリケーションを作ろうとしています。私は箱を空中に浮かせる方法を見つけるように見えない。SceneKitの重力物理
ここにこのコードは、問題の半分の世話をする:
boxNode.physicsBody = [SCNPhysicsBody dynamicBody];
これは、空気の外にドロップすると、私が作成したフロアをヒットするボックスが発生します。 SCNPhysicsBodyにこれとは逆のことがありますか?おそらく、オブジェクトを浮かせるか、天井に向かって離れさせてしまうのだろうか?
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
if (myBool == false) {
myBool = true;
NSLog(@"true");
} else {
myBool = false;
NSLog(@"false");
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// touch recognizer
UITapGestureRecognizer *screenTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:screenTap];
// create box
SCNBox *myBox = [SCNBox boxWithWidth:1.0 height:1.0 length:1.0 chamferRadius:0.1];
SCNNode *boxNode = [SCNNode nodeWithGeometry:myBox];
boxNode.position = SCNVector3Make(0.0, 0.0, 4.0);
[myScene.rootNode addChildNode:boxNode];
while (myBool == true) {
boxNode.physicsBody = [SCNPhysicsBody dynamicBody];
}
}
whileループはしかし動作しない理由を私はよく分からない:
また、私はこのコードを書いています。私は、それがmyBoolが変更されてboxNodeの物理を変更することを検出すると思っていましたが、そうではありません。
ありがとうございます!これは間違いなく役立ちます。 mySceneはhandleSingleTapからアクセスできませんが、mySceneはviewDidLoadで宣言されています。他の場所に宣言することはできますか?申し訳ありません、ここでかなり新しいです。 –
ああ、申し訳ありませんが、インスタンス変数として既に宣言されているmySceneがあると仮定しました。上記を更新します...私のコードスニペットは、とにかく少しの作業が必要でした。 – lock
注:編集されたバージョンでは、クラスインタフェース定義のインスタンス変数として 'myScene'を宣言します。次に、 'viewDidLoad'メソッドでは、この変数にシーンを割り当てて、クラス内のすべての関数(および他のクラス)にアクセスできるようにします。 FWIW私がちょうど出発したら、私はおそらくすぐにスウィフトに行くだろう。 – lock