CGRect有一个角度

时间:2012-06-27 15:41:49

标签: ios cocos2d-iphone

我有一行,这是使用此代码制作的精灵

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

希望你们能帮助我。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您应该查找CGRectApplyAffineTransformCGAffineTransformMakeRotation以及可能CGAffineTransformMakeTranslation的文档。

答案 1 :(得分:0)

我很难知道我是否理解正确,但是当你说“...线的另一边的另一个x& y位置”时,我假设你的意思是什么是坐标线的相反端点。

如果是这样,我相信您可能正在寻找的实际公式是:

  1. {x1,y1} =你已经拥有的起点
  2. {x2,y2] =点你要找

    • x2 = x1 +(距离* cosA)
    • y2 = y1 +(距离* sinA)
  3. 但正如我前面提到的,我有点不确定这是否会给你你所需要的。如果您实际上正在寻找Line.png的边界框另一侧顶点的点,那么也许您仍然可以使用该公式,但将度数更改为90以确定偏离x&的坐标。你已经知道了。

    无论如何,我希望至少可以帮助你找到一个有用的方向。