Viewでタッチ入力する

1.開発目標

このページの目標は、画面タッチで、画面の中を行ったり来たりしているゴブリンをジャンプさせることです。このためには、タッチイベントを取得します。

2.タッチイベントを受け取る

Androidでは、タッチ入力のイベントは簡単に取得できます。画面に触ったとき、指を動かしたとき、指を放したときなどに実行される専用のメソッドがあります。ので、この中で変数の値を変えれば、動きを変えることができます。

SampleView.java

package sample.android.usingview;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

class SampleView extends View {
    Paint paint = new Paint();
    int playerX = 250;
    int playerVX = 10;
    
    //画像読み込み
    Resources res = this.getContext().getResources();
    Bitmap grass = BitmapFactory.decodeResource(res, R.drawable.grass);
    Bitmap goburin = BitmapFactory.decodeResource(res, R.drawable.goburin);
    
    public SampleView(Context context) {
        super(context);
    }
    
    @Override
    public void onDraw(Canvas c) {
        …略…
    }
    
    public boolean onTouchEvent(MotionEvent me) {
        //タッチされた時
        if(me.getAction() == MotionEvent.ACTION_DOWN) {
        }
        
        return true;
    }
}

3.ゴブリンをジャンプさせる

画面がタッチされると、実行中の処理を中断して、onTouchEventメソッドが実行されます。この中で、変数を変化させると、動きが変わります。

SampleView.java

package sample.android.usingview;

import android.content.Context;
…略…

class SampleView extends View {
    Paint paint = new Paint();oburin);
    int playerX = 250;
    int playerVX = 10;
    int playerY = 150;
    int playerVY = 0;
    
    //画像読み込み
    Resources res = this.getContext().getResources();
    Bitmap grass = BitmapFactory.decodeResource(res, R.drawable.grass);
    Bitmap goburin = BitmapFactory.decodeResource(res, R.drawable.goburin);
    
    public SampleView(Context context) {
        super(context);
    }
    
    @Override
    public void onDraw(Canvas c) {
        //数値処理
        playerX += playerVX;
        if(playerX<0 || 480<playerX) playerVX *= -1;
        playerY += playerVY;
        playerVY += 4;
        if(playerY>150) playerY = 150;
        
        //描画処理
        c.drawBitmap(grass, 0, 0, paint);
        c.drawBitmap(goburin, playerX, playerY, paint);
        
        //ループ処理(onDrawを実行)
        invalidate();
        
        //ウェイト処理
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }
    
    public boolean onTouchEvent(MotionEvent me) {
        //タッチされた時
        if(me.getAction() == MotionEvent.ACTION_DOWN) {
            playerVY = -20;
        }
        
        return true;
    }
}

4.開発結果

これで画面をタッチするとゴブリンがジャンプするはずです。実行してみます。

静止画では分からないですが、ゴブリンが行ったり来たりしています。画面をタッチするとゴブリンがジャンプしました。これだけできればアイデアしだいでゲームが作れそうです。ただ無音では少し寂しいです。次回は、BGMと、ジャンプする時に効果音を鳴らしてみます。