2013-10-15 19 views
16

Ben bir oyun yapıyorum ve bir sprite düğümünü dönen ile sorun yaşıyorum, Bu aldığım kodudur; Çevirmek için ne eklemek zorundayım, 45 derece diyelim?Sprite kitindeki hareketli grafik nasıl döndürülebilir?

SKSpriteNode *platform = [SKSpriteNode spriteNodeWithImageNamed:@"YellowPlatform.png"]; 
platform.position = CGPointMake(CGRectGetMidX(self.frame), -200+CGRectGetMidY(self.frame)); 
platform.size = CGSizeMake(180, 10); 
platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:platform.size]; 
platform.physicsBody.dynamic = NO; 
[self addChild:platform]; 
+3

It çok basit bir şekilde, sadece aşağıdaki kod satırını ekleyin: platform.zRotation = M_PI/4.0; bye – Vince

cevap

18

Döndürme için SKAction'ı yapın ve bu eylemi düğümde çalıştırın. örneğin:

//M_PI/4.0 is 45 degrees, you can make duration different from 0 if you want to show the rotation, if it is 0 it will rotate instantly 
SKAction *rotation = [SKAction rotateByAngle: M_PI/4.0 duration:0]; 
//and just run the action 
[yourNode runAction: rotation]; 
59

Sadece kullanarak eylemler olmadan bunu:

sprite.zRotation = M_PI/4.0f; 
+2

Bu kabul edilen cevap olmalıdır. Sadece bir hareketli grafiği döndürmek için sıfır süre ile bir eylemi çalıştırmaya gerek yoktur. –

14

hızlı olacaktır önceden tanımlanmış değerinin kullanılması: math.h

sprite.zRotation = M_PI_4; 

Bunlar önceden tanımlanmış sabitleri olarak mevcuttur değişmezleri ve M_PI makrosu/gibi değerlerin gerçek işlemi azaltmak için kullanılabilir 4.0

+1

Anlamsız. Aynı derlenmiş kodla sonuçlanacak ve aynı zamanda (fark, ölçülemeyecek) olacaktır. Bunu söyledikten sonra, 'M_PI_4' kullanmamak için bir sebep yok. – trojanfoe

+0

Oh Bunu temizlediğiniz için teşekkürler. M_PI/4'ün M_PI_4 ile aynı değeri yansıtması için önceden derleneceğini bilmiyordum. – ZeMoon

14
sprite.zRotation = M_PI_4; 

ve

[sprite runAction:[SKAction rotateByAngle:M_PI_4 duration:0]]; 

aynı değildir. süresi 0 olsa bile değişiklik Canlandıracağımız SKAction çalışan

çok kısa bir zaman ters yapacağız. zRotation'ı değiştirmek yeni rotasyonda gösterecektir.

neden bu önemlidir: Üzerinde yeni hareketli çizgi eklerseniz [SKAction rotateByAngle:] görünümde olduğu gibi hareketli grafikte titreme/çirkinlik yaratacaktır.

sprite ekranda olduğunu ve zRotation rotatebyAngle kadar güzel olmayacaktır değişen döndürmek istiyorsanız: hatta 0 süresi. İstersen

sprite.zRotation = CGFloat(Double.pi/4) 

ya: Swift 2'de

+1

Bu önemli bir ayrımdır. – JaredH

3

Benimkini döndürmek lazım yolu bir sonraki kullanabilirsiniz SWIFT 3/SWIFT 4 sürümü için

   sprite.zRotation = CGFloat(M_PI/2.0) //90 degrees 
       sprite.zRotation = CGFloat(M_PI/4.0) //45 degrees 
2
//rotates player node 90 degrees 
player.zRotation = CGFloat(M_PI_2)*3; 
//rotates 180 degrees 
player.zRotation = CGFloat(M_PI_2)*2; 
//rotates 270 degrees 
player.zRotation = CGFloat(M_PI_2)*1; 
//rotates 360 degrees (where it was originally) 
player.zRotation = CGFloat(M_PI_2)*4; 
//rotates 315 degrees 
player.zRotation = (CGFloat(M_PI_2)*1)/2; 
and so on... 
+0

cevabınıza daha fazla ayrıntı ekleyin –

3

oldu eylemler:

let rotateAction = SKAction.rotate(toAngle: CGFloat(Double.pi/4), duration: 0) 
sprite.run(rotateAction) 
İlgili konular