我有一个具有一定旋转的 CCNode。为了简单起见,假设它旋转了 45 度,大小为 100*100,位置为 200,200。
我正在寻找此图像上的 4 个角坐标(标记为绿色)。框架中是否有任何方法可以用于此操作,还是需要使用三角函数手动完成?在那种情况下,我该怎么做最简单的方法?
最好的事情是,如果我可以将其作为 CCNode 类中的一个方法,使其易于访问。
我有一个具有一定旋转的 CCNode。为了简单起见,假设它旋转了 45 度,大小为 100*100,位置为 200,200。
我正在寻找此图像上的 4 个角坐标(标记为绿色)。框架中是否有任何方法可以用于此操作,还是需要使用三角函数手动完成?在那种情况下,我该怎么做最简单的方法?
最好的事情是,如果我可以将其作为 CCNode 类中的一个方法,使其易于访问。
尝试这个:
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));
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];