2014-01-16 13 views
2

我在這有麻煩,因爲坦白說,我從來沒有去電腦學校或任何東西,我想我病了,我的大腦處於滯後的工作哈哈。一個精靈的控制旋轉,因此始終旨在另一個

所以我用蘋果雪碧套件,但總的原則是比這更開放。我有一個或多或少位於屏幕中心的小精靈。我們稱之爲bucketSprite。然後我有另一個精靈,那是一個噴水的軟管,我們稱之爲軟管精靈。

用戶可以拖動hoseSprite用他們的手指在屏幕上。我想更改hoseSprite的zRotation,以便無論它在哪裏,它的一個特定角落(軟管的末端)始終指向bucketSprite。用另一種方式說明,一個特定的角落應該始終是hoseSprite與bucketSprite的最近點。

我該如何計算?我覺得如果我計算bucketSprite.position的CGPoints和hoseSprite的兩個對角,我應該可以將它們全部排成一行,但我不認爲數學會是什麼。思考?

回答

1

你可以使用矢量數學來解決這個問題。

您有剷鬥B的位置,你有軟管ħ

   h 
      . 
     . . 
    v3 . .  
    .  . v2 
    . . . 
. phi . . 
b .........x...... 
     v1 

的矢量V3 = V1 + V2(矢量相加)的位置和方向。這是一個方向矢量。

 _____ 
v1 = x - b 
    _____ 
v2 = h - x 

角度披您可以用下面的公式中的點積確定:

     __   __ 
      (v1 dot v3) where v3 is the inverse of v3 
cos(phi) = ----------- 
        __ 
      |v1| * |v3| where |v1|, |v3| are the magnitudes of v1 and v3 

這個角度可以用來在適當的方式旋轉你的精靈。

如果您在3D空間中,操作是等效的。你只需要 向向量引入第三個元素。

1

我從未使用過蘋果雪碧套件,但由於您沒有收到任何答案,我可以利用基於2D精靈的一般原則,它刺傷。你想要做的第一件事就是計算2個精靈之間的位移:

dx = BucketSprite.x - HoseSprite.x; 
dy = BucketSprite.y - HoseSprite.y; 

然後計算你需要做一些三角學的角度(反正切函數,稱爲atan通常)

HoseSprite.angle = atan(dy/dx); 

如果可用,您需要使用atan2(dy,dx)函數,因爲它會自動確定0-360度的適當角度。只使用常規的atan只能在0-180度的範圍內工作。這只是一般的想法,我將把實現的細節和確切的語法留給你。 zRotation可能是您的案例中的angle

注:確保angle比賽由三角函數,即它們都是要麼以弧度或度返回單位。

相關問題