今日のツクールMZスクリプト【14】ループ(while)でピクチャ一括消去。

今回はループ処理のwhileを勉強します。

ツクールの公式サイトから

f:id:werewolftan:20211110205754p:plain

while構文

例のごとくunko変数を定義して、コンソールで確かめてみます

f:id:werewolftan:20211110205949p:plain

変数に0を代入して、

unko変数が10よりも小さいなら加算し続け、それをコンソール上に表示します。

 

コンソール上に表示するのは加算後の処理なので1から10までの整数が出てきます。

 

これを利用して、ピクチャの一括消去をしていきます。

具体的にはこれ。

 

f:id:werewolftan:20211110210156p:plain

変数14にピクチャ番号をあてる

今回は変数14にしています。

変数14が20よりも小さいなら処理を繰り返すようにします。

 

また加算については、setValueを使い、1ずつ足しています。

 

ピクチャの消去については前回のやつです。

 

少し長めになりますが、これでピクチャを一括で消去することができます。

 

このスクリプトの処理をする前に変数14に代入するのを忘れないように。

今回の処理では3-20のピクチャを消したいので、

 

変数14にはあらかじめ2を代入しています。

今日のツクールMZスクリプト【13】・ピクチャの表示と削除

ざっくりメモ書き程度ですが、スクリプトによりピクチャの表示を行ったため。

 

$gameScreen.showPicture(番号,"画像の名前",原点,x座標,y座標,幅の拡大率,高さの拡大率,不透明度,合成方法)

 

これはMVのスクリプトですが、MZも同じく扱うことができます。

左から順に説明。

・番号→ピクチャ番号になります、標準では実数の入力しかできませんがスクリプトを利用する場合ここを変数にできます。このスクリプトを使う主な理由。

 

・画像の名前→pictureフォルダに入っている画像の名前です。""で囲う必要があります。

 

・原点→0なら左上 1なら中央。ほとんど左上でオッケー

 

・x座標、y座標→名前の通り、変数を入れると便利。

 

・幅の拡大率、高さの拡大率→100で標準200で2倍。変数を入れると便利。今回は100を入れています

 

・不透明度→透明率の設定0なら透明 255なら不透明。

 

・合成方法→なんかいろいろあるみたいだけど、とりあえず0でオッケー

 

f:id:werewolftan:20211110033757p:plain

今回はこんな感じ。改行してるけどしていいかは謎

 

ピクチャの番号を変数9、x座標y座標をそれぞれ10と11の変数にしています。

これによってトランプを配るようなものを作りました。

詳細は略。

 

■ピクチャの消去について

 

ピクチャの消去

$gameScreen.erasePicture(番号)

 

とシンプルな感じで行えます。

 

番号には変数を入力できるので$のやつを使うといいです。

 

ループ構文とか使えると、一括で消去とかも作れると思います。

今日のツクールMZスクリプト【12】・条件分岐について

条件分岐(if)の構文を学びます。

if (『条件式』){
 『条件を満たした場合に実行される処理』
}

f:id:werewolftan:20211102144845p:plain



let unko = 1;
if (unko<= 1){
   console.log('unko1');
   console.log('unko2');
}

として、unkoに1を代入して変数の宣言をします。
条件式はunkoが1以下の場合なので、条件を満たし
文章が表示されるようになります。

f:id:werewolftan:20211102144942p:plain

試しにunko=2とすると
条件を満たさないため何も出て来ません。

条件式には、比較演算子か真偽値(true/false)を使用します。

f:id:werewolftan:20211102145040p:plain

比較演算子の種類

中カッコで囲まれた部分は『ブロック』と呼ばれます。
ブロックは複数の構文をひつとにまとめた塊のことを言います。
中カッコ自体はオブジェクトのところで出ましたね。

また、イベントコマンドのように条件を満たさない場合も作ることができます。

if文の中カッコで囲った後に
}  else {
 『条件を満たさない場合に実行される処理』
}

で満たさない場合の処理もすることができます。

f:id:werewolftan:20211102145134p:plain

 

今回はunko=2で条件を満たさないため[not unko]が出てきます。

if文などでブロックにおいて字下げが行われます。
プログラムのほうで勝手にやるので受け入れましょう。

また、JavaScriptの等価演算子では
a===b のように使うのが一般的で
a==b は使わなくていいそうです。

 


