CGRect изменяется с CCSprite Rotation? - PullRequest
0 голосов
/ 28 декабря 2011

Я пытаюсь масштабировать и вращать CCSprite, используя следующие методы

[rectangleSprite setRotation:touch1.y];

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

Но когда я масштабирую или поворачиваю спрайт, его CGRect расширяется, чтобы покрыть всю повернутую область, и обнаружение столкновений через CGRectIntersectsRect не работает. после долгих поисков я наткнулся на следующие решения, но, похоже, они не работают

как проверить столкновение с повернутым 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 Ответ

0 голосов
/ 29 декабря 2011

Вы всегда можете использовать одну из библиотек физики, поставляемых с cocos2d, для обнаружения столкновений вместо того, чтобы использовать собственное обнаружение столкновений. У вас просто есть физические тела, которые следуют за местоположением и вращением спрайта в функции обновления, а не наоборот, поэтому физический движок не перемещает ваши спрайты за вас.

...