質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

2回答

2136閲覧

時間のずらし方

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/04/10 15:04

編集2016/04/11 05:07
コード public class MainActivity extends Activity implements Runnable{ Handler mHandler; Thread thread; FrameLayout frameLayout; SampleView sv; ArrayList<Ball> list = new ArrayList<Ball>(); Ball ball = new Ball(180.0); Ball ball2 = new Ball(160.0); int time = 0; double mul = 0.1; double times; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); frameLayout = new FrameLayout(this); setContentView(frameLayout); sv = new SampleView(this); list.add(ball); list.add(ball2); sv.setBall(list); frameLayout.addView(sv); mHandler = new Handler(); thread = new Thread(this); thread.start(); } @Override public void run(){ ball.setX(); ball2.setX(); for(time = 0; time < 100; time++){ times = time*mul; try{ Thread.sleep(50); } catch(InterruptedException e){ } ball.setY(times); ball2.setY(times); mHandler.post(new Runnable(){ @Override public void run(){ sv.invalidate(); } }); } } }
コード public class SampleView extends View{ Paint paint = new Paint(); ArrayList<Ball> ball; public SampleView(Context context) { super(context); } public void setBall(ArrayList<Ball> ball){ this.ball = ball; } protected void onDraw(Canvas canvas){ paint.setColor(Color.RED); paint.setStrokeWidth(10); canvas.drawPoint(ball.get(0).getX(), ball.get(0).getY(), paint); canvas.drawPoint(ball.get(1).getX(), ball.get(1).getY(), paint); } }
コード public class Ball{ int x; int y; double V0x = 0.0; double V0y; double Vx; double Vy; double G = 9.8*2; //コンストラクタ public Ball(double V0y){ this.V0y = V0y; } public void setX(){ this.x = (int)(Math.random()*700) + 50; } public void setY(double times){ Vy = V0y - G*times; this.y = (int)(1100 - (V0y*times - G*times*times/2)); } public int getX(){ return this.x; } public int getY(){ return this.y; } }

上のプログラムは上にボール(点)を投げ上げたときの動きを示したプログラムです。
Ballクラスを作ってインスタンス化することでボールを複数作れました。

ですが、同時にボールを上げることはできたのですが、時間をずらしてあげることが出来ません。
はじめにボールを上げて、1秒後に2つ目のボール、3秒後に3つ目のボールを上げるようにするにはどうすればいいのでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

パッと見ですが、今の実装だと、下記のような実装が修正が少ないように思います。

1.各ボールに何秒後に打ち上げるかのメンバを持たせる。
2.描画する側で、何秒後に描画するかを制御する。

投稿2016/04/10 15:27

Odacchi

総合スコア907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/10 15:41

回答ありがとうございます。 時間のメンバを持たせるということですが、そうするとMainActivityクラスの for(time = 0; time < 100; time++){ times = time*mul; try{ Thread.sleep(50); } catch(InterruptedException e){ } の表記はいらなくなるということでしょうか?
guest

0

  1. Ballオブジェクトを時間差でListに入れる
  2. 再描写する際、Listに入っているすべてのBallについて描写するようにする

という2点に気をつければいいのではないでしょうか。

投稿2016/04/10 15:18

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/10 15:36

回答ありがとうございます。 時間差でListに入れるというのは、意味は分かるのですが、どうすればいいのでしょうか? Ballクラスで設定したらいいのでしょうか?
swordone

2016/04/10 15:38

HandlerのメソッドにpostDelayedという物があります。 Runnableを指定時間後に実行するよう指示するものです。それを使います。
退会済みユーザー

退会済みユーザー

2016/04/10 16:47

了解です。 postDelayedを使うと上のプログラムの場合 mHandler.postDelayed(this, 1000)とかになると思うのですが、Ballのインスタンスballやball2に対して.postDelayedを使うにはどうすればいいのでしょうか? postDelayedの引数を調べたのですが(Runnable r, long delayMillis)というのしかなくて、ballに対しての使い方がわかりません。 すみませんが、よろしくお願いします。
swordone

2016/04/10 16:56

postDelayedの第一引数に渡すRunnableのrunメソッドで、新たなBallオブジェクトをListに追加するようにします。
退会済みユーザー

退会済みユーザー

2016/04/10 17:22

onCreateメソッド{ list.add(ball); sv.setBall(list); mHandler = new Handler(); thread = new Thread(this); thread.start(); mHandler.postDelayed(this, 1000); } runメソッド{ list.add(ball2); sv.setBall(list); ball.setX(); ball2.setX(); for(time = 0; time < 100; time++){ times = time*mul; ・・・ こういうことなのでしょうか?
退会済みユーザー

退会済みユーザー

2016/04/11 05:38

postDelayedの第一引数に渡すRunnableのrunメソッドで、新たなBallオブジェクトをListに追加する これはどういう意味なのでしょうか?
tnd-.-b

2016/04/11 09:07 編集

例えばこういうことです。 mHandler.postDelayed(new Runnable() {  @Override  public run() {   Ball ball = new Ball(100.0); // 新しいBallオブジェクトを   list.add(ball); // Listに追加する  } }, 1000);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問