第1回PowerAppsで始めるゲーム開発
今回はホールインワンゲームを作成したいと思います
完成イメージは以下になります
#PowerApps でホールインワンゲーム?を作成してみました!
— コルネ (@koruneko32767) September 6, 2019
プレー下手くそなのは温かい目で見守ってくださいw
当たり判定はわりと甘めに作成してあります pic.twitter.com/gFFYc3Ztyu
また、パッケージはこちらにあります。
コルネのOneDrive
はじめに
これからご紹介する設定方法について、名前の頭が「_」となっているものがありますが、こちらは変数として定義しているものです。
以下のように「OnStart」にて纏めて初期化しています。
OnStart
Set(_X, 0);Set(_Y, 668); Set(_t, 0); Set(_TimerFlg, false); Set(_State, 0); Set(_SliderSign, true); Set(_Slider2Sign, true); Set(_SliderValue, 0); Set(_Slider2Value, 0); Set(_Repeat, true); Set(_GoalX, Rand() * 800); Set(_ResultMessage, ""); Reset(Timer1); Reset(Timer1_1); Reset(Slider1)
状態遷移を管理する
このホールインワンゲームには以下のような状態遷移が存在します。
- 初期状態
- パワーメーターが動いている状態
- 角度を決める矢印が動いている状態
- ボールが投げられた状態
- 結果表示
この状態遷移(変数:_State)をボタン1つで管理することにします。
ボタンの「OnSelect」に以下のような式を入力します。
OnSelect
Set( _State, _State + 1 ); Switch( _State, 1, If( _SliderSign, Set( _SliderValue, _SliderValue + 1 ), Set( _SliderValue, _SliderValue - 1 ) ), 2, If( _SliderSign, Set( _Slider2Value, _Slider2Value + 1 ), Set( _Slider2Value, _Slider2Value - 1 ) ), 3, Set( _TimerFlg, true ), 4, Set( _X, 0 ); Set( _Y, 668 ); Set( _t, 0 ); Set( _TimerFlg, false ); Set( _State, 0 ); Set( _SliderSign, true ); Set( _Slider2Sign, true ); Set( _SliderValue, 0 ); Set( _Slider2Value, 0 ); Set( _Repeat, true ); Set( _GoalX, Rand() * 800 ); Set( _ResultMessage, "" ); Reset(Timer1); Reset(Timer1_1); Reset(Slider1); Reset(Slider1_1) );
Switch内で行われている細かな処理については後々記載します。
_Stateが0のときは初期状態を表しており、1のときにはパワーメーターが動いている状態、2の時には角度を決める矢印が動いている状態、3のときにはボールが投げられた状態、4で初期化を行っています。
結果の表示については、3でセットしたタイマーで行っています。
また、ボタンに表示されるテキストも状態遷移により表示を変更したいため以下のように変更します。
Text
Switch( _State, 0, "Press", 1, "Power", 2, "Angle", 3, "GO!!" )
パワーメーターの作成
まずはパワーメーターを作成します。
パワーメーターの見た目となるゲージをアイコンの四角形より選択します。
配置したアイコンの「Width」に以下のような式を入力します。
Width
_SliderValue * 3
続いてこちらのゲージの長さを変更するための仕掛けを作成します。
今回は「スライダー」によりゲージの長さを変更させます。
「スライダー」を設置し、以下のようにパラメーターを設定してください。
Default
_SliderValue
OnChange
If(_SliderValue >= Slider1.Max, Set(_SliderSign, false)); If(_SliderValue <= Slider1.Min, Set(_SliderSign, true)); If(_SliderValue = Slider1.Min, Reset(Slider1)); If(_State = 1, If(_SliderSign, Set(_SliderValue, _SliderValue + 1), Set(_SliderValue, _SliderValue - 1)))
Defaultにてスライダーの値を決定しています。
先ほど上で設定したボタンを押したときStateが1加算されるので状態1となります。状態1では、スライダーがプラス方向に増えるのか?マイナス方向に増えるのか?を判定するフラグ「SliderSign」によって_SliderValueの値を1増減しています。
これによりスライダーの値が変更されるとOnChangeが働きます。
OnChange内では、スライダーの値がスライダーに設定した最大値以上であった場合、次からはスライダーの値をマイナス方向に増やしたいので_SliderSignにはfalseを設定します。
反対にスライダーの値が最低値以下だった場合には、次からはスライダーの値をプラス方向に増やしたいので_SliderSignにはtrueを設定します。
また、スライダーの値が最低値となったタイミングでスライダーのリセットを行っているのは、キャッシュが重くなるのを防ぐためです。
気になる方は、Reset()を抜いてスライダーの値をOnChangeで変更させ続けてみたください。多分だんだん重くなってきて最終的には落ちるはずです。
最後の処理では状態が1であった場合、_SliderSignのフラグによって、スライダーの値を増減させています。
また、こちらのスライダーはユーザーには見えてほしくないものなので、表示(Visible)はオフ(false)としておきましょう。
これで、パワーメーターの作成は完了です。
長くなりそうですので、一旦こまでにします。
次回は、ボールを発射する角度を決める矢印の設定方法についてご説明したいと思います。
お楽しみに...!!