複数機種に対応したコードを書くコツ (例:画面の縦横比で配置を変えるには?) ・より実践的には… 分岐の中では座標計算のみを行う。 ・描画は分岐の外で行うと、一か所に纏められる。 ・さらに、描画処理を自作関数化しておくと、 呼び出し側の記述をシンプルにできます。 ・この例では fillRect1 と fillRect2 が自作関数。 関数内で、引数の座標に描画すれば OK! int w = M5.Display.width(); int h = M5.Display.height(); int x = 0, y = 0; if (w >= h) { w /= 2; // 描画幅を半分に x = w; // X座標を変更 } else { h /= 2; // 描画高さを半分に y = h; // Y座標を変更 } fillRect1(0, 0, w, h); fillRect2(x, y, w, h);
複数機種に対応したコードを書くコツ (例:操作方法を共通化するには?) ・例えばメニュー画面を自作するとき、 「ボタンA」= 左移動 「ボタンB」= 決定 「ボタンC」= 右移動 という操作方法を実装した場合 … if (M5.BtnA.wasClicked()){ // 左移動操作 } if (M5.BtnB.wasClicked()){ // 決定操作 } if (M5.BtnC.wasClicked()){ // 右移動操作 } A B C
複数機種に対応したコードを書くコツ (例:操作方法を共通化するには?) ・CoreInkやPaperは そのままでも大丈夫そう。 ・しかしStickC/CPlusにはボタンCがないので、 右移動の操作ができない。 また、できればボタン Aを決定操作にしたい。 A B C A B C A B PWR EXT PWR if (M5.BtnA.wasClicked()){ // 左移動操作 } if (M5.BtnB.wasClicked()){ // 決定操作 } if (M5.BtnC.wasClicked()){ // 右移動操作 }
・M5.getBoard関数で機種別に分岐を作れば OK! ・StickC/CPlusの場合のみ判定内容を変えて、 PWR = 左移動 A = 決定 B = 右移動 とする。 A B C A B C A B PWR HAT PWR 複数機種に対応したコードを書くコツ (例:操作方法を共通化するには?) switch (M5.getBoard()) { case m5gfx::board_M5StickC: case m5gfx::board_M5StickCPlus: // StickC/CPlus用の操作判定 // PWR=左移動,A=決定,B=右移動 break; default: // それ以外の機種用の操作判定 // A=左移動,B=決定,C=右移動 break; }