RGBの携帯Java入門

 
共通事項  ※「アプリ作成の流れ」で作成した「MainCanvas.java」のメソッドの説明です。
1.描画の開始終了
2.文字の描画
3.長方形の描画
4.描画色の設定
5.画像の描画
6.キーの処理
7.画面遷移の処理

■画面遷移について
各画面を「シーン(scene)」という単位に分けて処理を行います。
(本によっては、sectionやscreenという名前を使用する場合がありますが、ここでは一般的である「scene」という名前を使用することとします)
各シーンごとにメソッドを作成し、controlSceneメソッド内でシーンの振り分け処理を行います。
「画面」とはユーザー(ゲームをプレイしてくれる人)の視点からみた場合の分割単位であり、「シーン」はプログラマーからみた場合の分割単位です。
はじめのうちは、画面≒シーンと捉えても構いません。

■サンプルソース
下図のような画面遷移をサンプルとして作成してみます。



「アプリ作成の流れ」で作成した「MainCanvas.java」(ソース雛形は1.0)

  • sceneInitメソッド
  • sceneTitleメソッド
  • scenePlayメソッド
  • sceneResultメソッド

  • を削除し、以下の内容に置き換えます。

    
    	/**
    	* 「初期化」シーンを制御します。
    	*/
    	public void sceneInit() {
    		// --------------------
    		// シーン初期化処理
    		// --------------------
    		if(firstScene()) {
    			changeScene(SC_TITLE);
    			return;
    		}
    	}
    	
    	
    	/**
    	* 「タイトル」シーンを制御します。
    	*/
    	public void sceneTitle() {
    		// --------------------
    		// シーン初期化処理
    		// --------------------
    		if(firstScene()) {
    		}
    		
    		// --------------------
    		// キー処理
    		// --------------------
    		if(keyPressing(KEY_SELECT)) {
    			changeScene(SC_PLAY);
    			return;
    		}
    		
    		// --------------------
    		// 描画処理
    		// --------------------
    		draw(true);
    		
    		setColor(255, 255, 255);
    		fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
    		
    		setColor(255, 0, 0);
    		drawString("タイトル画面です", 10, 10);
    		
    		draw(false);
    	}
    	
    	
    	/**
    	* 「プレイ」シーンを制御します。
    	*/
    	public void scenePlay() {
    		// --------------------
    		// シーン初期化処理
    		// --------------------
    		if(firstScene()) {
    		}
    		
    		// --------------------
    		// キー処理
    		// --------------------
    		if(keyPressing(KEY_SELECT)) {
    			changeScene(SC_RESULT);
    			return;
    		}
    		
    		// --------------------
    		// 描画処理
    		// --------------------
    		draw(true);
    		
    		setColor(255, 255, 255);
    		fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
    		
    		setColor(0, 255, 0);
    		drawString("プレイ画面です", 10, 10);
    		
    		draw(false);
    	}
    	
    	
    	/**
    	* 「結果」シーンを制御します。
    	*/
    	public void sceneResult() {
    		// --------------------
    		// シーン初期化処理
    		// --------------------
    		if(firstScene()) {
    		}
    		
    		// --------------------
    		// キー処理
    		// --------------------
    		if(keyPressing(KEY_SELECT)) {
    			changeScene(SC_TITLE);
    			return;
    		}
    		
    		// --------------------
    		// 描画処理
    		// --------------------
    		draw(true);
    		
    		setColor(255, 255, 255);
    		fillRect(0, 0, AREA_WIDTH, AREA_HEIGHT);
    		
    		setColor(0, 0, 255);
    		drawString("結果画面です", 10, 10);
    		
    		draw(false);
    	}
    
    			

    置き換えたらビルドし、起動します。
    決定キーを押すたびに画面が切り替わることを確認してください。


    ■サンプルソース説明
  • firstSceneメソッド
  • そのシーンの初期化処理をif文内に記述します。
    firstSceneメソッドはシーンが切り替わったときに1度だけtrueを返します。

    ※ソース雛形1.1以降の場合
    ソース雛形1.1以降の場合は、初期化処理終了後に「firstSceneEnd()」を実行してください。

    	if(firstScene()) {
    		// 初期化処理
    		
    		
    		// 初期化終了(if文の最後に記述)
    		firstSceneEnd();
    	}
    

  • changeSceneメソッド
  • シーンを変更する場合に使用します。引数にはシーンIDを渡します。
    誤動作を防ぐため、changeSceneメソッドの次行にはreturn文を記述してください。

  • sceneInitメソッド
  • ゲームの初期化を行うシーンです。
    今回はサンプルということで何もしていませんが、本来は画像の読み込み処理等のゲームを行うための準備を行います。
    シーン初期化処理で、changeScene(SC_TITLE)を使用し、タイトル画面に遷移させています。

  • sceneTitleメソッド
  • タイトルを表示するシーンです。
    背景色を白く塗りつぶし、赤文字で「タイトル画面です」と描画しています。
    キー処理では、keyPressing(KEY_SELECT)) を使用し、決定キーが押されたらプレイ画面に遷移させています。

  • scenePlayメソッド
  • ゲーム開始から終了までを表示するシーンです。
    背景色を白く塗りつぶし、緑文字で「プレイ画面です」と描画しています。
    キー処理では、keyPressing(KEY_SELECT)) を使用し、決定キーが押されたら結果画面に遷移させています。

  • sceneResultメソッド
  • ゲーム結果を表示するシーンです。
    背景色を白く塗りつぶし、青文字で「結果画面です」と描画しています。
    キー処理では、keyPressing(KEY_SELECT)) を使用し、決定キーが押されたらタイトル画面に遷移させています。

    ■シーンを増やす
    サンプルでは基本的な4シーンを作成しましたが、ゲームの仕様によっては4シーンでは足りない場合があります。
    ここでは、タイトル画面とプレイ画面の間にメニュー画面を追加する例を説明します。

    (1)シーンIDの追加
    現在は既に以下のシーンIDが宣言されています。

    public static final int SC_INIT = 0;
    public static final int SC_TITLE = 1;
    public static final int SC_PLAY = 2;
    public static final int SC_RESULT = 3;

    3まで使われているので4を使用することにし、以下の宣言を追加します。

    public static final int SC_MENU = 4;

    (2)controlSceneメソッドの修正
    新しいシーンが追加されたので、シーンの振り分け処理を行っているcontrolSceneメソッドを修正します。
    switch文の中に、以下の処理を追加します。

    case SC_MENU : sceneMenu();
    break;

    ※ソース雛形1.1以降の場合
    ソース雛形1.1以降の場合は、「keySceneメソッド」「paintSceneメソッド」も修正します。

    (3)sceneMenuメソッドの追加
    メニューシーンの処理が記述されたsceneMenuメソッドを作成します。
    他のシーンメソッドを参考に作成してください。
    決定ボタンが押されたら、プレイ画面に遷移する処理を記述します。

    ※ソース雛形1.1以降の場合
    ソース雛形1.1以降の場合は、「keyMenuメソッド」「paintMenuメソッド」も追加します。

    (4)他シーンの遷移処理を修正
    タイトルシーンにおいて、決定ボタンが押されたらメニュー画面に遷移するように処理を修正します。

    これでシーンの追加は完了です。ビルドして確認してください。
    シーンIDに付けられた数字はあくまで識別番号であり、画面遷移順を決定するものではないということに注意してください。

     
    RGBの携帯Java入門

    Copyright (c) RGB