如何获得旋转CCNode的角坐标?

时间:2012-08-16 13:18:17

标签: objective-c ios cocos2d-iphone

我有一个具有一定轮换的CCNode。为简单起见,可以说它旋转了45度,尺寸为100 * 100,位置为200,200。

Example

我正在寻找此图像上的4个角坐标(标记为绿色)。我可以在框架中使用任何方法,或者我需要使用trigonomery手动执行此操作吗?在那种情况下,我怎么能以最简单的方式做到这一点?

最好的办法是,如果我能在CCNode类中创建一个方法,那么它很容易访问。

2 个答案:

答案 0 :(得分:1)

试试这个:

CGFloat angle = node.rotation * M_PI / 180;
CGRect frame = CGRectMake(node.position.x, node.position.y, node.contentSize.width, node.contentSize.height);

CGPoint ip0 = CGPointMake(frame.origin.x,frame.origin.y);
CGPoint ip1 = CGPointMake(frame.origin.x +frame.size.width, 0);
CGPoint ip2 = CGPointMake(0,frame.origin.y +frame.size.height);
CGPoint ip3 = CGPointMake(frame.origin.x +frame.size.width,frame.origin.y +frame.size.height);

ip0 = CGPointApplyAffineTransform(ip0, CGAffineTransformMakeRotation(angle));
ip1 = CGPointApplyAffineTransform(ip1, CGAffineTransformMakeRotation(angle));
ip2 = CGPointApplyAffineTransform(ip2, CGAffineTransformMakeRotation(angle));
ip3 = CGPointApplyAffineTransform(ip3, CGAffineTransformMakeRotation(angle));

答案 1 :(得分:1)

CCNode.h:

/** Converts a Point to world space coordinates. The result is in Points.
 @since v0.7.1
 */
- (CGPoint)convertToWorldSpace:(CGPoint)nodePoint;

/** Converts a Point to node (local) space coordinates. The result is in Points.
 @since v0.7.1
 */
- (CGPoint)convertToNodeSpace:(CGPoint)worldPoint;

示例:

// top right corner of your node 
CGPoint topRight = ccp(node.contentSize.width, node.contentSize.height);
// same point in world coordinates
CGPoint topRightWorld = [node convertToWorldSpace:topRight];