変数トップへ|手順1|手順2|手順3 |
変数(手順−2) |
まずは、「変数完成.wfm」を起動下さい。矢印のクリックで、思ってた通り動きましたか? オリジナルと異なるところは、中央に並んだ「1〜8」までの数字が、上段の量により変化します。 すべての数字をクリアできれば完成です それと、イベントの「マウスインアウト」も付けてみました これは、矢印にマウスが乗ると色を「青→赤」そして、離れると「赤→青」へ戻します。 また、水の量も少しおしゃれに「ピクチャー」を使用してみました。 ※それでは、いまからこのフォーム作成ですが、 左図は完成版です。ここでの説明は、途中版(ゲームができるまで)です 内容は、少し装飾が違うだけです |
事前準備として・・・ 先ほど作成したファイルを複写します(前のファイルは不要な方は、名前の変更だけお願い致します) (新規作成後、前のファイルからの、複写(読み込み)で、作成する方法もありますが、普段の方法で作成してもいいです) |
○ファイル複写の方法 |
対象ファイル(今回の場合は、変数基本.wfmと変数基本.kev)を選択します。連続したファイルを選ぶときは、Shiftキーをを利用しながら、先頭と最後をクリックします。連続してない場合は、Ctrlを利用下さい 次に、複写ボタン(右図赤枠)を利用します。 ファイルコピーのダイヤログがでますので、ファイル名を変更するをチェックします。それぞれ「変数途中.wfmと変数途中.kev」に、名前を変更します。 拡張子の間違いや、「.」ピリオドの重複や削除のないよう気を付けてください |
○ファイル名変更の方法 |
ファイル名の変更は、ファイルを選択後、スペースキーを押してください。訂正モードになりますので、そこで、変更ください 名前の変更は1個づつしか行えません。 |
フォーム処理 |
以降、「複写されたかた、名前変更されたかた」共通です 注意:新しいフォーム「変数途中.wfm」は、まだ、イベントの名前が古いままです。そこで、定義で開き、フォームのオブジェクトから「イベントタブ」を選択後、イベントファイル名を「変数途中.kev」に変更してください。 また、作成していく工程で、ラベルをテキストに変更や、オブジェクトの重なり順の移動など出てきます。では、なぜ最初からテキストで作成したり、オブジェクトの重なり順を考慮した作成をしないのか? それは、「なぜ、テキストでなくてはいけないか?また重なり順までなぜ気を使わなくてはいけないのか」を説明する為です。 お手数をかけますが、是非下記順序で、お試しください。 |
追加作成するオブジェクトここでの矢印はすべて「ラベル+直線」で作成します。 |
ラベル・直線の説明。右図はわかりやすいように分解表示していますが、全て青色で作成しています。 緑の部分がラベルで、青▲の部分が直線で作成します だいたいのレイアウトが終わったら、次へ進んでください。最後に全体のバランスをみながら 再度、位置修正を行ってください (注:直線には、イベントの設定ができない為、操作は緑のラベルで行います) ラベルは、イベントを使用します(前回のように、マウス左ダウンを設定してください。10個全部です) |
量の増減用は、ラベルでもいいのですが、少しおしゃれにピクチャーにしました 右図でもおわかりのように、グラデーションの方がなんとなくイメージできるかな?程度です。量の増減は、イベント中に、計算式で行います また外側の枠(ラベル)は、その一回り大きく作成します。この枠はゲームとは一切関係ありませんが、容量が0になったときはっきりわかるようにするためです。 それぞれの名前は、ピクチャー部分は「p大量・p中量・p小量」ラベル部分は「a大器・a中器・a小器」とします ピクチャーは計算式で拡大・縮小行いますので、その容器の最大値で、作成して下さい。 「p大量・p中量・p小量」の、それぞれ作成するサイズは、 p大量:始点Y=30pt、高さ(H)=160pt・p中量:始点Y=230pt、高さ(H)=100pt・p小量:始点Y=255pt、高さ(H)=60ptです。 指定の無いところは任意ですが、画面のバランスにあわせて作成してください。また背景は、「グラデーション1」を使用しています。 色はお好みの色で、結構です。 注意:重なり順は、器ラベル「器」より、ピクチャーの方が全面になるように作成してください。 もちろん、あとで作成した方が上になりますので、説明順で作成された方は、ピクチャーが隠れてしまってますね。そのような場合は、オブジェクトリストを表示し、移動したいオブジェクトを選択後、「Shift+↑↓」を利用して、ピクチャーが表示されるように移動してください。 |
今回、オリジナルと違う部分がここです。 大器の残量が、矢印をクリックするたびに変わりますが、そのときの残量を、「1〜8」まで、出来た数の物だけオブジェクトを変更しています。 罫線を立体に設定します。(イベントで、クリアしたときに、くぼみに変更しています) |
フォーム設定の補足 さきほどせっかく作成した「b中大・b大中・b小大・b大小・b小中・b中小」はどうするの?・・・ そうですね。もったいないから、ワークスペースへでも移動しておいてください。あとでお役にたちますから・・ と、いうわけで続けます。 あとひとつ、重要なことがあります。それは、ピクチャーの位置です。イベントのなかで量の増減によって、計算式で拡大・縮小をおこないますが、そのときの基点として利用します。イベントで取得もできますが、変数が増えますので、ここでは、固定利用で、作成します。 |
イベント処理 |
それでは、イベントの説明です。(先ほどの「変数途中.kev」を、利用します。) |
変数の追加: 「名札 メイン」に下記行を追加してください。 変数宣言 文字{&Ypt,&Hpt} * それぞれの残量によって、上記ピクチャーの拡大縮小を行います。そのための変数です |
手続き追加 フォームのオブジェクト属性で、「フォーム開始」をクリック後、下記を作成します 手続き定義開始 フォーム::フォーム開始(長整数 &表番号) 手続き実行 画面更新() 手続き定義終了 *起動時に、初期変数を利用して、画面を作成します。このときの「画面更新()」は、ゲームの最中のマウスクリックでもその都度呼び出されます。 作成するときの注意は、共通部分のみを作成します。(フォーム開始は、最初1回だけ実行されます) |
イベントの修正 前回作成したイベントは、ボタン用で >手続き定義開始 b中大::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止) > ・・・ > ・・・ > ・・・ >手続き定義終了 と、なってると思います。(6種類あります)が、今回は、ラベル用です 手続き定義開始 a中大1::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止) ・・・ ・・・ ・・・ 手続き定義終了 と、変更します。変更箇所は「b中大」→「a中大1」。このイベント名ののところだけです 注:ラベル名の後ろに「1・2」が付いているのがありますが、同じ動きをします。矢印が分割されてるだけなのであたりまえですね。 その場合、「a中大1」を作成後、「a中大2」は複写で作成すれば簡単ですね。そのあと「1」を「2」に、変更します 作成後は、6個のボタン用イベントが10個のラベル用に変更されています。確認ください。 |
イベントの新規追加 大きくわけて2つのプログラムに分かれます 手続き定義開始 画面更新() メソッド呼び出し @フォーム.変数変更() *−[1]−−−−ピクチャー表示部分−−−−−−−−−−− *大図変更 Y= 30 &Ypt=#文字列( 30+(&大器-&大量)*20)+"pt" &Hpt=#文字列(&大量*20)+"pt" オブジェクト操作 @p大量{始点Y=&Ypt,高さ=&Hpt} *中図変更 Y=230 &Ypt=#文字列(230+(&中器-&中量)*20)+"pt" &Hpt=#文字列(&中量*20)+"pt" オブジェクト操作 @p中量{始点Y=&Ypt,高さ=&Hpt} *小図変更 Y=255 &Ypt=#文字列(255+(&小器-&小量)*20)+"pt" &Hpt=#文字列(&小量*20)+"pt" オブジェクト操作 @p小量{始点Y=&Ypt,高さ=&Hpt} ここでは、「大・中・小」の各量に応じて、ピクチャーを表示しています 例は、大の量として、説明しています ・最初の行はたんなるメモです。フォームの「p大量」の、始点Yの値をメモしています ・&Ypt=・・・ この行は、ピクチャーの始点Yを計算しています。計算式は、 「初期位置+(器の最大量−現在量)×20+pt」です ×20・・容量が、8の時、最大160が表示されますので、1の時は20動くように計算しています (器最大時−現在量)・・これで、あと、どれだけ入るかがわかります。それによって、開始位置の計算を行います 例:器の最大量-現在量が、「0」の場合、つまり満タン入ってるときは、計算結果は「0」になります。 その答えに、フォームの初期値を加えて開始位置の計算を行います ・&Hpt=・・・ 開始位置がきまったら高さ(大きさ)を計算します。ここは単純に、容量×20です ・オブジェクト操作 @p大量{始点Y=&Ypt,高さ=&Hpt} 容量と高さが決まったらオブジェクト操作を利用してピクチャーを変更します この作業を、「大・中・小」の3個とも行います。 ひとつひとつの操作が複雑で、時間がかかるような場合は、if文や条件等を利用して制御の必要がありますが、今回のように簡単な内容の場合は、3個とも変更(再計算)しても結構です *−[2]−−−−ゲーム進行表示部分−−−−−−−−−−− if(&大量=1) オブジェクト操作 @aクリア1.境界線モード="くぼみ" else if(&大量=2) オブジェクト操作 @aクリア2.境界線モード="くぼみ" ・・・・・・・ else if(&大量=8) オブジェクト操作 @aクリア8.境界線モード="くぼみ" end ここでは、このプログラムを呼ばれるたびに、「&大量」を調べてオブジェクトの変更を行います。 > オブジェクト操作 @aクリア?.境界線モード="くぼみ" この処理は、「aクリア?」の罫線をくぼみに変更しています。フォーム作成時は立体になっています。そこで、「&大量」が、if文と同じになったとき、指定オブジェクトの罫線の属性をくぼみにしているわけですが、上記と同様、&大量が、同じ値になることもあります。上記でも紹介いたしましたが、こんな簡単なプログラムを何重ものif文にするよりイベントコマンドで作成してください ちなみに、オブジェクトの属性は「オブジェクト操作 変数名 =@aクリア?.境界線モード」で取得できます。 メソッド呼び出し @フォーム.描画更新() 最後に、 >メソッド呼び出し @フォーム.描画更新() を、入れておきます。 手続き定義終了 |
イベント作成の補足 >手続き定義開始 a中大1::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止) > ・・・ > ・・・ > ・・・ 手続き実行 画面更新()・・・・・この行を、全手続きの最後に追加してください。 >手続き定義終了 >手続き定義開始 a中大1::マウス左ダウン(・・・・・) 上記手続きでは、 各容器の現在量をしらべているだけです。そのため、最後に「手続き実行 画面更新()」を、追加しておきます そこで、ピクチャーのサイズ変更やクリアボタンの操作を行っています。 手続きの最大の目的は、同じ処理を何度も書くのではなく、出来るだけ利用することで、効率よく作成することです。 |
ここまでのサンプルは、「変数途中」に入れてあります |
top |