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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

1411閲覧

画像を特定の位置に動かしたときに、ダイアログを表示させるには

S.I

総合スコア48

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/11/01 08:40

編集2017/11/06 08:02

画面右側は問題、操作画面(上下左右)、左側でねこが動きます。
実現したいことは、ねこ(MyCat)が犬(inu)の位置に到達したらエラーのダイアログを表示させたいです。
ここでは、座標で指定するのか、ボタンを→↑↑もしくは↑↑→などどと押した場合に表示させるのか、どういった方法が良いのでしょうか。

java

1 2public class MainActivity extends AppCompatActivity { 3 final static float TRANSLATE_X = 300.0f; // 1回の操作でX軸方向にいくつ動かすか 4 final static float TRANSLATE_Y = 300.0f; // 1回の操作でY軸方向にいくつ動かすか 5 6 // 盤面上の開始座標を初期値として設定する 7 private int x = 0; 8 private int y = 0; 9 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 16 Button button1 = (Button) findViewById(R.id.button1); // うえ 17 Button button2 = (Button) findViewById(R.id.button2); // した 18 Button button3 = (Button) findViewById(R.id.button3); // ひだり 19 Button button4 = (Button) findViewById(R.id.button4); // みぎ 20 Button button5 = (Button) findViewById(R.id.button5); // やりなおし 21 Button button6 = (Button) findViewById(R.id.button6); // こたえあわせ 22 23 button1.setOnClickListener(new View.OnClickListener() { 24 @Override 25 public void onClick(View v) { 26 // 「うえ」を押したときの処理 27 if (y > -3) { 28 float start = TRANSLATE_Y * y; 29 float end = start - TRANSLATE_Y; 30 animationImageView("translationY", start, end); 31 y--; 32 } 33 } 34 }); 35 button2.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 // 「した」を押したときの処理 39 if (y < 0) { 40 float start = TRANSLATE_Y * y; 41 float end = start + TRANSLATE_Y; 42 animationImageView("translationY", start, end); 43 y++; 44 } 45 } 46 }); 47 button3.setOnClickListener(new View.OnClickListener() { 48 @Override 49 public void onClick(View v) { 50 // 「ひだり」を押したときの処理 51 if (x > 0) { 52 float start = TRANSLATE_X * x; 53 float end = start - TRANSLATE_X; 54 animationImageView("translationX", start, end); 55 x--; 56 } 57 } 58 }); 59 button4.setOnClickListener(new View.OnClickListener() { 60 @Override 61 public void onClick(View v) { 62 // 「みぎ」を押したときの処理 63 if (x < 2) { 64 float start = TRANSLATE_X * x; 65 float end = start + TRANSLATE_X; 66 animationImageView("translationX", start, end); 67 x++; 68 } 69 } 70 }); 71 button5.setOnClickListener(new View.OnClickListener() { 72 @Override 73 public void onClick(View v) { 74 x = 0; 75 y = 0; 76 animationImageReset(); 77 } 78 }); 79 80 } 81 82 private void animationImageView(String property, float start, float end) { 83 ImageView imageView = (ImageView) findViewById(MyCat); 84 ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, property, start, end); 85 animator.setDuration(1000); 86 animator.start(); 87 } 88 89 private void animationImageReset() { 90 final ImageView MyCat = (ImageView) findViewById(R.id.MyCat); 91 ObjectAnimator.ofFloat(MyCat, "translationX", 0.0f, 0.0f).start(); 92 ObjectAnimator.ofFloat(MyCat, "translationY", 0.0f, 0.0f).start(); 93 } 94}

java

1public class MyView extends View { 2 public MyView(Context context) { 3 super(context); 4 } 5 6 public MyView(Context context, AttributeSet attrs) { 7 super(context, attrs); 8 } 9 10 Paint paint = new Paint(); 11 12 Bitmap house = BitmapFactory.decodeResource(getResources(), R.drawable.house); 13 Bitmap inu = BitmapFactory.decodeResource(getResources(), R.drawable.inu); 14 15 16 @Override 17 protected void onDraw(Canvas canvas) { 18 paint.setColor(Color.argb(255, 0, 0, 0)); 19 20 paint.setStyle(Paint.Style.STROKE); 21 canvas.drawRect(50, 50, 1000, 1300, paint); 22 canvas.drawLine(367, 50, 367, 1300, paint); 23 canvas.drawLine(683, 50, 683, 1300, paint); 24 canvas.drawLine(50, (float) 362.5, 1000, (float) 362.5, paint); 25 canvas.drawLine(50, 675, 1000, 675, paint); 26 canvas.drawLine(50, (float) 987.5, 1000, (float) 987.5, paint); 27 28 canvas.drawBitmap(house, 700, 100, paint); 29 canvas.drawBitmap(inu, 380, 380, paint); 30 31 } 32}

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

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

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

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

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

guest

回答2

0

ベストアンサー

盤面のどこに猫がいるかを管理するためにxとyを用いているわけですから、犬の衝突もxとyで判定すればいいのでは。yは負の値を取るように作っているようだから、

Java

1 private boolean encountDog() { 2 if (x == 1 && y == -1) { 3 return true; 4 } 5 return false; 6 }

こんな判定をするメソッドを作ればいいのでは?これをbutton1からbutton4までを押したonClickの処理の最後で呼び出し、trueが返ったのならダイアログを表示する処理を実装すればいいでしょう。

投稿2017/11/01 08:51

keicha_hrs

総合スコア6766

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

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

S.I

2017/11/02 11:49

ご回答ありがとうございます!質問なのですが、button1からbutton4までを押したonClickの処理の最後で呼び出すためのコードは、button1からbutton4までそれぞれの.setOnClickListener(new View.OnClickListener() { 以下に記述するのでしょうか。
keicha_hrs

2017/11/02 12:03

button1からbutton4のonClick()の中に記述することは確かですが、そのどこに挿入すべきかはよく考えましょう。猫を動かした後に衝突判定をするわけですから、その意味を考えれば場所の答えは出てくるはずです。
keicha_hrs

2017/11/02 12:05

毎度、「丸写しで動く回答」を記してしまった私も悪いのですが、プログラムというのは順序通りに動くものですから、どの行がどういう意味を為しているのかをよく考えるべきでしょう。今まで動いている部分を「定型文」のように考え、丸写し以上の意味を考えていないのだとしたら、それは良くないです。
S.I

2017/11/02 12:30

すみません。「定型文」などとは考えておらず、keicha_hrs様にコメントいただいた回答の各行の意味をひとつずつ確認して考えて記述はしています。ただ、次の機能をつけようと思ったときになかなか一から自分で作りだすことができないため、こちらで質問させていただいています。自分の勉強不足だと反省しています…言い訳をして申し訳ありません…
keicha_hrs

2017/11/02 12:49 編集

定型文というのは言葉が過ぎました。申し訳ないです。ただ、画面作りはよくここまで出来たと思うんですよね。それなりの理解がなければここまで作り込めませんし、プログラムの方ももう少し頑張れたらなと。
S.I

2017/11/02 13:08

keicha_hrs様の提案を参考にじっくり自分で考えていこうと思います。ありがとうございます。プログラムをもっと頑張ります…
S.I

2017/11/06 07:18

encountDogという文字部分がどうしてもグレーになってしまいます。これを使用可能なメソッドにするための宣言がわからないです…なにかヒントいただけないでしょうか…
keicha_hrs

2017/11/06 07:52 編集

button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 「うえ」を押したときの処理 if (y > -3) { float start = TRANSLATE_Y * y; float end = start - TRANSLATE_Y; animationImageView("translationY", start, end); y--; if (encountDog()) { // ダイアログを描画する処理 } } } }); これをボタンごとに記述するだけです。要するに、「ボタンを押して、猫をアニメーションして、xまたはyの値を操作して、その後に判定しましょう」という話です。onClick()の処理早々にencountDog()を実行してしまうと、猫が動く前に衝突したダイアログが出てしまいます。それではまずいですよね。また、xまたはyを加減しないうちに判定したら、誤判定になってしまいます。(ちょっと修正。後出しでごめんなさい)
S.I

2017/11/06 07:50

できました…すみません!! 本当にありがとうございます(T・T)
guest

0

座標がいいですね。
仮に↑↑↑→↓とされた場合エラーが出ないことになってしまいます、犬までのルートはほぼ無限に想定されるため定義も難しいかと思います。

投稿2017/11/01 08:50

編集2017/11/01 08:51
hien

総合スコア69

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問