簡體   English   中英

有角度的CGRect

[英]CGRect with an angle

我有一條線,這是使用此代碼制作的精靈

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&y位置?

希望你們能幫助我。

提前致謝!

您可能應該查找CGRectApplyAffineTransformCGAffineTransformMakeRotation以及CGAffineTransformMakeTranslation的文檔。

很難知道我是否正確理解了您,但是當您說“ ...線的另一側的x&y位置”時,我假設您的意思是線的另一端點的坐標是什么。

如果是這樣,我相信您可能要尋找的實際公式是:

  1. {x1,y1} =您已經擁有的起點
  2. {x2,y2] =您要查找的點

    • x2 = x1 +(距離* cosA)
    • y2 = y1 +(距離* sinA)

但是,正如我之前提到的,我不確定這是否能滿足您的需求。 如果您實際上是在尋找Line.png邊界框另一側的頂點的點,那么也許您仍然可以使用該公式,但是將度數更改90,以確定相對於x&y的坐標偏移你已經知道了。

無論如何,我希望至少能幫助您找到有用的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM