Размер и положение CCRenderTexture в Cocos2d-iphone - PullRequest
1 голос
/ 30 января 2012

Я пытался использовать CCRenderTexture для точного обнаружения столкновений пикселей, как описано в этом сообщении на форуме:

http://www.cocos2d -iphone.org / forum / topic / 18522 / page / 2

Код «как есть» работает, и я интегрировал его с моим проектом

Но у меня возникают проблемы с выполнением некоторых других обсуждаемых вещей: если я создаю renderTexture, чтобы быть любымразмер меньше размера экрана, обнаружение столкновений не работает должным образом - кажется, что столкновения проявляются, когда спрайты близки (<15 пикселей) друг к другу, но фактически не сталкиваются. </p>

Также у меня возникают проблемы при изменениирасположение текстуры рендера.Независимо от того, какую позицию я указываю, кажется, что она идет от нижнего левого (0,0) до указанной ширины и высоты.Я подписался на этот пост:

http://www.cocos2d -iphone.org / forum / topic / 18796

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

У кого-нибудь есть пример кода, чтобы я мог видеть, что я делаюнеправильно?Я просто использую шаблонный код:

    CCRenderTexture* _rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];

    _rt.position = CGPointMake(winSize.width*0.5f, winSize.height*0.5f);
    [[RIGameScene sharedGameScene]addChild:_rt];
    _rt.visible = YES;

Я использую cocos2d-iphone 1.0.1

1 Ответ

1 голос
/ 31 января 2012

Вам нужно переместить спрайты, которые вы намереваетесь нарисовать, в область рендеринга перед тем, как вызвать рисование или посещение.Перемещение renderTexture не меняет положение _rt.sprite.

Прямоугольник пересечения должен находиться в области renderTexture, в противном случае вы получите неточные коллизии.

Кажется, вы не можете изменитьposition_rt.sprite.

Решение, которое я использую, состоит в том, чтобы определить начало (x, y) поля пересечения и на столько сместить оба сталкивающихся спрайта.Это гарантирует, что прямоугольник пересечения будет иметь свое начало в 0,0.Затем я снова вычисляю прямоугольник пересечения (после проверки, что начало прямоугольника пересечения равно 0,0).Затем я следую инструкциям в сообщении на форуме.

При определении размеров текстуры рендеринга я гарантирую, что они по крайней мере равны размеру прямоугольника пересечения, и я гарантирую, что прямоугольник пересечения полностью находится внутривизуализировать текстуру.Таким образом, есть точные столкновения.Если хотя бы часть поля пересечения находится за пределами текстуры рендеринга, я получаю неточные коллизии, поэтому перед рисованием в текстуре рендеринга убедитесь, что вы перемещаете спрайты, которые собираетесь посетить, так, чтобы блок пересечения полностью находился внутри текстуры рендеринга.

Не забудьте переместить спрайтов назад после того, как вы закончите.:)

...