2012-06-27 105 views
0

我有一條線,這是在我的碰撞檢測代碼,使用此代碼的CGRect與角度

CGPoint diff = ccpSub(startLocation, endLocation); 
float rads = atan2f(diff.y, diff.x); 
float degs = -CC_RADIANS_TO_DEGREES(rads); 
float dist = ccpDistance(endLocation, startLocation); 
CCSprite *line = [CCSprite spriteWithFile:@"line.png"]; 
[line setAnchorPoint:ccp(0.0f, 0.5f)]; 
[line setPosition:endLocation]; 
[line setScaleX:dist/line.boundingBox.size.width]; 
[line setRotation: degs]; 

line.tag = 1; 
[_lines addObject:line]; 
[self addChild:line]; 

現在雪碧我使用下面的代碼來創建的CGRect:

 CGRect lineRect = CGRectMake(
     line.position.x - (line.contentSize.width/2), 
     line.position.y - (line.contentSize.height/2), 
     line.contentSize.width, 
     line.contentSize.height); 

這當然是錯誤的,因爲這條線是用一個角度製作的。

我想比較長方形,正方形精靈,這個矩形。 這個想法是一個角色在移動,玩家可以繪製一條線,如果角色擊中它的方向,它會反方向彈起。

我有角度,線的一側的x & y位置和線的長度。 如何獲得另一側的其他x &位置?

希望你們能幫助我。

在此先感謝!

+0

什麼是你想測試碰撞? 2線段?線段和矩形?線段和多邊形?請詳細說明。 –

+0

感謝您的回覆,追問更新: 我想比較長方形,正方形精靈,這個矩形。這個想法是一個角色在移動,玩家可以畫出一條線,如果角色擊中該線,則反方向彈跳。 – Falcko

回答

0

有點難以知道我是否正確理解了你,但是當你說「......其他x線的另一邊的位置」時,我假設你的意思是什麼是座標線的相反端點。

如果是這樣,我相信你可能會尋找實際的計算公式爲:

  1. {X1,Y1} =起點,你已經
  2. {x2,y2] =點你」再希望找到

    • X2 = X1 +(距離* COSA)
    • Y2 = Y1 +(距離*新浪網)

但正如我前面提到的,我有點不能確定這是否會給你你需要的到底是什麼。如果您實際上正在查找Line.png的邊界框的另一側的頂點,則可能仍然可以使用該公式,但將度數更改爲90以確定與x的座標偏移量x &你已經知道了。

無論如何,我希望這至少有助於把你一個有用的方向。

+0

我對我遲到的迴應表示歉意,離開了幾天。 你的配方是正確的!我已經在紙上測試過了。 但是我該如何檢查我的精靈(一個方形)是否已經擊中了這條線? CGRectMake只接受一組座標。 感謝您的幫助! – Falcko

+0

這是碰撞檢測最佳方法的一個很好的問題。我正在與那個人一起掙扎。這似乎是由您使用的對象類型決定的。我不是最好的人回答這個問題。我正在寫我自己的,因爲我似乎無法找到這個問題的全面解決方案。這裏你的問題是如何定位一個現有的點,距離和角度的x和y,我想我可以幫忙。儘管如此,我希望你在其他部分有幸運! – pedwards

+0

你是對的,你回答我的原始問題。我將開始一個關於碰撞的新問題。 再次感謝! – Falcko

0

您應該查閱關於CGRectApplyAffineTransformCGAffineTransformMakeRotation和可能CGAffineTransformMakeTranslation的文檔。