2011年5月11日水曜日

ランダムクラスを使って色の変更を行う

ランダム処理を使って色の変更を行う。

ただ色の変更を行っても面白くないので、画面にタッチしながら色の変更をする仕組みを作る。

色の変更について。
ランダムクラスを使って色の変更をする仕組み。

Androidの色の描画は、PaintクラスのsetColor()メソッドで指定する。
このsetColor()メソッドの引数の中身にColorクラスを入れて、Colorクラスの
色の定義がされているメソッドやrgb()メソッド、又はargb()メソッドで数字を指定して
使用する方法があるが今回の場合は、rgb()メソッドを使用して作る。

rgb(int red,int green,int blue)メソッドの引数は、int型の数字を使用して色を設定する。
Androidの色の数字は、赤、緑、青ともに0~255の数字が当てられている。

この数字をランダムクラスに使用する。

ランダムクラスの設定
上記の色の数字を入れるのではなく、0~255なので、0番~255番の色が
あるという考え方になるので、256個あるということになる。

ランダムクラスのnextInt(int n)メソッドを使用し、この引数に256と言う数字を
入れることによって、ランダムに0番~255番の色が出力される。

作り方
まず、色の変更のみの場合

int型の変数
nextInt()メソッドで得た値を代入し、rgb()メソッドで使用する
private int red,green,blue;

ランダムクラスのインスタンス変数
private Random random;

コンストラクタの中身
ランダムのインスタンスの作成
random=new Random();

色を変更させるメソッドの作成
public void changeColor() {
この中でnextInt()メソッドを使う
//red
red=random.nextInt(256);
//green
green=random.nextInt(256);
//blue
blue=nextInt(256);
}

描画設定
public void draw(Canvas canvas) {
//色の設定
//changeColor()メソッドで記述したコードのred,green,blueを
//rgb()メソッドの引数に当てる
Paint paint=new Paint();
paint.setColor(Color.rgb(rec,green,blue));

//画面の色を変えるだけ
paint.setStyle(Paint.Style.Fill);
Rect rect=new Rect(0,0,getWidth(),getHeight);
canvas.drawRect(rect,paint);
}

SurfaceViewを使用しているので、
runメソッドの中身に上記で記述したdrwa()メソッドを呼び出す。
public void run() {
Canvas canvas;
while(thread!=null) {
//ダブルバッファリングのロック処理
canvas=holder.lockCanvas();
//色番号の変更
changeColor();
//描画
draw(canvas);
//ダブルバッファリングのアンロック処理
holder.unlockCanvasAndPost(canvas);
try {
Thread.sleep(30);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}

これで、取り合えず、画面全部の色がランダムに変わる。

タッチイベントを使って作る
今度は、タッチして何か落書きをしながら色をランダムに変える仕組みを作る。

タッチイベントで文字を書いたり絵を描いたりする設定については割愛する。
変更するのは、changeColor()メソッドをタッチイベントのメソッドの中に記述すること、それから、
Paint paint=new Paint();
paint.setColor(Color.rgb(rec,green,blue));
をfor(int i=0;i<draw.size();i++) {}
のブロック内に記述する事の2つ。
※上記で作った画面全体を使って色の変更を設定したRectクラスと、
drawRect()は削除しておく。
(タッチイベントで描画する方法はタッチイベントで文字を書いたり絵を描いたりするを参照)

これで、描画している最中に色が変化するようになる。
が、今回の設定だと描画している最中に前に描画した色まで変化する。

Android reference クラス:Color・・・メソッド:rgb(int red, int green, int blue)
Android reference クラス:Random・・・メソッド:nextInt(int n)
Android reference クラス:Paint・・・メソッド:setColor(int color)

その他、ランダム設定関連
Androidでゲーム シューティングゲームっぽい物。その2:敵1体をランダムに出現させる

その他、タッチイベント関連
タッチイベントで文字を書いたり絵を描く
タッチした方向に描画した円を発射する
タッチした方向に描画した円を発射する。その2
Androidでゲーム ブロック崩し編 3回目:板画像のタッチ操作
Androidでゲーム ブロック崩し編 4回目:タッチ操作が出来る範囲と出来ない範囲を作る
タッチイベントを使って、画像を回転させる
Androidのタッチイベントを使ってアニメーションを動作させる
完成品

0 件のコメント:

コメントを投稿