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; } } } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/22 05:46
2016/04/22 05:51