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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

2463閲覧

Android ブロック崩し canvasの描画に時間がかかる原因は?

masaakitsuyoshi

総合スコア102

Java

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

Android

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

Android Studio

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

0グッド

2クリップ

投稿2016/04/21 11:02

androidで、ブロック崩しゲームを作っています。

canvasの使用など初めてだったので、まずボールを動かしてみよう、ということで,二つボールを使って動かしてみました。

ボールの動作は問題ないのですが、アプリが起動してから画面が立ち上がるまで10秒くらいかかってしまいます。(canvasの描画に問題あり?)

重くなっているので、軽くする処理のようなものを書かないといけないのでしょうか?

具体的には、
・アプリのアイコンをタッチ
・立ち上がるが、白い画面が10秒くらい続く
・その後、MainActivityがスタートし、ボールが動きだす

この画面の起動に時間がかかる原因はなんなのでしょうか?

public class MainActivity extends AppCompatActivity { // スレッドクラス Thread mainLoop = null; // 描画用 Paint paint = null; Paint paint2 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new CustomView(this)); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); } class CustomView extends SurfaceView implements SurfaceHolder.Callback, Runnable { // 円のX,Y座標 private int circleX = 50; private int circleY = 50; private int circle2X = 30; private int circle2Y = 30; // 円の移動量 private int circleVx = 15; private int circleVy = 15; private int circle2Vx = 8; private int circle2Vy = 15; //コンストラクタ public CustomView(Context context) { super(context); // SurfaceView描画に用いるコールバックを登録する。 getHolder().addCallback(this); // 描画用の準備 paint = new Paint(); paint2 = new Paint(); paint.setColor(Color.GREEN); paint2.setColor(Color.CYAN); // スレッド開始 mainLoop = new Thread(this); mainLoop.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO 今回は何もしない。 } // SurfaceView生成時に呼び出されるメソッド。 @Override public void surfaceCreated(SurfaceHolder holder) { // 背景 Canvas canvas = holder.lockCanvas(); canvas.drawColor(Color.GREEN); holder.unlockCanvasAndPost(canvas); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO 今回は何もしない。 } @Override public void run(){ while (true) { Canvas canvas = getHolder().lockCanvas(); if (canvas != null) { canvas.drawColor(Color.GREEN); // 円1を描画する canvas.drawCircle(circleX, circleY, 60, paint); //円2を描画する canvas.drawCircle(circle2X,circle2Y,60,paint2); getHolder().unlockCanvasAndPost(canvas); // 円の座標を移動させる circleX += circleVx; circleY += circleVy; circle2X += circle2Vx; circle2Y += circle2Vy; // 画面の領域を超えた? if (circleX < 0 || getWidth() < circleX) circleVx *= -1; if (circleY < 0 || getHeight() < circleY) circleVy *= -1; if (circle2X < 0 || getWidth() < circle2X) circle2Vx *= -1; if (circle2Y < 0 || getHeight() < circle2Y) circle2Vy *= -1; } } } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

Java

1mainLoop = new Thread(this); 2mainLoop.start();

上記の処理をsurfaceCreatedに移動させてみてください。

投稿2016/04/21 18:39

yona

総合スコア18155

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

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

masaakitsuyoshi

2016/04/22 05:46

驚くほどすぐ起動するようになりました! スレッドの処理をview(CustomView)の中に書いていたのがいけなかったのでしょうか。
yona

2016/04/22 05:51

「描画領域準備の処理」と「準備完了していない描画領域への描画処理の無限ループ」が同時に動いていたので、結果として描画領域の準備処理が後回しになり、描画もできない時間が延びたと推測できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問