電子書籍の厳選無料作品が豊富!

【javaアプレット】マウスにリンクした雪だるまを回転させたい

現在、大小の丸2つで簡単に作った雪だるまをマウスにリンクすることができました。

マウスを右に動かせばそのまま雪だるまも右に動きます。

ここからがわかりません。

理想的には雪だるまは大きい丸を中心に回転させながらマウスの動かす方向に動く感じにしたいのです。

なにかアドバイスをください。

作ってるのに近いプログラム


import java.applet.* ;
import java.awt.*;
import java.awt.event.*;

public class test extends Applet {
int posX = 50;
int posY = 50;
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(posX, posY, 50, 50);
}
public void init () {
this.setSize(200, 200);
this.setVisible(true);
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
posX = e.getX();
posY = e.getY();
repaint();
}
});
}
}

A 回答 (4件)

public class test extends Applet {


final double PI = 3.14;

int posX = 50;
int posY = 50;

double yukiX = posX + 50;
double yukiY = posY + 10;

double radian = 0;

Timer t = new Timer();

public void paint(Graphics g){
g.setColor(Color.black);
g.drawOval(posX, posY, 50, 50);
g.drawOval((int)yukiX, (int)yukiY, 30, 30);
}

public void init(){
this.setSize(200, 200);
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e) {
posX = e.getX();
posY = e.getY();
yukiX = changeYukiX();
yukiY = changeYukiY();
repaint();
}
});
t.schedule(new MyTimer(), 0, 30);
}

public class MyTimer extends TimerTask{
public void run(){
radian +=3;
yukiX = changeYukiX();
yukiY = changeYukiY();
repaint();
}
}
public double changeYukiX(){
return posX + 25 - 15 + 40 * Math.cos(radian * PI / 180);
}
public double changeYukiY(){
return posY + 25 - 15 + 40 * Math.sin(radian * PI / 180);
}
}

三角比については前者さんの回答や学校の教科書などを読んでください。
    • good
    • 0

理解できませんと書かれてしまったので、絵を描いてみました。


大きな円Aはマウスカーソルを追いかけて動く、小さな円Bは円Aの周りをぐるぐる回る (図中の角度θが変わる) というイメージで合っていますか?

ANo.1に書いたのは、円Bの中心座標は
xb = xa + (ra+rb)cosθ
yb = ya - (ra+rb)sinθ
で求められるということです。
xaとyaはマウスカーソルの動きから決まり、raとrbの値は一定。θがどのように変化するかは質問文中にないので、質問者さんが好きに決めてください。

質問者さんがもしまだ三角関数を習っていない学年だったらごめんなさい。
「【javaアプレット】マウスにリンクした」の回答画像3
    • good
    • 0

こうゆうこと??



import java.applet.* ;
import java.awt.*;
import java.awt.event.*;

public class test extends Applet {


int posX = 50;
int posY = 50;

int h=10;

public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(posX-(h/20)-5, posY-(h/20)-5, 10+(h/10), 10+(h/10));
}
public void init () {
this.setSize(200, 200);
this.setVisible(true);
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
posX = e.getX();
posY = e.getY();
h++;
repaint();
}
});
}
}

この回答への補足

回答ありがとうございます。

しかし、私のイメージとだいぶ違います。

日本語下手でごめんなさい。

わかりやすく言うと・・・

回転している雪だるまが画面上を動き回る感じ?

伝わりますかね?

補足日時:2010/09/17 03:16
    • good
    • 0

[A] 大きな丸の中心座標


[B] 大きな丸の半径
[C] 小さな丸の半径
[D] 大きな丸から見て小さな丸がどちらにあるか (角度)

これらの値が決まれば、小さな丸の中心座標は三角関数を使って求められます。
[D]の角度をいつどのように変化させるかは質問者さんのお好きなように決めてください。

この回答への補足

回答ありがとうございます。

ん~

理解できません。

ごめんなさい・・・(苦笑

補足日時:2010/09/17 03:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!