コード private Handler mHandler; private FrameLayout frameLayout; SampleView sv; Thread thread, thread2, thread3; double G = 9.8*2; //重力加速度×2 int time = 0; //時間 double mul = 0.15; //timeの任意倍数 double times; // = time*mul; double V0y = 180.0; //y軸初速度 double Vy; //y軸速度 static int hanabiball = 1000; //花火が分散する数 int hanabi[] = new int[hanabiball]; //分散した花火1つ1つを格納した配列 double angle[] = new double[hanabiball]; //分散したものの各角度(ランダムで決定) double speed[] = new double[hanabiball]; //分散したものの各スピード(ランダムで決定) V0x2とV0y2の合成 int speedx = 50; //スピードの定数倍 double V0x2[] = new double[hanabiball]; //x軸初速度(time = 0) speedのx軸成分 double V0y2[] = new double[hanabiball]; //y軸初速度(time = 0) speedのy軸成分 double Vx2[] = new double[hanabiball]; //x軸速度 tは任意の整数 double Vy2[] = new double[hanabiball]; //y軸速度 tは任意の整数 @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); frameLayout = new FrameLayout(this); setContentView(frameLayout); sv = new SampleView(this); frameLayout.addView(sv); mHandler = new Handler(); for(int i = 0; i < hanabiball; i++){ angle[i] = Math.random()*360; //全方向(0~360°) ランダムで決める speed[i] = Math.random()*speedx; //スピードの設定 ランダムで決める } thread = new Thread(this); thread.start(); } @Override public void run(){ //while(true){ sv.x = (int)(Math.random()*500) + 100; for(int roop = 0; roop < 2; roop++){ for(time = 0; time < 1000; time++) { times = time*mul; try { Thread.sleep(50); } catch (InterruptedException e) { } if(sv.n == 1){ Vy = V0y - G*times; sv.y = (int)(1100 - (V0y*times - G*times*times/2)); mHandler.post(new Runnable() { @Override public void run(){ sv.invalidate(); } }); if(Vy <= 0.1){ sv.n = 3; break; } } else if(sv.n == 2){ for(int i = 0; i < hanabiball; i++){ V0x2[i] = speed[i]*Math.cos(angle[i]*(Math.PI/180)); //speedのx軸成分 V0y2[i] = speed[i]*Math.sin(angle[i]*(Math.PI/180)); //speedのy軸成分 Vx2[i] = V0x2[i]; //等速運動なので初速度で一定 Vy2[i] = V0y2[i] - G*times; //鉛直上投げ?なので V0 - at sv.x2[i] = sv.x + (int)(V0x2[i]*times); //等速運動なので初速度×時間 sv.y2[i] = sv.y - (int)(V0y2[i]*times - G*times*times/2); //鉛直上投げ?なので V0t - at2/2 } mHandler.post(new Runnable() { @Override public void run(){ sv.invalidate(); } }); if(time == 25){ sv.n = 4; break; } } } } //} } }
上のプログラムは自分で作ったみた花火のプログラムです。
これを実行すると花火が1発だけ打ちあがります。
コメントアウトしてあるwhile文を元に戻すと、花火が1発打ちあがって、それが終わったあとにまた打ちあがってというようにループします。
これを同時に2発打ち上げたり、時間差で例えば2秒だけずらして打ち上げたりしたいです。
画面上に2発以上の花火を時間差で描画するにはどうすればいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/08 02:08
2016/04/08 02:11
2016/04/08 06:26