マップ画面で変数を参照したゲージを表示したいと考え、
http://tm.lucky-duet.com/viewtopic.php?t=7867
こちらを参考に実装しました。
参考にさせて頂いたのは以下の記述です。
>$gameScreen.movePicture(ピクチャ番号,原点,x座標,y座標,水平拡大率,垂直拡大率,不透明度,合成方法,移動時間);
>原点を左上にして水平拡大率だけ動的に変更すればゲージっぽくなります。
自分の画面では縦長の棒をゲージとしている為、水平拡大率は100とし、垂直拡大率に変数を入れています。
$gameScreen.movePicture(5,0,450,100,100,$gameVariables.value(3),255,0,10);
これでゲージの画像が伸び縮みし、問題なく動作しているのですが1つ、
上のスクリプトですとゲージが上から下に伸びる仕様になります。
これをできれば下から上に伸びるように表示させたいのですが、どういじったら良いでしょうか。
【解決済】変数ゲージの表示について
Re: 変数ゲージの表示について
変数3に-1を掛けてマイナスの数値にすると
絵が反転するので、下から上に伸びるようになるよ。
他にもいい方法があるかもしれない。
絵が反転するので、下から上に伸びるようになるよ。
他にもいい方法があるかもしれない。
Re: 変数ゲージの表示について
ゆわかさん
理想の挙動です!
反転すると覚えておきます。ありがとうございます!
理想の挙動です!
反転すると覚えておきます。ありがとうございます!
Re: 【再質問】変数ゲージの表示について
ミズクニ さんが書きました:マップ画面で変数を参照したゲージを表示したいと考え、
http://tm.lucky-duet.com/viewtopic.php?t=7867
こちらを参考に実装しました。
参考にさせて頂いたのは以下の記述です。
>$gameScreen.movePicture(ピクチャ番号,原点,x座標,y座標,水平拡大率,垂直拡大率,不透明度,合成方法,移動時間);
>原点を左上にして水平拡大率だけ動的に変更すればゲージっぽくなります。
自分の画面では縦長の棒をゲージとしている為、水平拡大率は100とし、垂直拡大率に変数を入れています。
$gameScreen.movePicture(5,0,450,100,100,$gameVariables.value(3),255,0,10);
これでゲージの画像が伸び縮みし、問題なく動作しているのですが1つ、
上のスクリプトですとゲージが上から下に伸びる仕様になります。
これをできれば下から上に伸びるように表示させたいのですが、どういじったら良いでしょうか。
こちらについて再度質問です。
上のものと返信頂いたやり方で、下から上に伸びるゲージを一度実装しました。
$gameScreen.movePicture(ピクチャ番号,原点,x座標,y座標,水平拡大率,垂直拡大率,不透明度,合成方法,移動時間);
↑参照URLのこちらです。
ですが、変数に最大値と最小値を設定したところ、うまく動きませんでした。
$gameScreen.movePicture(3,0,484,500,100,$gameVariables.value(3),255,0,10);
↑実際に使っているスクリプトです。変数に都度減算で数値を入れ、下から上に伸ばしています。
-100と2つ連なっているのはプラグインをお借りして赤と青両方の変数を数字で出しているものです。
青は10ずつ、赤は30ずつ入れたところ図のようにバーがずれてしまいます。
(元の画像に都度×変数%で伸ばしている為?)
また、マイナス方向だけでなく時折プラス方向にゲージを戻す事もしたいので、これでは不十分でした。
その為、幾分無理やりなやり方でもよいので、以下のいずれかがありましたら教えて頂きたいです。
①上の垂直拡大率のやり方で何かよい直し方
②拡大率でなくy座標で直接バーを動かす時、y座標の部分に(元の座標+都度たされる変数)と入れる書き方
(画像右の青いバーはそれを行おうとしてできなかったあとです)
③他のMVでの良いゲージの表現方法
何卒よろしくお願い致します。
Re: 【再質問】変数ゲージの表示について
提示されている情報が不足しているか、間違っているかだと思われます。
垂直スケールが -100 で間違いないのであれば
ズレるというか元の大きさに戻らないはずはないです。
途中で細かく加減算しても最終的に設定した値が反映されるので問題ないはず。
ピクチャの垂直スケールを直に確認してみてください。
デバッグコンソール (F8 押すと出る奴) 等で
で確認できます。
何か勘違い、間違いがあると思われますがそれが何なのか今ある情報からわからないです
最大値と最小値を設定した、というのは具体的にどういう設定でしょうか。
垂直スケールは最大値は 0、最小値は -100 で合ってますか?
あとは…
最後の引数の移動時間は 0 だとダメです。1以上になっているか確認してみてください。
実際に使用しているスクリプト例には 10 となっているので問題ないかもしれませんが念のため。
垂直スケールが -100 で間違いないのであれば
ズレるというか元の大きさに戻らないはずはないです。
途中で細かく加減算しても最終的に設定した値が反映されるので問題ないはず。
ピクチャの垂直スケールを直に確認してみてください。
デバッグコンソール (F8 押すと出る奴) 等で
コード: 全て選択
$gameScreen.picture(ピクチャID)._scaleY
で確認できます。
何か勘違い、間違いがあると思われますがそれが何なのか今ある情報からわからないです
最大値と最小値を設定した、というのは具体的にどういう設定でしょうか。
垂直スケールは最大値は 0、最小値は -100 で合ってますか?
あとは…
コード: 全て選択
$gameScreen.movePicture(ピクチャ番号,原点,x座標,y座標,水平拡大率,垂直拡大率,不透明度,合成方法,移動時間);
最後の引数の移動時間は 0 だとダメです。1以上になっているか確認してみてください。
実際に使用しているスクリプト例には 10 となっているので問題ないかもしれませんが念のため。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
https://twitter.com/wtr_in_reverie/
Re: 【再質問】変数ゲージの表示について
WTRさん、ありがとうございます。
こちらですが、↓をマップのバーなどのイベントと別の場所に並列処理で入れて毎度最大値、最小値を発生させています。
また、移動時間の値はすべて10となっていました。
そして、確認方法もありがとうございます。確認してみたところ、以下のように変数とスケールにずれがありました。
画像の青ゲージがピクチャID3,赤ゲージがID4です。
最初両方0の際はスケールが100でした。(この時点でおかしいのでしょうか…?)
-10、-30を入れていくとそのまま入ります。
そして赤の方の4回目、変数は-100で止まるのですがスケールが-120になりました。
その後もう一度-30で-130になり、以降そこで止まります。
青は変数-100のあとスケールが-110までいき、そこで止まりました。
スケールのずれはどう修正すれば良いでしょうか。
最大値と最小値を設定した、というのは具体的にどういう設定でしょうか。
垂直スケールは最大値は 0、最小値は -100 で合ってますか?
こちらですが、↓をマップのバーなどのイベントと別の場所に並列処理で入れて毎度最大値、最小値を発生させています。
コード: 全て選択
$gameVariables.setValue(3, $gameVariables.value(3).clamp(-100, 0))
また、移動時間の値はすべて10となっていました。
そして、確認方法もありがとうございます。確認してみたところ、以下のように変数とスケールにずれがありました。
画像の青ゲージがピクチャID3,赤ゲージがID4です。
最初両方0の際はスケールが100でした。(この時点でおかしいのでしょうか…?)
-10、-30を入れていくとそのまま入ります。
そして赤の方の4回目、変数は-100で止まるのですがスケールが-120になりました。
その後もう一度-30で-130になり、以降そこで止まります。
青は変数-100のあとスケールが-110までいき、そこで止まりました。
スケールのずれはどう修正すれば良いでしょうか。
Re: 【再質問】変数ゲージの表示について
並列処理でクランプしてるのですね。
そこが想定と違いました。
と
では結果に違いが出ます。順番が違うからです。
処理順で結果が変わるので、処理順を保証できる仕組みにする必要がありますね。
並列処理は毎フレーム実行されますが同じ1フレームの中でどんな順番になるかは状況次第なので
この場合並列処理を使わないほうがよい気がします。
movePicture を実行するイベントは並列処理になっていないと思うので
そのイベント内で movePicture より前にリミット処理をすればよさそうです。
変数を加算(減算)--> 変数をリミット --> movePicture
この順番を守れば大丈夫だと思いますよ。
そこが想定と違いました。
コード: 全て選択
// 変数設定
$gameVariables.setValue(3, -130);
// 変数リミット
$gameVariables.setValue(3, $gameVariables.value(3).clamp(-100, 0));
// ゲージ更新
$gameScreen.movePicture(5,0,450,100,100,$gameVariables.value(3),255,0,10);
と
コード: 全て選択
// 変数設定
$gameVariables.setValue(3, -130);
// ゲージ更新
$gameScreen.movePicture(5,0,450,100,100,$gameVariables.value(3),255,0,10);
// 変数リミット
$gameVariables.setValue(3, $gameVariables.value(3).clamp(-100, 0));
では結果に違いが出ます。順番が違うからです。
処理順で結果が変わるので、処理順を保証できる仕組みにする必要がありますね。
並列処理は毎フレーム実行されますが同じ1フレームの中でどんな順番になるかは状況次第なので
この場合並列処理を使わないほうがよい気がします。
movePicture を実行するイベントは並列処理になっていないと思うので
そのイベント内で movePicture より前にリミット処理をすればよさそうです。
変数を加算(減算)--> 変数をリミット --> movePicture
この順番を守れば大丈夫だと思いますよ。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
https://twitter.com/wtr_in_reverie/
Re: 【再質問】変数ゲージの表示について
WTRさま
返信がとても遅くなりすみません。
教えていただいた通り、並列処理をやめて、処理の際毎度リミットを途中に差し込む形にしたところ、
最大値もゲージもきちんと100で止まるようになりました!
仕組みも理解できました、丁寧に教えていただきありがとうございました!!
返信がとても遅くなりすみません。
教えていただいた通り、並列処理をやめて、処理の際毎度リミットを途中に差し込む形にしたところ、
最大値もゲージもきちんと100で止まるようになりました!
仕組みも理解できました、丁寧に教えていただきありがとうございました!!