Поменять набор плиток во время выполнения? TMX Cocos2d-iPhone

Я погружаюсь и пытаюсь изучить cocos2d. В настоящее время я пытаюсь поменять набор плиток при нажатии кнопки.

Пример: игрок стоит на траве, вы нажимаете кнопку, и набор тайлов меняется на текстуру снега.

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

Листы изображений имеют одинаковый размер и точно такое же расположение изображений.

Если у кого-то есть какие-либо советы или участие, я был бы очень признателен! :)


person JoeyMaru    schedule 13.05.2013    source источник
comment
Я считаю, что это невозможно сделать без модификации кода. Вы можете попробовать koboldtouch.com, который позволяет менять наборы плиток и многое другое.   -  person LearnCocos2D    schedule 13.05.2013


Ответы (1)


Класс CCTMXLayer, использующий набор фрагментов, наследуется от CCSpriteBatchNode. Вы можете попытаться отправить CCTMXLayer сообщение setTexture: с новой текстурой набора плиток.

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

Один из возможных способов — удалить весь CCTMXLayer и заменить его новым. Однако CCTMXLayer инициализируется со структурами, используемыми только внутренне, и по крайней мере некоторые из них могут быть доступны только во время загрузки. Таким образом, в конце концов, вероятно, единственный способ заменить набор тайлов в простом cocos2d — это заменить весь узел CCTMXTiledMap, что означает много накладных расходов для чего-то такого простого.

Конечно, вы можете добавить плитки травы и снега в один и тот же набор плиток и просто изменить GID плитки, если это все, что вы хотели сделать.

Как я уже упоминал, KoboldTouch позволяет изменять наборы фрагментов во время выполнения. Сам KoboldTouch использует cocos2d-iphone в качестве средства визуализации.

person LearnCocos2D    schedule 13.05.2013
comment
Огромное спасибо за ответ! Я искал вариант GID, который, возможно, должен быть чем-то, что я рассматриваю. Это кажется самым чистым, и я действительно хочу избежать всех возможных ошибок. :) - person JoeyMaru; 15.05.2013