前回は「データベース(オブジェクト用)」https://qiita.com/havin_nothin/items/b0c0695292bff7e9fdbd でした。
今回は、スクリプトの基本的な使い方を解説します。
スクリプトを使って、プレイヤーの体力を最大体力にしようと思います。
最初から体力が最大体力と同じだと、変化が見えないので、プレイヤーのオブジェクトの初期設定で、
体力を3、最大体力を10にしておきます。
それからプレイヤーのアクションプログラムにアクションを追加して、「初期化」という名前をつけ、そこを初期アクションに設定します。(初期アクションはアクションを右クリックしてメニューを出すと出てきます/あと無条件に待機へつなげています)
ここまでは準備段階。
では本番です。
さっそく、「初期化」アクションに「スクリプトを実行」を追加して、以下のスクリプトをコピー&ペーストしてください。
(function(){
var self = Agtk.objectInstances.get(instanceId);
var maxhp = self.variables.get(self.variables.getIdByName("最大体力")).getValue();
self.variables.get(self.variables.getIdByName("体力")).setValue(maxhp);
})()
実行して、体力が10になっていればOKです。(テキストで変数を表示しています→参照:https://qiita.com/havin_nothin/items/039d955d39fcedaa93bd )
このプログラムを解説していきます。
1.最初の1行と最後1行は、お約束です。必ずこう書きます。
(function(){
この間にプログラムを書く
})()
というルールです。
2.var self = Agtk.objectInstances.get(instanceId);
変数selfに、自分自身のオブジェクトを入れます。自分自身とはここでは「プレイヤー(のオブジェクト)」が入っています。instanceIdはアクツクMVがすでに用意している変数です。とりあえずAgtk.objectInstances.get(instanceId)と書けば、自分自身のオブジェクトを返してくれるという理解でいいです。それを変数をselfで受けて、selfで操作できるようにしています。先頭のvarは変数を定義しますという意味です。
3.var maxhp = self.variables.get(self.variables.getIdByName("最大体力")).getValue();
変数maxhpに、自分自身の変数「最大体力」の値を入れます。"最大体力"を別の変数名にすればその値になります。(""は半角です)
4.self.variables.get(self.variables.getIdByName("体力")).setValue(maxhp);
自分自身の変数「体力」にmaxhpの値を入れます。やはり"体力"の部分を別の名前にすれば別の変数へ値をセットできます。
長々しいですが、簡単にまとめると、
1.スクリプト開始のお約束
2.自分自身をselfと定義し、
3.selfの「最大体力」をmaxhpに入れ、
4.selfの「体力」をmaxhpにする。
というプログラムになっています。
ではこれを応用してみます。
プレイヤーに変数「レベル」を作り、この「レベル」×10が最大体力になるというスクリプトです。
(function(){
var self = Agtk.objectInstances.get(instanceId);
var level = self.variables.get(self.variables.getIdByName("レベル")).getValue();
var maxhp = level * 10;
self.variables.get(self.variables.getIdByName("最大体力")).setValue(maxhp);
})()
「レベル」の初期値をいろいろ変えて実行してみてください。
プログラムの文法はJavascriptなので、ネットを検索すれば山のように出てきます。
(たとえばこちら:JavaScript 基礎文法 https://qiita.com/Fendo181/items/cca476da99e8f09b6b97 シンプルにまとまってます;「昔はvarがあったが、今は使わない」って書いてあった;;)
とりあえず、自分自身の変数を参照、操作するスクリプトができるようになりました。
次回は、自分自身以外のオブジェクトの変数をスクリプトで扱ってみます。
https://qiita.com/havin_nothin/items/2a8bab1f72a325e784bb
ではまた。
(Thanks:今回のスクリプトは
Scripting Made Easy 作者: baz https://steamcommunity.com/sharedfiles/filedetails/?id=2566824894 のTargeting Switches & Variablesにあるコードをシンプルに書き換えたものです。
ただこちらのコードはなぜか「最大体力」を名前で取得すると、うまく動きませんでした)