0

ドラム楽器を作る必要があります。私はすでに背景画像とサウンドを持っています。ここで、ドラムに 4 つの透明な円を追加して、4 つの異なるサウンドを生成する必要があります。

import javax.swing.*;
import java.awt.event.*;

public class PictureOnClickOneSound 
{

  public static void main(String args[]) 
  {
    // Create a "clickable" image icon.
    ImageIcon icon = new ImageIcon("C:\\Users\\apr13mpsip\\Pictures\\Drum2.jpg");
    JLabel label = new JLabel(icon);
    label.addMouseListener(new MouseAdapter() 
    {
      public void mouseClicked(MouseEvent me) 
      {
        sound1.Sound1.play();
        System.out.println("CLICKED");
      }
    }); 

    // Add it to a frame.
    JFrame frame = new JFrame("My Window");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(label);
    frame.pack();
    frame.setVisible(true);
  }
}
4

2 に答える 2

2

画像上の場所を表すシェイプと、その場所がクリックされたときに再生されるサウンド ファイルを含むマップを作成します。何かのようなもの:

Map<Shape, Sound> shapes = new Hashmap<Shape, Sound>();

shapes.put(new Ellipse2D.Double(0, 0, 50, 50), soundFile1);
shapes.put(new Ellipse2D.Double(50, 50, 50, 50), soundFile2);

次に、mouseClicked() イベントで、マップを検索して、図形でマウスがクリックされたかどうかを確認する必要があります。何かのようなもの:

for (Shape shape: shapes.keySet())
{
    if (shape.contains(event.getPoint());
    {
        Sound sound = shapes.get(shape);
        sound.play();
    }
}
于 2013-07-01T02:18:42.627 に答える
1

「透明な円」を追加する必要はありません。プロパティgetX()およびgetY()MouseEvent使用して、画像内でクリックされた位置を識別し、それに関連するサウンドを再生します。

円ごとに、x、y の中心位置と半径を保存します。

public class Circle{
   double xCenter;
   double yCenter;
   double radius;
}

MouseEvent アクションが実行されると、円を反復処理し、クリックがいずれかの内部にあるかどうかを確認します。

for(Circle c : circles){
   //check if the click was inside this circle
   if (Math.sqrt((c.xCenter-mouseEvent.getX())^2+(c.yCenter-mouseEvent.getY())^2) <= c.radius) {
      //play sound for c
   }
}
于 2013-07-01T02:01:28.710 に答える