■条件分岐・論理演算子

条件式に論理演算子を使うことでより細かな分岐を行えます。

(a && b) で [aかつb] のとき
(a || b) で [aまたはb] のとき
(!a) で [aの否定] のとき
をあらわします

f:id:werewolftan:20211102145345p:plain

f:id:werewolftan:20211102145243p:plain

f:id:werewolftan:20211102145207p:plain



■条件分岐(条件演算子)

条件演算子(参考演算子)は
分岐処理を一行で済ましてしまうもの。

『条件式』 ? 『条件を満たした場合の式』 :『条件を満たさなかった場合の式』

let aaa = 1;
let bbb =(aaa===1 ? 2 : 3);
console.log(bbb);

f:id:werewolftan:20211102145423p:plain

の例で見ると
aaaに1を代入して
bbbにif文を代入しています。
if文は条件演算子を使用しており、
aaa===1 ならば 2 そうでないなら 3 を出力します。
条件を満たしているのでbbbをコンソールで確認すると
2と出てきます。

 

以下は公式から
https://tkool.jp/mz/plugin/javascript/if.html

以下の例は、通常攻撃のダメージ計算式に対して条件演算子による判定を追記したものです。
『b.isStateAffected(5)』という条件式は見慣れない書き方ですが、『攻撃対象がステートID[5]のステートになっていたら』という意味になります。

f:id:werewolftan:20211102145442p:plain

 

今日のツクールMZスクリプト【11】・仲間になるキャラのレベルを先頭メンバーのレベルと同じにする。

 

イベントコマンドのレベルの増減では、変数を使えますが、先頭メンバー依存の上昇などはできません。
そこで今回は先頭メンバーのレベルを変数として取得しレベルの増減を行います。

f:id:werewolftan:20211102100123p:plain

まずは、
変数の取得から、変数ID.5にパーティーの#1のIDを取得しました。
これが先頭のメンバーのIDになります。

f:id:werewolftan:20211102100206p:plain

イベントコマンド・変数の操作

そして
$gameVariables.setValue(6,$gameActors.actor($gameVariables.value(5)).level);
とします。

f:id:werewolftan:20211102100341p:plain



ここでsetValueは前回までで学んだ、ツクールの変数に数値を代入する関数です。
今回は6番に変数を入れるため6を先に入れています。

そのあとの
$gameActors.actor($gameVariables.value(5)).level
については$gameActors
という、アクター情報の配列を格納した変数を呼び出し

actor(n)
というのはn番目のIDのアクターとなっています。

そこに入っているのが先に取得した変数5のものなので
$gameActors.actor($gameVariables.value(5))
で先頭のアクターを参照しています。

そのあとの
.level
でそのアクターのレベルの数値をあらわしています。

つまり上の操作で
変数6に先頭アクターのレベルを代入しています。

 

この変数を使ってアクターレベルの増減のイベントコマンドからプリシアのレベルを上げてもいいですが
そこもスクリプトを使って実行します。

$gameActors.actor(2).changeLevel($gameVariables.value(6), false)
具体的にはこんな感じです。

f:id:werewolftan:20211102100244p:plain

$gameActors.actor(2)
とはデフォルトで設定されているID2番にプリシアの情報が入っています。
changeLevel関数でプリシアのレベルを変化させます。

 

http://www.rpgmaker-script-wiki.xyz/mzscriptwiki.php#27

のレベルの増減の項目を見ると、

 

$gameActors.actor(アクターID).changeLevel(変化量, レベルアップを表示するか)
//レベルアップを表示するか 表示:true 非表示:false

となっております。

value(6)は変数6を代入しており、レベルの変化を表示するつもりがないので
falseにしておきます。

以上より
パーティーの並び替えをした際に、プリシアのレベルが先頭キャラレベル依存になります。

これは、主人公を外したりできるローグライク系のゲームと相性がいいスクリプトだと思います。

f:id:werewolftan:20211102100541p:plain

f:id:werewolftan:20211102100552p:plain

f:id:werewolftan:20211102100600p:plain

f:id:werewolftan:20211102100608p:plain

f:id:werewolftan:20211102100618p:plain

 

今日のツクールMZスクリプト【10】・変数代入と乱数からランダムジャンプ生成

8、9回で使ってきたものを合わせて
ランダムにジャンプする物体を作ります。

