私はこのコードを持っています:
var load_image = function( src ){
var img = new Image();
img.src = src;
return img;
};
var stage = new Kinetic.Stage({container: 'main', width: 640, height: 480});
var layer = new Kinetic.Layer();
var setup = {
kick : {
sound: 'kick',
image_config : {
image : load_image( '/images/bass.png' ),
x : 250,
y : 50
}
},
snare : {
sound: 'snare',
image_config : {
image : load_image( '/images/snare.png' ),
x : 220,
y : 220
}
},
hats : {
sound: 'hats',
image_config : {
image : load_image( '/images/hi-hat.png' ),
x : 140,
y : 150
}
}
};
var img;
for ( name in setup )
{
img = new Kinetic.Image( setup[name].image_config );
img.on('click', function()
{
soundManager.play( setup[name].sound );
});
img.createImageHitRegion(function()
{
layer.drawHit();
},true);
layer.add(img);
}
stage.add(layer);
これが問題です。セットアップ オブジェクトの各属性について、クリック イベントを追加したいと考えています。(上に示しました)
img.on('click', function()
{
soundManager.play( setup[name].sound );
});
つまり、キックがキックされるとキック サウンドがトリガーされ、スネアがクリックされるとスネア サウンドがトリガーされるなどです。各セットアップ アトリビュートのサウンド アトリビュートは、再生するサウンドを記述します。
問題は、すべてのクリック イベントが「ハット」サウンドをトリガーすることです。「帽子」属性がセットアップオブジェクトの最後の属性であるためであることがわかりました。
私は何を間違っていますか?コールバックのせいですか?
ここにアクセスすると、例が表示されます。
また、この例では、ダブルクリックすると、サウンドが 1 回だけトリガーされますが、2 回トリガーされるはずです! どうしたの?