2012-06-27 106 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的文档。