0

我开始使用 Cocos2D 并且到目前为止学到了很多东西。但是我找不到如何模拟 ccDrawLine 以使其行为像吉他弦,这意味着,当触摸 ccDrawLine 时,它​​会播放声音并将 ccDrawLine 移动到用户触摸它的位置。

4

2 回答 2

0

我将通过使用免费且简单的矢量艺术工具(例如 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”,它不是为处理吉他可以发出的许多重叠声音而设计的。

于 2012-12-30T21:11:03.580 回答
0

我没有使用 Cocos2D 的经验,但是模拟吉他弦的过程可能是这样的:

  • 画你的线;
  • 在字符串周围添加一个有效的“触摸区域”(因为小字符串可能不够粗,无法可靠地记录触摸);
  • 当您在触摸区域的范围内检测到触摸时,为线条设置动画以模拟弹奏并播放声音(并将其淡出以模拟振动的减慢)。

要考虑的另一件事可能是重叠声音的可能性。如果用户快速触摸相同的字符串怎么办?前一个声音应该在新声音开始之前停止。或者,更自然地,当用户的手指仍然放在琴弦上时,不应该播放任何声音,而应该只在用户“拨动”琴弦(即结束触摸)后才发出声音。

我不确定 Cocos2D 是否有自己的触摸事件处理程序(我想它会),但也许这篇 SO 帖子可能会有所帮助:我如何检测 UIImageView 的触摸事件

编辑:事实证明,Cocos2D 确实有自己的触摸事件处理程序。请参阅:如何在 cocos2d 中检测触摸?

于 2012-12-30T20:16:43.997 回答