フォーラムへの返信
-
投稿者投稿
-
ラクレス参加者
エクステンション等を使わない私のやりかたとしてですが
まず アプリケーションのプロパティで
“フレームをまたいでサウンドを再生” にチェックします
BGMの管理はグローバルイベントで行います
効果音と違い重ねて再生する事は無いと思うのでCHは固定します
BGMのIDを入れる [再生中] [リクエスト] の変数2つを用意します
BGMID = 0(停止) 1~(各曲) として管理します・各フレームのイベントから [リクエスト] を入力
・(グローバルイベント)
CHが再生中で [リクエスト] が 0 もしくは
[リクエスト] と [再生中] が異なる場合CH停止
・(グローバルイベント)
CHが停止中で [リクエスト] が 1 以上の場合
[リクエスト] を再生し 値を [再生中] に上書きといった具合です
[リクエスト] と [再生中] が異なる時に CH音量を下げていき
CH音量=0 の時にCH停止 などとすれば
フェードアウトからBGM切替等も再現できます
この場合は切替時にCH音量を戻すのを忘れずにラクレス参加者変数が扱える整数の上下限:-2147483648 から 2147483647
となっています
桁を分けて管理するなどで対策出来るのではないかと思いますリンク先はwikiよりMMF2(だいたいCF2.5も同じ?)の制限に関する情報です
https://wikiwiki.jp/mmf2/%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E9%9B%86/MMF2%E3%81%AE%E6%A7%98%E3%80%85%E3%81%AA%E4%B8%8A%E9%99%90ラクレス参加者リストの何行目を参照するか変数で管理するのが良いと思います
変数で参照するリストの行を指定し
val関数で表示するパラグラフ番号を持ってきます表示した後に変数+1で参照先を次の行へ送ります
参照する行がリストの総行数より大きかった場合リセットしますAttachments:
You must be logged in to view attached files.ラクレス参加者カウントが維持されるのは破壊後に再カウントしていないからだと思われます
Foreachは破壊されたオブジェクトは参照しないので
破壊された後にもカウントするフラグを立ててやれば良いかと思いますただオブジェクトの破壊は 指示したその場で破壊されるのではなく
そのフレームの一番最後に実行されるという仕様があるので
破壊 → 破壊後のカウント を同フレーム内で行う事は出来ません
カウントフラグを立てるタイミングをズラす必要があります
一番簡単なのは変数でウェイトを入れてやる方法でしょうか変数を使いたくない場合は
カウントするイベントより下に置く事で次のフレームにフラグを回収させます
ここで注意が必要なのは カウントするイベントより下に置いた場合でも
条件が即時実行(緑文字)だったりすると破壊前にカウントされる事になります
これは他の条件を上に加えて緑文字を赤文字にすると防げます*対象数が少なかったり負荷が気にならないのであれば
カウントを常に実行させる事でこれらの対策は不要ですサンプル(上)にウェイトを使ったやりかた
サンプル(下)にイベント位置で対策したやり方を加えました
オブジェクトを右クリックすると破壊されますこの件に限らずどこで破壊命令しても実際に破壊されるのは一番最後
という仕様を知っておくと事前に色々な不具合を回避していけると思いますAttachments:
You must be logged in to view attached files.ラクレス参加者その解決策の方が小数点の敏捷を細かく再現出来ますね
イベント6行目に フレームが開始 が無かった時は
常に座標 (切り捨てられた後の値) を変数に返している状態になっていました
その切り捨てられて返って来た変数を元に移動を繰り返していたので
フレーム開始 をつけた事でそれが無くなり左右同じ速度になったのだと思いますフレームが開始 が無かった時
右 100→(102.2→102)→(104.2→104)→(106.2→106)→(108.2→108)→(110.2→110)
左 100→(97.8→97)→(94.8→94)→(91.8→91)→(88.8→88)→(85.8→85)
フレームが開始 を付けた後
右 100→(102.2→102)→(104.4→104)→(106.6→106)→(108.8→108)→(111.0→111)
左 100→(97.8→97)→(95.6→95)→(93.4→93)→(91.2→91)→(89.0→89)ラクレス参加者「X座標に左右入力( “プレイヤー&Lv” ) * 0.1を追加」
「X座標を(変数名)エックス座標に変更」
おっしゃられている通りこの部分が問題になっています変数には小数を扱えますが座標では扱えず切り捨てられます
今回の場合 敏捷x0.1 の 2.2 が移動量になりますが
例えば X座標100 から移動した場合
右に移動 100 → 102.2 小数点が切り捨てられ 102(実質2移動)
左に移動 100 → 97.8 小数点が切り捨てられ 97(実質3移動)
このため左移動の速度が右移動の1.5倍になっている状況です17行目を無効にすると 敏捷=1 という扱いになりますが
右移動 100 → 100.1(100) 左移動 100 → 99.9(99)
という様に左には1ずつ動いてしまうというわけです移動量を整数にしてから座標にあててやるようにすれば解決するかと思います
- この返信は5年、 4ヶ月前にラクレスが編集しました。
ラクレス参加者小数点が含まれない除算で整数が返って来るのは仕様です
150/100 ではなく 150.0/100 などしてやると 1.5 が返って来ます私も最初は知らなかったのですが
小数点の付いた数字以降の計算は小数まで求められるようです
例えば 100/7/5/3.0 の場合は
100/7/5 までは整数で求められ /3.0 だけ小数まで求められる
対して 100/7/5.0/3 の場合は
100/7 は整数で求められ /5.0 以降は小数まで求められるといった具合ですちなみに 10/3 + 10/4 のように途中 + や – で区切られる場合は
10.0/3 + 10.0/4 と両方に .0 を含めてやる必要がありますラクレス参加者対象のオブジェクトにForeachを回し
フラグが有効の場合+1 とするのが一般的かと思います複数のオブジェクトというのが同名オブジェクトの複製ではなく
名前の異なるオブジェクトの事でしたら
それらを同じオブジェクトグループに設定しグループに対してForeachを回しますサンプルを作成しましたので参考にして頂ければと思います
Attachments:
You must be logged in to view attached files.ラクレス参加者ご対応ありがとうございます!
どちらの問題も解消しているのを確認しました
修正が早く本当に助かりましたm(_ _)mラクレス参加者お世話になっております
実機での余白処理表示において2つ問題点が見つかりました
バージョンは R291.6 です・余白が元画像と同じ値に達すると余白下に元画像が現れる
・バックグラウンドに行くと戻った時に余白処理が解除されるといったもので 対処は可能なのですが 手間である事より
やはりPCと動作が違うと他に問題が起きてないか等不安が残ります
mfaとapkも添付しましたのでご確認頂けたらと思いますAttachments:
You must be logged in to view attached files.ラクレス参加者オンライン処理に関しては知識が乏しくお力になれません
最後までお付き合い出来ず申し訳ありません! m(_ _)m
無事ランキング導入に成功します事をお祈りしておりますラクレス参加者そんな感じです ランキングがまっさらな時は
一番上のスコア=0 の方の条件が満たされ 1 が代入されます
1 つでもランキングが加わると スコア=0 は満たされなくなり
存在しない参照先 変数(-1) からは 0 が返ってくる為
0 より小さいという条件も満たされず
一番上の順位は 1 から書き換えられる事は無くなりますラクレス参加者16行目を スコアが0の時 もしくは 1つ前のスコアより小さい時
の条件を満たす時に 一つ前の 順位+1 にする
というイベントに書換えれば順位飛び無しのランキングになりますAttachments:
You must be logged in to view attached files.ラクレス参加者前のサンプルではループインデックス+1を拾って頭にくっつけましたが
今回は同点時に書換えを行う必要があるので
一度順位を変数に羅列し条件に応じて書換えた後に拾ってくるようにします
サンプルでは降順ソートボタンのオブジェクト変数を使いました*サンプル16行目
まずはループインデックス+1の値を
降順ソートボタン の変数(ループインデックス)に入れます
変数(0)=1 変数(1)=2 変数(2)=3 ….と1から順にランキングが代入されます*サンプル18行目
次にスコア結果を入れてある リストオブジェクトの変数を比較します
変数(ループインデックス) と 変数(ループインデックス-1) が等しい時
とすれば 2位=1位だった場合 3位=2位だった場合 … と順に比較されます
この条件を満たした時 16行目で入力した 降順ソートボタン の
変数(ループインデックス) を 変数(ループインデックス-1) に変更すれば
1つ前の順位と同点の場合1つ前と同じ順位に変更 という処理が出来ますこのままだと 最初は全て0位 次は2位以降全部2位 次は3位以降全部3位
の様に見栄えが良くないので 比較の時に スコアが1以上の時 を加えてやれば
記録が埋まってない箇所の書き換えを防ぐ事が出来ますAttachments:
You must be logged in to view attached files.ラクレス参加者( ( 新着順位 – 1 ) / 10 ) * 10 + 1 の式ですが
まずCF2.5の数式で小数点まで割り出すには /10.0 等してやる必要があるため
( ( 新着順位 – 1 ) / 10 ) の部分で小数点が切捨てられた答えが出ます
新着順位が 1~10 の場合は 1
新着順位が 11~20 の場合は 11
新着順位が 21~30 の場合は 21
と割り出される事になります
後はリストオブジェクトのイベントの 行にスクロール にこの値を入れるだけですOR演算子については解説記事があります
サンプルではどちらでも結果が同じなので特に意味無くフィルタになっていますが
単純にどちらかの条件を満たす時という使い方では論理和の方が安全そうです
https://wikiwiki.jp/mmf2/%E3%83%98%E3%83%AB%E3%83%97%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3/OR%20operators -
投稿者投稿