CGRect 随 CCSprite 旋转而变化?

Posted

技术标签:

【中文标题】CGRect 随 CCSprite 旋转而变化?【英文标题】:CGRect changes with CCSprite Rotation? 【发布时间】:2011-12-28 10:43:30 【问题描述】:

我正在尝试使用以下方法缩放和旋转 CCSprite

[rectangleSprite setRotation:touch1.y];

rectangleSprite.scaleX=(touch1.x-touch2.x)/100;
rectangleSprite.scaleY=(touch1.y-touch2.y)/100;

但是当我缩放或旋转精灵时,它的 CGRect 会扩展以覆盖整个旋转区域,并且通过 CGRectIntersectsRect 进行的碰撞检测不起作用。经过大量搜索后,我遇到了以下这样的解决方案,但它们似乎不起作用

how to check for collision with rotated CGRect?

旋转后,我如何应用 CGRectApplyAffineTransform 来根据旋转获得新的矩形,或者还有其他可能的方法吗? 我正在以下列方式应用变换,但我得到的矩形具有负原值..我可能做错了什么?

CGAffineTransform affine;

//  add a rotate
affine = CGAffineTransformMakeRotation(-CC_DEGREES_TO_RADIANS(angle));


CGRect start =[rectangleSprite boundingBox];
NSLog(@"cg rect %f %f",start.size.height ,start.size.width);

CGRect  newRect = CGRectApplyAffineTransform(start, affine);

NSLog(@"cg rect %f %f",rct.origin.x,rct.origin.y);

【问题讨论】:

【参考方案1】:

您始终可以利用与 cocos2d 打包的物理库之一为您进行碰撞检测,而不是滚动您自己的碰撞检测。您只需让物理实体在更新函数中跟随您的精灵位置和旋转,而不是相反,因此物理引擎不会为您移动您的精灵。

【讨论】:

是的,在 Ray Wenderlich 优秀教程的帮助下,我决定使用 Box2d 进行碰撞检测。谢谢 Ray 的网站很棒!网络上一些最好的教程

以上是关于CGRect 随 CCSprite 旋转而变化?的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 旋转 + 中心变化导致图像爆炸

UINavigationBar 背景图片不随旋转而改变

点在旋转的 CGRect 内

底部随输入法高度变化而变化的控件SoftLinearLayout

WPF的窗口中的所有内容随窗口大小变化而同步变化

如何实现控件随对话框大小变化而自动调整大小和位置