我开始使用 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 可能不是最好的引擎。它有一个来自 CocosDenshion 的非常基本的“SimpleAudioEngine”,它不是为处理吉他可以发出的许多重叠声音而设计的。
我没有使用 Cocos2D 的经验,但是模拟吉他弦的过程可能是这样的:
- 画你的线;
- 在字符串周围添加一个有效的“触摸区域”(因为小字符串可能不够粗,无法可靠地记录触摸);
- 当您在触摸区域的范围内检测到触摸时,为线条设置动画以模拟弹奏并播放声音(并将其淡出以模拟振动的减慢)。
要考虑的另一件事可能是重叠声音的可能性。如果用户快速触摸相同的字符串怎么办?前一个声音应该在新声音开始之前停止。或者,更自然地,当用户的手指仍然放在琴弦上时,不应该播放任何声音,而应该只在用户“拨动”琴弦(即结束触摸)后才发出声音。
我不确定 Cocos2D 是否有自己的触摸事件处理程序(我想它会),但也许这篇 SO 帖子可能会有所帮助:我如何检测 UIImageView 的触摸事件
编辑:事实证明,Cocos2D 确实有自己的触摸事件处理程序。请参阅:如何在 cocos2d 中检测触摸?