- ベストアンサー
自動で動くパックマンを作成したが目の部分が起動しない
- 以下のようなプログラムで自動で動くパックマンを作りました。
- しかし、どうしても目の部分の起動がかけません。
- お力を貸していただける方はいらっしゃいますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>特に(3)はメディアトラッカーやオフスクリーンといった、基本的ですが、基本中の基本ですので、ぜひトライしてください。 特に(3)はメディアトラッカーやオフスクリーンといった、聞きなれない言葉かもしれませんが、基本中の基本ですので、ぜひトライしてください。
その他の回答 (3)
- azicyan
- ベストアンサー率21% (368/1747)
説明します。 まず、やはり秒から角度を出しているのは、 1秒が60までしかないので、 6倍したとしても滑らかには行かず、0からインデントしていくほうが良いと思いそうしてしまいました。 あとで、カレンダーを利用して秒針に書き換えても良いかもしれません。 スリープを1000ミリ秒から100ミリ秒に変更してます。 どうしても1秒単位ではアニメーションには見えないからです。 肝心の目の座標のx,yはどうしているかというと、 x=距離*Math.cos(角度*ラジアン) y=距離*Math.sin(角度*ラジアン) のようにしてます。 ラジアンとは半径1の円の1度の円周の長さです。 2π/360度=π/180 と成ります。これは定数なので覚えてしまっていいです。 注意点はintでキャストしないと、dobble型になってしまうのでエラーになってしまうことですね。 あとfillovalは円の中心を指定できないので、本当はパックマン(?)の中心は130,130のはずですが 5ドットずらして125,125としてます。 良く考えたら中心を指定できるfillarcを使ったらよかったですね(^_^;) 意味がわからない部分は補足してくださいね。 後改良点としては、 (1)はしまで行ったら戻るようにする (2)口をパクパクさせる (3)ちらつかないようにする といったところでしょうか? 特に(3)はメディアトラッカーやオフスクリーンといった、 基本的ですが、基本中の基本ですので、 ぜひトライしてください。 それでは!
- azicyan
- ベストアンサー率21% (368/1747)
import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; /* <applet code="PacMan2.class" width="500"height="500"> </applet> */ public class PacMan2 extends Applet implements Runnable { volatile Thread thr; volatile boolean runFlag = true; int s; public void init(){ s=100; } public void start() { thr = new Thread(this); runFlag = true; thr.start(); } public void stop() { runFlag = false; thr = null; } public void run() { while (runFlag) { repaint(); try { Thread.sleep(100); //100 mili-seconds }catch(InterruptedException e) { runFlag = false; } } } public void paint(Graphics g) { Calendar cal = Calendar.getInstance(); s+=5; g.setColor(new Color(128,255,255)); g.fillArc(100+s/5,100,60,60,s,300); g.setColor(new Color(0,0,0)); g.fillOval(125+s/5+(int)(20*Math.cos(-(s+30)*3.14/180)),125+(int)(20*Math.sin(-(s+30)*3.14/180)),10,10); } }
- azicyan
- ベストアンサー率21% (368/1747)
何故カレンダーを使っているのかな? sは0~60ですよね。 ということは永遠に回転はしないですが・・・ sは単に0~360までインデントすればいいような気がします。 目の位置は、サインとコサインで、円の中心から計算すればよさそうです。 風呂に入ってからもう一回回答しますね(^_^;)
補足
すみません。超初心者なもので… 途中で元にもどるのはそれが原因だったのですね! なんで永遠に回らないんだろうと困っていました(-_-;) 実は今日、授業でやったばかりでして… 授業はちゃんと聞かないと駄目ですね。 すみません、引き続きよろしくお願いいたします。
お礼
azicyanさん。 丁寧な回答をありがとうございました! 非常に分かりやすかったです。 頑張って(1)~(3)もやってみたいと思います。 本当にありがとうございました!