• 締切済み

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

【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(); } }); } }

  • Java
  • 回答数4
  • ありがとう数3

みんなの回答

回答No.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); } } 三角比については前者さんの回答や学校の教科書などを読んでください。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

理解できませんと書かれてしまったので、絵を描いてみました。 大きな円Aはマウスカーソルを追いかけて動く、小さな円Bは円Aの周りをぐるぐる回る (図中の角度θが変わる) というイメージで合っていますか? ANo.1に書いたのは、円Bの中心座標は xb = xa + (ra+rb)cosθ yb = ya - (ra+rb)sinθ で求められるということです。 xaとyaはマウスカーソルの動きから決まり、raとrbの値は一定。θがどのように変化するかは質問文中にないので、質問者さんが好きに決めてください。 質問者さんがもしまだ三角関数を習っていない学年だったらごめんなさい。

  • e00083
  • ベストアンサー率31% (25/80)
回答No.2

こうゆうこと?? 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(); } }); } }

yukiti_2000
質問者

補足

回答ありがとうございます。 しかし、私のイメージとだいぶ違います。 日本語下手でごめんなさい。 わかりやすく言うと・・・ 回転している雪だるまが画面上を動き回る感じ? 伝わりますかね?

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

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

yukiti_2000
質問者

補足

回答ありがとうございます。 ん~ 理解できません。 ごめんなさい・・・(苦笑

関連するQ&A

  • 【アプレット】マウスイベントについて

    【アプレット】マウスイベントについて 現在、マウスに円をリンクさせています 1回左クリックするとその場所で円が停止し、もう1回左クリックするとまた動きだし、もう1回左クリックするとその場所で円が停止し、・・・の繰り返しを行いたいです なにかアドバイスをください。 作ってるのに近いプログラム ↓ 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 mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } 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(); } public void mousePressed( MouseEvent e ){ x = e.getX(); y = e.getY(); repaint(); } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } public void mouseEntered(MouseEvent e){ } public void mouseExited(MouseEvent e){ } }); } }

  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • java リアルタイムでマウスの座標を取得したい

    マウスのリアルタイム座標を取得したいのですが、 以下のソースを作りました。 しかし、リアルタイムどころか、マウスをクリックしても座標が取得できません どこを修正すればいいのでしょうか? import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.net.URL; import java.awt.Image; /*<applet code="applet001" width="640" height="480"></applet>*/ public class applet001 extends Applet implements MouseListener, MouseMotionListener { Dimension dim; int mouse_x, mouse_y; //アプレットの初期化時呼び出される public void init() { dim = getSize(); addMouseListener( this ); } public void update(Graphics g) //オーバーライドして最低限のことだけをする { paint(g); } public void paint(Graphics g) { g.drawString( "マウス:" + mouse_x + "," + mouse_y, 60, 120 ); g.fillOval(mouse_x,mouse_y,30,30); } // マウスの処理 public void mousePressed( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); } public void mouseClicked( MouseEvent e ) {} public void mouseReleased( MouseEvent e ) {} public void mouseEntered( MouseEvent e ) {} public void mouseDragged( MouseEvent e ) {} // public void mouseExited( MouseEvent e ) {} // public void mouseMoved( MouseEvent e ) { mouse_x = e.getX(); mouse_y = e.getY(); repaint(); } }

    • ベストアンサー
    • Java
  • package sample;

    package sample; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.Label; import java.awt.Font; import static java.awt.Font.BOLD; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; import java.io.BufferedWriter; import java.io.*; public class sample extends Panel { // マウス位置 int posX = 150; int posY = 200; // 円直径 int h = 100; int[] xCord1, yCord1, xCord2, yCord2; // 円左上位置 int imgPosX = 0; int imgPosY = 0; // 円中心点から三角頂点までの距離(=円の半径+α) int r = 90; // 円中心点 int imgCenterPosX = imgPosX + h / 2; int imgCenterPosY = imgPosY + h / 2; double s = Math.atan2((posX - imgCenterPosX), (posY - imgCenterPosY)); int x, y; public static void main(String args[]) { try { String str1 = "NUMBER,TITLE"; String str2 = "2,test"; PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter( "C:\\output.csv"))); pw.println(str1); pw.println(str2); System.out.println("ファイルに書き込みました。"); pw.close(); } catch (IOException exp) { System.out.println("入出力エラーです。"); } Frame f = new Frame(); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); }; }); sample ut = new sample(); ut.setSize(100, 100); // same size as defined in the HTML APPLET f.add(ut); f.pack(); ut.init(); f.setSize(100, 100 + 20); // add 20, seems enough for the Frame title, f.show(); }

  • Javaのアプレットについて質問です。

    星型の図形をアプレットビューワ上でマウスを押した場所に移動させたいのですが・・・ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.awt.Polygon; public class Enshu1_5 extends Applet implements MouseListener { int px []={100,80,10,70,40,100,160,130,190,120}; int py []={10,75,75,113,190,140,190,113,75,75}; private Polygon poly = new Polygon(px,py,10 ); public void init() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.setColor(Color.red); g.fillPolygon(poly); g.setFont(new Font("serif",Font.BOLD,24)); g.drawString("Star",100,200); } } こんな感じでつくってみたのですが現在位置とクリック位置との差分割り出し方をpublic void mouseClicked(MouseEvent e)の所に書きたいのですが普通にpoly.translate( e.getX(), e.getY() );をしてしまうと原点からの移動になってしまうため、フィールド上にint x=0,y=0をつくりmouseClickedのところで if(e.getX()>x&&e.getY()>y) { int dx=e.getX()-x; int dy=e.getY()-y; x=dx; y=dy; poly.translate(dx,dy); repaint(); }の様な感じで考えられる条件を条件分岐していこうと思ったのですがどうもうまくいきませんしかなりかさばったものになってしまうと思います。何かいい方法はないでしょうか? 教えて下さい><

    • ベストアンサー
    • Java
  • 画面のちらつきの原因が知りたいです

    JAVAの初心者です、宜しくお願いします。 下のようなプログラムを書きました。 「public void paint(Graphics g){ ~ repaint();」とすると、画像がちらつきます、しかし、「repaint();」を消すとちらつかなくなります、この原因が分かりません。 一体何故このような現象が起こるのでしょうか、宜しくお願いします。 ========================================================== import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Oval_Rec_1_071128 extends Applet implements MouseListener , ActionListener { int x1 ; int y1 ; int xh = 50 ; int yv = 50 ; Button bt1 ; Button bt2 ; public void actionPerformed(ActionEvent ae){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void init() { setBackground(Color.yellow); addMouseListener(this); bt1 = new Button("push"); bt1.setFont(new Font("SansSerif", Font.BOLD, 20)); bt1.setBackground(Color.black); bt1.setForeground(Color.lightGray); add(bt1); bt1.addActionListener(this); bt2 = new Button("change_circle"); add(bt2); bt2.addActionListener(this); } public void mousePressed(MouseEvent e) { x1 = e.getX(); y1 = e.getY(); xh = e.getX(); yv = e.getY(); // repaint(); //comment out } public void paint(Graphics g) { g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD,24)); g.drawString("Hello Applet World ! !" , 50 , 50); g.setColor(Color.blue); g.drawLine( 100 , 100 , 500 , 500); g.setColor(Color.cyan); g.fillOval( x1 , y1 , xh , yv); g.setColor(Color.magenta); g.fillRect( xh , yv, x1/10 , y1/10 ); repaint(); } }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • AWTの質問

    以下のようなコードを書きました。円の中をクリックすると赤色に塗りつぶしたいようにしたいのですが、現状だとどこをクリックしても赤色に塗りつぶされます。(クリックした座標が円の範囲にあれば。。)というような処理を付け加えたいのですが手順がわかりません。コードで示してもらえると助かります。 import java.applet.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class En extends Applet implements MouseListener{ public void init() { this.addMouseListener(this); } public void paint(Graphics g) { g.fillOval(20, 25, 500, 400); } public void mouseClicked(MouseEvent e) { Graphics g = getGraphics(); g.setColor(Color.red); //ここに何か書くべきと思われる g.fillOval(20, 25, 500, 400); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

    • ベストアンサー
    • Java
  • アプレットを実行すると、×が表示され、Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。

    Java JDK5をインストールしました。 C:\Program Files\Javaに jdk1.5.0_06 jre1.5.0_06 がインストールされています。 コンパイルは、PATHにC:\Program Files\Java\jdk1.5.0_06\binを追加すれば、できるようになりました。 Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。 // 図形の表示 import java.applet.*; import java.awt.*; public class Test_0002 extends Applet{ public void paint(Graphics g){ g.fillOval(0, 0, 200, 100); } }

    • ベストアンサー
    • Java