画面の切り替え
今回の処理では冒険者の登録と前に戻るの処理のみ実装してます。
他のメニューも基本的には同じ処理をさせる予定なのでまずはこれだけで見ていきます。
最初は描画処理から見ていきたいと思います。
今回は描画をする前に今は初期画面なのか登録画面なのかを見ています。
初期画面なら画面にメニューを表示。登録画面なら登録メニューを表示させるようになってます。
登録画面を表示するのにCharaクラスを新規に作成しました。
状態が登録画面のときにはChara.draw(g)でCharaクラスのdraw(g)を呼び出しています。
カーソルの描画はどの画面でも共通なので、画面に左右されずに常に描画しています。
public void paintComponent(Graphics g){
super.paintComponent(g);
//登録画面の場合
if(makeChara){
chara.draw(g);
}else{
//メニューを画面に表示
for(int i=0;i<menuList.length;i++){
g.drawString(menuList[i],x,y+CL*i);
}
}
//カーソルの描画
g.drawImage(cursorImage,dx-CL,dy-CL,this);
}
次にCharaクラスのソースです。
基本的に初期画面のメニュー表示と同じことをやっているだけです。
ただ前回までの処理にはムダがありました。メニューの数をわざわざint型で定義していました。
実は配列の長さを取得するには.lengthという便利なものがありました。
なので今回から.lengthを使用しています。
キャラクターの名前をランダムで決定する処理が入ってますが今回は関係ありません。
private String[] addMenu={"名前の入力","[[職業の選択]]","決定する","前に戻る"};
private int x,y;
private int CL;
//キャラクターの名前
private String NAME;
private Random rand=new Random();
public Chara(int x,int y,int CL){
this.x=x;
this.y=y;
this.CL=CL;
//キャラの名前をランダムに取得
NAME=charaName[rand.nextInt(4)];
}
public int addMenu(){
//登録画面のメニューの長さを返す
return addMenu.length;
}
public void draw(Graphics g){
for(int i=0;i<addMenu.length;i++){
g.drawString(addMenu[i],x,y+CL*i);
}
}
最後にキーの処理になります。
だんだん処理が増えていきます(笑)
やっている事はpaintComponentの処理と似たようなものです。
今が初期画面なのか登録画面なのかを見て、それぞれの処理をしています。
注意点としては登録画面から初期画面に戻ったときにカーソルの位置も戻してやらないと
変なところにカーソルが描画されてしまいます。
if(key==KeyEvent.VK_DOWN){
//カーソル位置を下に移動
this.dy+=CL;
//最初の画面を表示している場合
if(!makeChara){
//1番下のメニューを超えた場合
if(dy>y+(CL*menuList.length-CL)){
this.dy=y+(CL*menuList.length-CL);
}
//登録画面にいる場合
}else{
//1番したのメニューを超えた場合
if(dy>y+(CL*chara.addMenu()-CL)){
this.dy=y+(CL*chara.addMenu()-CL);
}
}
}
if(key==KeyEvent.VK_SPACE){
//最初の画面を表示している場合
if(!makeChara){
if(dy==y){
makeChara=true;
}
//登録画面にいる場合
}else{
//前に戻るの処理を追加
if(dy==y+(CL*chara.addMenu()-CL)){
makeChara=false;
dy=y;
}
}
}
//再描画
repaint();
}
- サンプルのJARファイルはスポンサーリンクの↓に張ってあるので自由にダウンロードしてくださぃ♪
最終更新:2008年06月24日 13:32