Прежде всего, да, вы должны использовать [super selected], если хотите, чтобы он выполнял поведение по умолчанию для пункта меню, а не просто копировал содержимое функции суперкласса. В случае с CCMenuItemLabel, который вы скопировали, вызов [super selected] позволит метке «делать свое дело» по отношению к визуальным эффектам, которые он делает при выборе. Это позволяет вам сконцентрироваться на том, что ВЫ хотите сделать.
Что касается того, почему ваш спрайт не виден, и какова может быть «необъявленная» ошибка, трудно сказать, не увидев код. Одной из проблем может быть то, что вы сказали, что подклассифицируете CCMenuItem, но вставляете в код CCMenuItemLabel.
Вы пробовали просто смотреть ccTouchesBegan и ccTouchesEnded прямо на вашем спрайте кнопки? Может быть, проще, чем пытаться заставить CCMenuItem сделать что-то, для чего он не был предназначен ...
Если это не удастся, загляните в «виртуальные джойстики», и вы получите хороший пример кода. На форумах Cocos2d было по крайней мере две основные темы на эту тему: Тема 1 Тема 2