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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

2回答

1798閲覧

Andoird ブロック崩し drawRectで描いた短形をタッチで動かすには?

masaakitsuyoshi

総合スコア102

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2016/04/27 10:22

androidでブロック崩しを作っています。
drawRectでボールを弾くバーを作成、タッチしたらx軸で左右に移動するようにしたいです。

if(bar.x + bar.half_size < touch_x){ bar.right(touch_x); }else{ bar.left(touch_x); }

このようなコードをMainに記述して動かしたいのですが、このbarに、drawRectで描いた短形を対応させる?のはどうしたらいいでしょうか?

または別のやり方の方が賢いですか?

Main

while (true) { Canvas canvas = getHolder().lockCanvas(); if (canvas != null) { //背景 canvas.drawColor(Color.BLACK); view_w = canvas.getWidth(); view_h = canvas.getHeight(); touch_x = view_w/2; // バーを生成 view_w/2画面の半分 bar = new Bar( view_w/2 , view_h - 100 ); //バーを描画する left top right bottom canvas.drawRect(bar.x - bar.halfBar , bar.y , bar.x + bar.halfBar , bar.y + 20 , paint3); //Ballクラスからボールを描画 canvas.drawCircle( ball.x, ball.y, ball.size , paint5); //Ballクラスのmoveメソッド ball.x += ball.vx; ball.y += ball.vy; if (ball.x < 0 || getWidth() < ball.x) ball.vx *= -1; if (ball.y < 0 || getHeight() < ball.y) ball.vy *= -1; getHolder().unlockCanvasAndPost(canvas); } }

Bar

public class Bar { //表示座標 public float x; public float y; //バーのサイズ public final float halfBar = 100; //コンストラクタ public Bar( int _x, int _y ){ //初期座標をセット x = (float)_x; y = (float)_y; } // 右移動 public void right(float touch_x){ x = touch_x - halfBar;//x座標に,タッチされた座標-バーの半分の長さ } // 左移動 public void left(float touch_x){ x = touch_x - halfBar;//x座標に,タッチされた座標-バーの半分の長さ } }

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

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

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

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

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

guest

回答2

0

whileループ内の
bar = new Bar( view_w/2 , view_h - 100 );
は繰り返し毎にBarオブジェクトを生成します。メモリ効率が悪いのでwhileの外に出したほうがいいと思います。バーはゲーム中はずっと生きているので一度インスタンスを生成すれば十分なはずです。
システム内部でメモリが自動的に開放されるとはいえ処理落ちなどの要因になるかもしれません。

投稿2016/04/27 12:45

TaroToyotomi

総合スコア1430

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

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

masaakitsuyoshi

2016/04/28 05:01

なるほど。 今回は記述してませんでしたが、Blockもwhileループの中で記述してます。 今後ブロックにボールがぶつかった時にブロックを消したいんですが、Blockもwhileの外に出した方がいいですよね。
guest

0

ベストアンサー

SurfaceViewにOnTouchEventをオーバーライドして、触った位置によってバーの位置を変えたらいいですよ

投稿2016/04/27 12:35

yona

総合スコア18155

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問