Basit bir uygulama yapmaya çalışıyorum; ekrana dokunduğunuzda bir kutu yüzer konumdan yerçekiminden etkilenir. Kutuyu havada süzülmek için bir yol bulamıyorum.SceneKit'te anti-gravite fiziği
Bu kod burada yarım sorunu halleder:
boxNode.physicsBody = [SCNPhysicsBody dynamicBody];
Bu havanın dışarı düşmesi ve Oluşturduğum bir yere vurmak için kutuyu neden olur. SCNPhysicsBody'de bunun tersini yapacak bir şey var mı? Söyle, belki, nesnelerin yüzmesine veya sadece bir tavana doğru hareket etmesine neden olur mu?
- (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];
}
}
süre döngü olsa çalışmıyor neden emin değilim:
Ayrıca, bu kodu yazdım. MyBool'un değiştirildiğini ve boxNode'un fiziğini değiştirdiğini algılayacağını düşünüyordum, ama değil.
GameViewController.m
teşekkür ederiz! Bu kesinlikle yardımcı olur. myScene, handleSingleTap öğesinden erişilemez: myScene, viewDidLoad içinde bildirilmiş olsa da. Başka bir yere bildirebilir miyim? Üzgünüm, oldukça yeni. –Ah evet, üzgünüm, sadece 'myScene' bir örnek değişken olarak zaten bildirildiğini varsaydım. Yukarıdakileri günceller ... kod snippet'im zaten biraz çalışma gerektiriyordu. – lock
Not: Düzenlenen sürümde 'myScene' sınıf arabirim tanımında bir örnek değişkeni olarak bildiriyoruz. Daha sonra 'viewDidLoad' yönteminde sahneyi bu değişkene atayarak onu sınıftaki tüm işlevler (ve diğer sınıflar) için erişilebilir hale getiririz. FWIW, eğer yeni başlamış olsaydım muhtemelen Swift'e giderdim. – lock