Open2

Processing(4.0+)で使えそうなテクニック

0x4C0x4C

Processingでゲームを開発する際に様々なテクニックを見つけたので、思いつく限り紹介しようと思う。
もしかしたら記事にするかも。

0x4C0x4C

Processingでリフレクションを使う

出現する敵のデータを外部ファイルで管理するときによく使う。

使い方

取り合えずサンプルコード

import java.lang.reflect.*;

//インスタンス生成のためにスケッチの実体を保存
PApplet myself;

void setup(){
  myself=this;
  try{
    //文字列からクラス"Example"を取得
    //"$"はインナークラスを指定するもの
    Class<?> target_class=Class.forName(myself.getClass().getName()+"$Example");
    //取得したクラスのコンストラクタを取得
    Constructor target_constructor=target_class.getDeclaredConstructor(myself.getClass());
    //publicでなくても呼び出せるようにする
    target_constructor.setAccessible(true);
    //インスタンスを生成
    //親クラス/インターフェースがあるとより使いやすい
    Parent p=(Parent)target_constructor.newInstance(myself);
  }catch(Exception e){
    //クラスやコンストラクタが見つからなかった時のエラーハンドリング
    e.printStackTrace();
  }
}

//サンプルコード用のクラス
class Parent{}

class Example extends Parent{}

プチ解説

基本的には通常のリフレクションと変わらないが、Processingではインスタンス生成時にはスケッチ自体のクラスの情報が必要という厄介な点がある。

というのも、Processingで記述したスケッチ内で定義したクラスは、全て「スケッチ自体のクラスのインナークラス」として扱われる。
なので、Processingでリフレクションを使用する際にはインナークラスに対するリフレクションの手続きを踏まなければならない。

参考用

https://rennnosukesann.hatenablog.com/entry/2017/08/19/012218

https://coneta.jp/article/0425604e-e01d-480a-ab70-0b991eaf6eba/