指定位置へ移動するSprite  

Spriteライブラリの利用例で、SpriteBasicを継承して、希望の位置まで移動したら止めるクラスを作成しています。
以前に作成した例のマウスボタンプレス処理を変更し、 マウスのクリック位置へ移動させています。
package fishgame;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.imageio.*;
import javax.swing.*;
import sprite.SpriteBasic;//ライブラリ利用
import sprite.SpriteFrame;
import sprite.SpriteThread;

class SpriteFishA extends SpriteBasic {//右から左に移動するクラス
	double speed_x; // 移動速度(1回のactionで変更する横移動量)

	SpriteFishA(Image img,int px, int py, int speed){//コンストラクタ
		super(img);
		this.x = px;//初期位置
		this.y = py;
		this.speed_x = speed; //速度
	}
	public void action(){//移動処理(SpriteThreadのanimationIntervalミリ秒ごとに実行される)
		super.action();//スーパクラス:SpriteBasicのactionを実行

		this.x += this.speed_x;//移動
		if(this.x < -100) {//左に隠れたか?
			this.x = 680;	//右の見えない所に出現させる。
			this.y = rand.nextInt(450)+30;;//出現させるY座標は乱数を使う
			this.speed_x = -( rand.nextInt(8)+4 );//速度も乱数
		}
	}
}
class SpriteAutoStop extends SpriteBasic //指定位置まで移動したら止まるクラス
{
	int count;		//この数で、次のターゲット位置まで移動
	double target_x; // 移動先の位置
	double target_y;
	SpriteAutoStop( Image img, int px, int py){//コンストラクタ
		super(img);
		this.x = px;//初期位置
		this.y = py;
	}
	public void action(){//移動処理
		super.action();//スーパクラス:SpriteBasicのactionを実行
		if(count != 0){
			double dx = (target_x - x)/count; //移動量算出
			double dy = (target_y - y)/count;
			x += dx;
			y += dy;
			count--;
		}
		setDrawParameter();//描画に使うパラメタとして設定
	}

	//移動指定
	public void setTarget(int target_x, int target_y, int count){
		this.target_x = target_x;
		this.target_y = target_y;
		if(count < 0) count = - count;//負なら正にする。
		this.count = count;
	}

	public boolean isStop(){//停止状態なら true
		return count == 0;
	}
}
public class TestSplitePanel1 extends JPanel {

	static Image bg;//背景素材イメージ
	static Image ch;//素材1イメージ
	static Image ch2;//素材2イメージ
	static {
		try{
			bg = ImageIO.read(TestSplitePanel1.class.getResource("aqua00.jpg"));//背景素材イメージ
			ch = ImageIO.read(TestSplitePanel1.class.getResource("sanma00.gif"));//素材1イメージ
			ch2 = ImageIO.read(TestSplitePanel1.class.getResource("jellyfish.gif"));//素材2イメージ
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

	SpriteThread spriteThread;	// 描画、アニメーションスレッド
	SpriteBasic back = new SpriteBasic(bg);
	SpriteAutoStop jellyfish = new SpriteAutoStop(ch2, 200, 100);

	public TestSplitePanel1() throws Exception {
		int w = bg.getWidth(this);//背景画像サイズ取得
		int h = bg.getHeight(this);
		this.setPreferredSize(new Dimension(w,h));
		spriteThread = new SpriteThread(w, h, this);

		spriteThread.add( back );//背景を追加
		for(int n=0; n < 5; n++){
			spriteThread.add( new SpriteFishA(ch,  -100, 100, -1));//魚追加
		}
		spriteThread.add( jellyfish );//魚追加

		spriteThread.start(10);//0.01秒のアクションスレッド スタート

		this.addMouseListener(new MouseAdapter() {

			@Override
			public void mousePressed(MouseEvent e) {
				jellyfish.setTarget(e.getX()-100, e.getY()-50, 50);//50回で中心位置をクリック位置へ移動
			}
		});

		this.setFocusable(true);//JPanelのデフォルトを変更して、キーボードイベントを可能しなければなりません。
		this.requestFocus(); //初期フォーカスを、このパネルにする。
	}
	public void paintComponent(Graphics g){//間隔(0.01秒)で呼び出される。
		super.paintComponent(g);
		if (spriteThread != null) spriteThread.paintTo(g);
	}
	public static void main(String[] arg) throws Exception{
		new SpriteFrame(new TestSplitePanel1());//フレーム作品実行
	}
}