2014-02-06 3 views
0

Я работаю с модифицированной версией Cocos2D 0.99.5. Ничего не изменилось в этой модифицированной версии, поскольку позиции идут, но когда я включил сетчатку, карты tmx отображаются хорошо, но обнаруженные плитки, скорее всего, с использованием tileGIDAt и позиций с ccp, а также спрайты позиционирования уходят. Это известная ситуация, в которой я провел некоторые исследования, но не знаю, как проще ее преодолеть. Я надеюсь отредактировать несколько вещей в Cocos2D (используя точки вместо пикселей при использовании сетчатки), чтобы решить эту проблему, но я ничего не видел в Интернете, который упоминает об этом.Cocos2D: Обновление позиций для сетчатки

Я видел некоторый код разделить положение объекта на CC_CONTENT_SCALE_FACTOR

CGPoint objectPosition = [tmxLayer positionAt:objectTile]; 
if (CC_CONTENT_SCALE_FACTOR() == 2){ 
    objectPosition.x /= CC_CONTENT_SCALE_FACTOR(); 
    objectPosition.y /= CC_CONTENT_SCALE_FACTOR(); 
} 

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

+0

Вы работаете с версией cocos2d, которой больше 3 лет .. почему? FWIW вам может быть лучше сделать решительный шаг и, по крайней мере, обновить до версии 1.1, если не 2.x. – LearnCocos2D

+0

Удастся ли решить эту проблему? Я попытался обновить до 2.x, но было слишком много вещей, которые не совместимы, поскольку у меня есть сотни файлов кода. – VagueExplanation

+0

Не знаю, но 1.1 и 2.x определенно имеют больше исправлений/лучшую поддержку Retina. Ваша версия определенно не поддерживает iPad Retina и широкоформатные телефоны. Что касается изменений, большинство из них будут переименованы в классы/методы, функциональность осталась в основном одинаковой. Вы всегда можете попробовать сначала обновить до 1.0.1 или 1.1, а затем обновить его до 2.x. – LearnCocos2D

ответ

1

Я столкнулся с той же проблемой, и вот что я нашел.

Проблема связана с точками против пикселей и тем, как Cocos2d обрабатывает их, о чем вы говорили в своем вопросе. Как вы знаете, точка на дисплее без сетчатки такая же, как дисплей сетчатки. IPhone 3GS, который не является сетчаткой, имеет разрешение 320 x 480, а центральная точка этого экрана - 160 x 240. iPhone 4, являющийся сетчаткой, имеет разрешение 640 x 960, но центр " точка "этого экрана все еще 160 x 240.

Предположим, что ваша карта tmx состоит из плиток размером 32 x 32 пикселя. Предположим также, что вы хотите проверить плитки, которые в настоящий момент находится в вашем «герое». Наконец, предположим, что позиция вашего героя-спрайта равна 192 x 288. Чтобы получить координату плитки, вы логически возьмете позицию своего спрайта и разделите позиции x и y на ваш размер плитки 32 (я оставляю Y координаты перелистывания). Вместо жесткого кодирования значения 32, я предполагаю, что вы получаете это значение, используя что-то вроде следующего кода, где tileMap твой уже загружена карта:

tileMap.tileSize.width 

Так, основываясь на положении 192 х 288, ваш герой находится на плите 6 x 9 в вашей карте. Проблема в том, что на экране сетчатки положение 192 x 288 основано на точках, но ваша 32 x 32 плитка основана на пикселях. На экране сетчатки 32 x 32 пикселя на самом деле 16 x 16 точек. Так что на самом деле, ваш герой спрайт не на плитки 6 х 9, а на плитки 12 х 18.

Таким образом, простой способ исправить это - проверить отображение сетчатки, и если она существует, то при попытке для определения конкретной координаты плитки вы должны разделить ширину и высоту плитки на 2, чтобы преобразовать ее в точки.

Это работало отлично для меня, и я надеюсь, что это поможет вам.

+0

Все еще есть много проблем, но это улучшение, я думаю! Теперь у меня проблемы с размещением объектов, но я думаю, что в конце концов я это выясню. Thanks – VagueExplanation

+0

Нет проблем.Рад помочь. Для меня это тоже было больно, но большинство вопросов касалось того, что я описал выше. – Pluvius

Смежные вопросы