2011-06-07 12 views
10

Sahip olduğum sorun, çapa noktasını değiştirdiğimde, otomatik olarak geçerli bağlantı noktasına göre döner. Ve bunun olmasını istemiyorum. Ben bağlantı noktasına sahip bir hareketli grafik oluşturmak Cocos2D Döndürme ve Tutturma noktası

  1. ardından

    adım (0.5, 0,5)

  2. 90 dereceye kadar (0,1)
  3. DöndürülmemiĢ hareketli grafik bağlantı noktasını değiştirildi. (CCRotateBy'yi kullanma. Sprite doğru bir şekilde döndürüldüğünde)
  4. Bağlantı noktasını (0,5, 0,5) olarak değiştirin (Şu ana kadar her şey yolunda. Ve bu benim tutmamız gereken konum). Şimdi sprite.rotation ben çapa noktasını değiştirdi 90.
  5. olan (1,0) (Sprite otomatik verilen sabitleme noktasına göre 90 dereceye kadar döner - Ben bu davranışı durdurmak için gereken)

mi dokuyı gerçekte döndürmeden (yani, dokuyu halihazırdaki haliyle - gerçek dokuyu 90 dereceye döndürmek için) ve ankraj noktasını veya pozisyonu 4. adımla birlikte değiştirmeden, sprite dönüşünü sıfırlamak için herhangi bir yol var. Ben noktadan devam edebilirim.

+0

bazı kod sonrası olabilir ... – Anish

cevap

9

Lukman'ın dediği gibi, çapa noktası her zaman rotasyonu etkileyecektir, çünkü hedefiniz, sprite pozisyonunu rotasyondan farklı bir tutturma noktası ile belirleyebilmektir. Bu, grafiğinizin ebeveyni olarak boş bir CCNode oluşturmanızı öneririm.Bu şekilde, sprite noktasındaki değişikliği telafi etmek için sprite üzerindeki bu ana düğüme göre bir konum belirleyebilir ve ardından ankraj noktasını hareketli grafik üzerinde döndürmek için kullanabilirsiniz, ancak ana düğümünü konum için kullanın.

5

anchorPointposition ve rotation'u etkiler. Onlardan birini etkilemesini durduramazsın.

Ama dönüşü etkilemesini anchorPoint önlemek istiyorsanız bu yana, soru okumasını, ben neden örneğin, istediğiniz çünkü ccp(1, 0) olmasını ayarlarken, anchorPoint pozisyon için ise değiştirmesini burada tahmin ediyorum sprite alt sağ köşesine, sprite merkezi yerine, konumu ayarladığınız yerde olmaktır.

Benim önerim: anchorPoint'u hiç değiştirmeyin, ancak hareketli konumu ayarladığınız yolu değiştirin. Sen konumunu ayarlamak için bu küçük işlevi kullanabilirsiniz: yerine sprite.position = ccp(200, 300) arasında, konumlandırma yaparken size anchorPoint kullanmak istedi varsayarak, Şimdi

CGPoint adjustedPosition(const CGPoint position, const CGPoint anchor, const CGSize size) { 
    return CGPointMake(position.x - (anchor.x - 0.5) * size.width, position.y - (anchor.y - 0.5) * size.height); 
} 

(1,0), sadece yapmanız gereken:

sprite.position = adjustedPosition(ccp(200, 300), ccp(1.0, 0.0), sprite.contentSize); 

İsterseniz, mantığı daha sonra matematik arkasına kaydederim. Aksi takdirde, bu yardımcı olacaktır umarım.

1

Belki de doğru koordinatlarda sprite için bir çapa yüklemenize yardımcı olacaktır.

 
void SetAnchorPosition(CCSprite * sprite, const CCPoint & point) 
{ 
    static CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 

    double x = ((double)1/(double)winSize.width)*(double)point.x; 
    double y = ((double)1/(double)winSize.height)*(double)point.y; 

    sprite->setAnchorPoint(ccp(x,y)); 
    sprite->setPosition(point); 
} 
0

Bir güçlü alternatif olarak touchEnded yönteminde bir satır ekleyebilirsiniz:

-(void)touchEnded:(UITouch *)touch withEvent:(UIEvent *)event{ 

    _yourSprite.rotation = 90; 

}