Power Appsマリオおじさん実用アプリ

【第3回】Power Appsでマリオもどきを作る

Power Apps

今回は、画面サイズのタブレットへの移行と汚くなってしまった変数やオブジェクトの整理をします。まとめ回でもあります。

タブレットで新規作成

新しくアプリを作成し、ラベルを追加します。

今回はちゃんとオブジェクト名つけてます

そして、前回までに作成していたオブジェクトたちをコピペしていきます。

オブジェクト、コードをコピペし終わりました。書き換えきれてない変数を見るときに、"ビュー"の"変数"がとても役立ちました。

それでは、書き換えたオブジェクト、変数を見ていきましょう。

変数

グローバル変数

Hideg

falseのときに地面のラベルが消えてスライダーなどが見えるようになります。

左上のチェックボックスでtrue/falseを切り替えます。

jumptstop

スライダーを止めるかどうかを判断するブール値です。jumpボタンを押すとfalseになります。

jumpt

ジャンプしている間の時間です。スライダーの値をそのまま使用しています。

ojisan_head

おじさんの頭の位置です。

ojisan_foot

おじさんの足の位置です。

g

重力加速度9.81です。

v0

ジャンプの初速です。現在は70に設定しています。

コンテキスト変数

Y,v

おじさんの高さ方向の位置です。普通にジャンプしたときと、途中で障害物に当たった時で式が変わります。

普通にジャンプしたとき

UpdateContext({v:(-v0+gjumpt),Y:ground.Y-ojisan.Height-v0jumpt+0.5gjumpt*jumpt})

障害物に当たった時

Reset(jumptimer);UpdateContext({v:g*jumpt,Y:block.Y+block.Height+0.5*g*jumpt*jumpt})

falling

おじさんが落下しているかどうかを判別します。

jumping

途中で障害物に当たったかどうかを判別します。

オブジェクト

groundhide

地面を表示するかどうかのチェックボックスです。地面の下にはスライダーなどが隠れています。

Set(Hideg,true) //  OnCheck
Set(Hideg,false)  // OnUncheck

block

ただのブロックです。まだ破壊できません。ワッフルメニューの色を変えています。

164  //  Y

jump

押すとおじさんがジャンプするボタンです。

OnSelect

Set(jumptstop,!jumptstop);  // jumpstopをfalseにする
If(!jumptstop,Reset(jumptimer));
  //  !jumpstopなら、jumptimerをリセット
Set(jumpt,0);Set(v0,70);UpdateContext({falling:false,jumping:true}) //  それぞれの定数、変数を定義

ground

今は特に重要なコードなどは割り当てていません。

Hideg=true //  Visible

ojisan

おじさんです。移動させるだけで処理は他のオブジェクトでやっているのでコードはY軸の指定以外ないです。

Y  //  Y

jumptimer

ジャンプで一番重要なオブジェクトです。その分コードも長くなっています。

OnChange

If(jumptstop,"",Set(jumpt,jumpt+0.1)); //  時間 
If(jumping=true,UpdateContext({v:(-v0+g*jumpt),Y:ground.Y-ojisan.Height-v0*jumpt+0.5*g*jumpt*jumpt}),Reset(jumptimer);UpdateContext({v:g*jumpt,Y:block.Y+block.Height+0.5*g*jumpt*jumpt})); // 速度、位置
Set(ojisan_foot,Y+ojisan.Height);Set(ojisan_head,Y); // おじさんの足と頭の位置を設定
If(v>0,UpdateContext({falling:true}),UpdateContext({falling:false}))
; // 速度が正なら落下していると判断
If(falling=true,If(ojisan_foot>ground.Y,Set(jumptstop,true);UpdateContext({Y:ground.Y-ojisan.Height}),"")); // 落下している時に地面よりに足の位置が超えたら地面と足の位置を合わせる
If(falling=false,If(ojisan_head<block.Y+block.Height,UpdateContext({jumping:false}))) // 上昇している時にブロックにぶつかると通常のジャンプではないと判断

Default

jumpt

OnStartに設定するボタン

デバッグ画面を起動したときにはOnStartが開始されないので、OnStartに設定するボタンを作ります。

Set(g,9.81);UpdateContext({falling:false}) //  それぞれの定数、変数を定義

まとめ

今回は画面サイズのタブレット化、関数とオブジェクトの整理をしました。今回のように数回に一度まとめ回をしますので、コピペだけで作ってみたいという方はまとめ回だけ見るのもいいかもしれません。

コメント

タイトルとURLをコピーしました