cocos2d Гитарные струны для iPad

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

2 ответа

Я бы пошел на это, используя бесплатный и простой векторный инструмент, такой как Inkscape. Это позволит вам сделать несколько реалистично выглядящих струн различной толщины / текстуры. Импортируйте строки в ваше приложение как разные спрайты. Cocos2d имеет множество опций для простого обнаружения таких вещей, как "isTouchOnNode", что идеально подходит для вашего сценария. В частности, http://kobold2d.com/ творит чудеса для легкого обнаружения касания и выбора узла.

У меня нет доступа к Xcode в данный момент, так что это может быть не дословно:

/* if you use Kobold2d */

CCSprite* Gstring = [CCSprite spriteWithFile:@"Gstring.png"];
KKInput* input = [KKInput sharedInput];
if ([input isAnyTouchOnNode:Gstring touchPhase:KKTouchPhaseAny])
{
// play a sound.
// this code will become extremely complicated
// if you want a realistic sound
}

Имейте в виду, что cocos2d, возможно, не лучший движок для использования, если вы планируете делать тяжелое приложение для звука / музыки. Он имеет очень простой "SimpleAudioEngine" от CocosDenshion, который не предназначен для обработки множества перекрывающихся звуков, которые может издавать гитара.

У меня нет опыта работы с Cocos2D, но процесс имитации гитарной струны может выглядеть примерно так:

  • Нарисуй свою линию;
  • Добавьте действительную "область касания" вокруг строки (так как небольшая строка может быть недостаточно толстой, чтобы надежно зарегистрировать касание);
  • Когда вы обнаруживаете касание в пределах области касания, анимируйте линию, чтобы имитировать удар, и воспроизводите звук (и затемняйте его, чтобы симулировать замедление вибрации).

Еще одна вещь, которую следует учитывать, - это возможность перекрытия звука. Что если пользователь быстро прикоснется к той же строке? Предыдущий звук должен прекратиться до начала нового звука. Или, более естественно, ни один звук не должен воспроизводиться, пока пользователь все еще держит палец на струне, и вместо этого должен воспроизводить звук только после того, как пользователь "сорвал" струну (т.е. закончил касание).

Я не уверен, что у Cocos2D есть свой собственный обработчик событий касания (я думаю, что так и будет), но, возможно, этот пост SO может помочь: как я могу обнаружить событие касания UIImageView

РЕДАКТИРОВАТЬ: Оказывается, Cocos2D имеет свой собственный обработчик сенсорных событий. Смотрите: Как я могу обнаружить прикосновение в cocos2d?

Другие вопросы по тегам