-
【自作ゲーム紹介】にわとりのおつかい
タイトル…にわとりのおつかい
ジャンル…パズル・アクション
制作名義…荒上理紗斗
-----
3歩進むとおつかいリストを1つ忘れるニワトリを操作して、おつかいを成功させるパズルアクションゲーム。
全て忘れてしまった時点でゲームオーバーです。
道中、こういったアイテムが落ちています。
薬を拾うと記憶を1つ取り戻し、黄色い!マークを拾うと記憶を1つ失います。
プレイはこちらから(アツマールで無料で遊べます)
-----
【制作秘話】
「あほげー」第28回参加時の作品。
テーマが「にわとり」だったのでこのテーマになりましたが、若干パンチが効いていないなという印象も…
次回開催ではもっとファンキーでクレイジーな作品を作ってみたいものですw -
JavaScript歴1年ちょいのペンギンがアツマールのAPIについて語る
ハイ皆さんこんにちは。青いペンギンこと荒上理紗斗(あらがみ りさと)です。
本日は、RPGアツマールの各種APIについてちょっとだけ語っていこうと思います。
最近、RPGアツマールさんではAPIを使った様々なサービスが提供されています。
「スコアボード(ランキング)」「グローバル変数」「シグナル」などなど。
このようなAPIを使ってみたいけど、使い方がよくわからん… という方も多いんじゃないでしょうか。
かくいう私も今でこそ若干分かりますが、一年前だったら多分同じことを言っていると思います。
ということで、私の把握している限りでアツマールAPIについて語っていこうと思います。
【基礎知識】
アツマールのAPIは promise という形式を用いた非同期処理です。
非同期処理とは、「データ取得が完了するまでタイムラグがある」という感じに捉えてもらえればいいと思います。
見よう見まねでリファレンスのAPIをコピペしたけど上手く動かない… という場合は、だいたいこいつのせいです。
ではそいつの仕組みについて簡単に説明しましょう。
下の画像の左側が通常の処理の流れです。
ツクールのイベントもこんな感じですよね。
ただ、非同期処理が絡むと右のようになります。
普通なら「指示を出して、返事が来たら次へ進む」という流れなのですが、
非同期処理は「指示だけ出して、返事を受け取るのは後回し」という感じなのです。
そのため、本来返事が返っているべき場所でもまだ返事が来ていないことが起こりえます。
ではどうすればいいのか。
そういうときに優秀なのが then() です。
こいつを非同期処理の後ろにくっつけてやると、「お返事がきたらカッコの中に書いた処理をやるよ」という意味になります。お返事が来た後の行動を予約できる感じですね。
【書き方(「プレイヤーのユーザーデータ取得」を用いた例)】window.RPGAtsumaru.experimental.user.getSelfInformation().then(function (result) {
$gameVariables.setValue(10, result.id);
}, function () {
throw new Error("読込に失敗しました");
});
【解説】
上記の青い部分は、「ユーザーデータを取得してね」という指示です。
ただこの時点では先ほども言った通り指示しか出していません。
そこで、赤い太字で書いた then を使います。
こいつをつけると、「お返事が来たらカッコの中身をやるよ」という行動予約ができます。
ではそのカッコの中身を見てみましょう。緑色の部分は、取得に成功した際の処理です。
このとき、設置する無名関数(function)の引数部分(カッコの中)に、何かしらの文字列を入れます。上記の例だと、緑の太字になっている result です。
これをすると、「その無名関数の中限定で、その文字列を使えばデータが呼び出せるぞ」という宣言になります。
実際、その次の行で result を使っていますよね。
ちなみに、入手したデータには複数の情報が入っています。
ただ、必要な情報だけ得られれば他はいいですよね。
ということで、欲しい情報だけを抜きましょう!
今回用いた「ユーザー情報取得」では、以下の情報が入手できます。
・アツマールでのユーザID(id)
・アツマールでのユーザ名(name)
・プレミアム会員かどうかの真偽(isPremium)
・アツマールでのプロフィールコメント(profile)
・プロフィールで設定したツイッターID(twitterId)
・プロフィールで設定したサイトのURL(url)
呼ぶ方法は簡単!さっき指定した文字列(上記の例では result )にドットをつけてから指定のタグを添えるだけ!
「指定のタグ」は、数行上の「入手できる情報」欄の右にカッコで書いた太字の英語です。
つまり、例えば「アツマールでのユーザ名」が知りたければ
result.name
となり、「プロフィールコメント」が知りたければ
result.profile
となるわけです。
それを踏まえて先の例の緑の部分に戻ると、
$gameVariables.setValue(10, result.id);
となっていますね。
$gameVariables.setValue(10, result.id);
は、「変数番号10番に result.id の値を代入しろ」という意味です。
つまり、非同期処理によって入手したユーザーデータのうちユーザIDを変数10番に代入しているということになります。
次はそのあとの黄色い部分ですが、ここは「データの取得に失敗したらエラーを出してね」と言っているだけなので割愛!
こんな感じにすると、欲しいデータを変数に突っ込むことができます。
これを応用すれば、シグナルの受信やグローバル変数の取得、他にもランキングデータの取得も可能になります。すごい!
注意!
then() はあくまでもお返事を受信した後の行動予約に過ぎません。
実際にデータが変数に代入されるまでには少々のラグがあります。
そのため、受信データを用いて動かしたいイベントがある際は then() の中にそのイベント開始のトリガーを仕込んだり、もしくは十分な猶予時間を取ってからイベントを開始するような対策が必要です。
-----
いかがでしょうか。
APIコンテストも近いことですし、皆さんが上手くAPIを使いこなせるきっかけになることができれば幸いです…。
エターなることを恐れずに、どんどん新作をツクっていきましょう!
質問やご意見などがございましたら、コメント欄や私のツイッターまでどうぞ。
おしまい!
-
【ツクールMV】制作したプラグイン一覧
注意事項(ご利用の際は必ずお読みください)
・私の公開したプラグインおよび記述されているコードによって不具合や損害などが発生した場合でも、当方は一切の責任を負いかねます。
・当方の都合により、プラグインのアップデートや公開を予告なく終了する場合があります。
・ご利用にあたっては特に制約は設けません。中身の改変や有償販売作品への使用など、ご自由にどうぞ。
・その他、他者の迷惑になるような用途や一般常識からかけ離れた用途などでのご利用はご遠慮ください。
---
【MessageController】
【できること】
・「文章の表示」内で使う色付け用の制御文字「\C[数字]」を、色の名前で呼べるようにする。
(例)\C[red]
(各色名で呼ぶ色はパラメータで変更可能。使える色名はプラグイン内のヘルプ参照)
・専用のパラメータをtrueにすると、各行頭にアクター名表示用の制御文字「\N[数字]」がある場合にそのアクター名を別途パラメータで指定した色に自動で着色します。行頭でない場合は着色されません。
・専用のプラグインコマンド(プラグイン内のヘルプに書いてあります)を使うと、その後すべての文章が一瞬で表示されます。(制御文字「\>」の自動付加)
オフにするコマンドを使うと、それ以降は通常の表示に戻ります。
【注意事項】
・当プラグインはイベントコマンド「文章の表示」にのみ作用します。他の場面では無効です。
・当プラグインの制御文字拡張は「文章の表示」内の「プレビュー」には対応していません。
確認したい際は、一旦「OK」をクリックしたのち、「Ctrl + R」もしくは右クリックで開けるメニューの一番下の「テスト」で起動できる「イベントのテスト機能」をご利用ください。
DLはこちらから↓
https://drive.google.com/open?id=14weo-TaHfjnFvA4Sq65r09tUyGYE-O0H
---
【ValueChecker】
・内容、できること
→ツクールのイベントコマンドなどから弄れるゲーム内変数の更新履歴をDevToolsに表示します。
・表示される内容
→更新された変数のID
→更新前の数値
→更新後の数値
→更新の際に行われた操作(代入、加算、減算、乗算、除算、剰余)
→オペランドの値
→オペランドの情報(直接記入、変数、ゲームデータのマップX、など)
→(オペランドが変数なら)相手の変数ID
→(「スクリプト」コマンドで$gameVariables.setValueを使った場合や、「変数の操作」コマンド内で「スクリプト」を使った場合)更新に使われたスクリプトの文面
→(「変数の操作」コマンドのオペランドに「乱数」を使用した場合)乱数の範囲
→その更新を行ったイベントのID(マップイベントならマップIDも)と、記述されている行数(~行目)
→(「スクリプト」コマンド内に複数行操作を書いている場合)その「スクリプト」コマンド内にて記述されている行数(~行目)
・便利機能
→パラメータを用いて、要らない情報を非表示にできます。以下消せる情報一覧。
・更新された変数ID
・更新前の数値
・更新後の数値
・更新の際に行われた操作(代入、加算、減算、乗算、除算、剰余)
・オペランド
・オペランドの情報
・乱数の範囲
・相手のID
・スクリプト内容
・イベント内位置
・スクリプトコマンド内位置
・並列処理のコモンイベントで行われた更新情報だけを全て
【注意事項】
・並列処理で頻繁に変数を更新し続けるような処理を行っている場合、動作が重くなることがあります。その場合は、プラグインのパラメータから「並列処理(コモン)」をfalseにして、並列のコモンイベントを非表示にすると対策できます。
DLは、こちら↓
https://drive.google.com/open?id=1lsxNe347SPxeSOjENB2lswjMOybRud21
-----
【PluginChecker】
・内容、できること
→重複して有効になっているプラグインを発見し知らせる。
【注意事項】
・ゲームリリース時には無効にしてください。
DLは、こちら↓
https://drive.google.com/open?id=1wurmlk6-zcJ4yWkQjyocU8QQtmp2Ty1k
広告
1 / 5