コード public class MainActivity extends Activity implements Runnable{ Handler mHandler; Thread thread; FrameLayout frameLayout; SampleView sv; ArrayList<Hanabi> list = new ArrayList<Hanabi>(); Hanabi hanabi1 = new Hanabi(150.0); Hanabi hanabi2 = new Hanabi(120.0); int time = 0; double mul = 0.15; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); frameLayout = new FrameLayout(this); setContentView(frameLayout); sv = new SampleView(this); list.add(hanabi1); list.add(hanabi2); sv.setHanabi(list); frameLayout.addView(sv); mHandler = new Handler(); thread = new Thread(this); thread.start(); } @Override public void run(){ hanabi1.setX(); hanabi2.setX(); for(time = 0; time < 1000; time++){ try{ Thread.sleep(50); } catch(InterruptedException e){ } hanabi1.setY(time * mul); hanabi2.setY(time * mul); mHandler.post(new Runnable(){ @Override public void run(){ sv.invalidate(); } }); } } }
コード public class SampleView extends View{ Paint paint = new Paint(); ArrayList<Hanabi> hanabi; public SampleView(Context context) { super(context); } public void setHanabi(ArrayList<Hanabi> hanabi){ this.hanabi = hanabi; } protected void onDraw(Canvas canvas){ paint.setColor(Color.RED); paint.setStrokeWidth(10); canvas.drawPoint(hanabi.get(0).getX(), hanabi.get(0).getY(), paint); canvas.drawPoint(hanabi.get(1).getX(), hanabi.get(1).getY(), paint); } }
コード public class Hanabi{ int x; int y; double V0x = 0.0; double V0y; double Vx = 0.0; double Vy; double G = 9.8*2; /*Hanabiクラスのコンストラクタ*/ public Hanabi(double V0y){ this.V0y = V0y; } public void setX(){ this.x = (int)(Math.random()*700) + 50; } public void setY(double time){ this.y = (int)(800 - (V0y*time - G*time*time/2)); } public void setVy(double time){ this.Vy = V0y - G*time; } public int getX(){ return this.x; } public int getY(){ return this.y; } public double getVy(){ return this.Vy; } }
前回の続きで同じような質問になりますがよろしくお願いします!
上のプログラムは花火の打ちあがりの部分だけのプログラムです。
Hanabiクラスを作り、xやyなどを持たせて、
Hanabi hanabi1 = new Hanabi(150.0);
Hanabi hanabi2 = new Hanabi(120.0);
のように2つインスタンス化?しました。
今、MainActivityクラスのrunメソッドで
hanabi1.setX();
hanabi2.setX();
hanabi1.setY(time * mul);
hanabi2.setY(time * mul);
のように2つ(hanabi1とhanabi2)を同じところに書いているのですが、これだと実行すると同時に花火が上がってしまいます。
hanabi2.setY(time * mul);のtimeを(time-10)*mulのように書き換えると、時間差で花火を上げることができたのですが、これだとあとで面倒なことになるので他の方法でしたいと思っています。
hanabi1に対してrunメソッドの動作を行って、t秒後にhanabi2に対してもrunメソッドの動作を行って、そのときの2つの位置を描画すればいいと思うのですが、プログラムをどのように書いたらいいのかがわかりません。
この考えが間違っているかもしれませんが・・
私のこの考えはどうでもいいんですけど、
花火を時間をあけて打ち上げるにはどのように修正したらいいのでしょうか?
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/12 00:39 編集
2016/04/12 00:36
2016/04/12 00:42
2016/04/12 02:55
2016/04/12 05:03
2016/04/12 05:43
2016/04/12 07:40
2016/04/12 08:04
2016/04/12 08:39
2016/04/12 09:03
2016/04/13 01:48
2016/04/13 02:19
2016/04/13 04:59
2016/04/13 05:14
2016/04/13 05:40
2016/04/13 05:45
2016/04/13 05:59