私は Cocos2D を使い始めており、これまで多くのことを学びました。しかし、ccDrawLine をシミュレートして、ギターの弦のように動作するようにする方法を見つけることができません。
2 に答える
私はCocos2Dの経験はありませんが、ギターの弦をシミュレートするプロセスは次のようになります。
- 線を引きます。
- 弦の周りに有効な「タッチエリア」を追加します(小さな弦はタッチを確実に登録するのに十分な太さではない可能性があるため)。
- タッチエリアの境界内でタッチを検出したら、ラインをアニメートしてストラムをシミュレートし、サウンドを再生します(フェードアウトして、振動の減速をシミュレートします)。
考慮すべきもう1つのことは、音が重なる可能性です。ユーザーが同じ文字列にすばやく触れた場合はどうなりますか?新しいサウンドが開始する前に、前のサウンドが停止する必要があります。または、より自然に、ユーザーが弦に指を置いている間は音が鳴らないはずです。代わりに、ユーザーが弦を「はじく」(つまり、タッチを終了する)と音が鳴るだけです。
Cocos2Dに独自のタッチイベントハンドラーがあるかどうかはわかりませんが(おそらくそうなると思います)、おそらくこのSO投稿が役立つかもしれません:UIImageViewのタッチイベントを検出するにはどうすればよいですか?
編集:Cocos2Dには独自のタッチイベントハンドラーがあります。参照:cocos2dでタッチを検出するにはどうすればよいですか?
これには、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 は使用するのに最適なエンジンではない可能性があることに注意してください。CocosDenshion の非常に基本的な 'SimpleAudioEngine' を備えていますが、これはギターが作成できる多くのオーバーラップ サウンドを処理するようには設計されていません。