今回は「変数1」と「変数3」にそれぞれ乱数を代入して
それをそれぞれ
「ジャンプのx方向」「ジャンプのy方向」に対応させます。

まず変数の代入ですが
グローバル変数からsetValueを使います。
$gameVariables.setValue(1,Math.floor(Math.random()*5)-2);

f:id:werewolftan:20211101162730p:plain

コンソールで確認

同様に変数3にも代入します
$gameVariables.setValue(3,Math.floor(Math.random()*5)-2);

f:id:werewolftan:20211101162823p:plain

ツクール上に入力

またジャンプの実行には
イベントコマンドの移動ルートの実行から、スクリプトを選択し
this.junp(x,y); 
と入力します。ここのx,yについては変数も入れられるので
this.jump($gameVariables.value(1),$gameVariables.value(3));

f:id:werewolftan:20211101162911p:plain

f:id:werewolftan:20211101162920p:plain

 

として、変数1と変数3を入れます。
めちゃくちゃ汚いので他にやり方がありそう…

ついでにループさせて10回ジャンプしたら止まるようにします。

 

f:id:werewolftan:20211101163002p:plain



実際の動きはこんな感じです

ツクールMZスクリプト【10】添付動画 - YouTube

 

今日のツクールMZスクリプト【9】・乱数の生成


イロイロといじって乱数をスクリプトで出力できるようになりました。
まず、jsの機能であるmathを使います

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math

ここにいろいろ書かれていますが正直難しいデス。

【JavaScript入門】乱数の作り方(範囲指定/重複なし/ランダム文字列) | 侍エンジニアブログ (sejuku.net)

こちらのサイトを利用して乱数について学びました。

math.random()
の関数を利用することで乱数の生成をします。
この関数は、0以上1未満の数字をランダムで出力してくれます。

f:id:werewolftan:20211101154639p:plain

0から1未満の数字

また、5倍などの処理を行うことで
0から5未満の数字をあらわしたりできます。

f:id:werewolftan:20211101154710p:plain

ツクールの変数で少数は使わないので
扱いやすくするために小数点以下を切り捨てます。

具体的には
Math.floor()
という関数を使います。英語の意味は謎です。

Math.floor(Math.random() *5);
とすることで0から4の乱数を生成することができます。

f:id:werewolftan:20211101154740p:plain

小数点以下切り捨て

さらにここから -2 とすることで
-2~2の変数を作ることが可能です。

f:id:werewolftan:20211101154806p:plain

 

これをスクリプトに反映させれば、ツクール上でも乱数の生成が可能です。

ただ、イベントコマンドの「変数の操作」からも実行できるので役に立つか微妙です。

この生成した乱数をジャンプの飛距離などに代入して変な挙動をする物体を作れます。

今日のツクールMZスクリプト【8】・グローバル変数とVariables

はい、正直前回の出力の仕方がわからないので
先にコアスクリプトグローバル変数について学びます。
グローバル変数とは大きな変数で、ツクール上では$から始まるものがそれになります。
具体的には
$gameVariables
などです。これはゲーム上の変数を扱う『オブジェクト』になります。
$gameVariables.value(1);
とすると、グローバル変数内のプロパティである
value関数の引数『1』
1番の変数の値が戻り値として戻ってきます。

f:id:werewolftan:20211101150731p:plain

変数は初め0が格納されているため0が戻り値として戻ってくる

RPGツクールMZ:スクリプトで変数を操作する方法 | 初心者がゲーム開発していくブログ (gamekaihatu-blog.net)

を参考にしてプリシアに変数の操作をしてもらいました。

f:id:werewolftan:20211101151418p:plain

プリシアにスクリプト実行してもらう

 

f:id:werewolftan:20211101151524p:plain

テストプレイの結果

今度は

$gameVariables.setValue(1,10);

として、グローバル変数

$gameVariablesの中のプロパティである

setValue関数を引き出しています?

()内には左からグローバル変数の引数、代入するものとなっています。

右に代入するのは5回目くらいでも言ったように、文字列やtrue/false、関数など

さまざまです。

 

今回は1と2の変数に数値と文字列を代入したためそうなります。

 

多分addValueとかもあるんだと思います。

f:id:werewolftan:20211101152255p:plain

jsで「setValue」と検索して関数を探そうとしたけどよくわからず。