obj v0010 g_attrObj - cwtickle/danoniplus GitHub Wiki
g_attrObj
概要
矢印・フリーズアロー個別の属性を管理するオブジェクト。v17 までは setAttribute で管理していたが、v18 以降は g_attrObj で管理している。
キー名は {種別}{レーン番号}_{出現順番号} の形式。
// 0番レーンの20番目に出現する矢印
const arrowName = `arrow0_20`;
g_attrObj[arrowName].cnt; // → 残フレーム数
g_attrObj[arrowName].y; // → 現在のY座標
// 1番レーンの3番目に出現するフリーズアロー
const frzName = `frz1_3`;
g_attrObj[frzName].isMoving; // → 移動中かどうか
生成タイミング
矢印・フリーズアロー出現時(makeArrow / makeFrzArrow)に生成される。消去時(judgeObjDelete)に削除される。オブジェクト自体(g_attrObj = {})は getArrowSettings で初期化される。
プロパティ
矢印・フリーズアロー共通
- cnt (number) — ステップゾーンまでの残フレーム数。
arrivalFrame + 1で初期化され、毎フレームデクリメントされる。0に達したとき判定が行われる - boostCnt (number) — Motion オプション用の残フレームカウンタ。
motionOnFramesのインデックスとして使用され、毎フレームデクリメントされる - boostSpd (number) — 個別加速倍率(
boost_dataから設定。通常は1) - dividePos (number) — 所属レイヤー番号の偶奇(
0: 通常側,1: リバース側)。ステップゾーン位置の参照に使用。スクロール変化(scrollch_data)や StepArea オプションにより変動する - dir (number) — スクロール方向(
1: 上向き通常,-1: 下向きリバース)。移動量の符号計算に使用 - boostDir (number) — 個別加速の方向(
1: 順方向加速,-1: 逆方向加速)。boostSpdの符号から分離されたプロパティ - y (number) — オブジェクトの現在Y座標(絶対座標)。毎フレーム更新される
- movLockFlg (boolean) — 移動ロックフラグ。
trueのとき Y 座標が固定される。矢印モーション(arrowCssMotionData)のmovLock指定、またはキー定義のmovLockXヘッダーにより設定される
// movLockFlg が true のとき、矢印は生成された位置に固定される
if (!g_attrObj[arrowName].movLockFlg) {
addTransform(arrowName, `root`, `translateY(${wUnit(y)})`);
}
矢印固有
- prevY (number) — 直前フレームのY座標。判定処理(
judgeArrow)でステップゾーンとの交差判定に使用 - Arrow (string) — 現在の矢印色(枠部分)。個別色変化(
color_data/ncolor_data)により更新される - ArrowShadow (string) — 現在の矢印影色(塗りつぶし部分)。同様に更新される
// 色変化処理での使用例(changeArrowColor 内部)
const arrowTop = document.getElementById(`${_name}Top${_j}_${_k}`);
if (arrowTop.getAttribute(`color`) !== g_attrObj[arrowName].Arrow) {
arrowTop.style.background = g_attrObj[arrowName].ArrowShadow;
}
フリーズアロー固有
- judgEndFlg (boolean) — 判定終了フラグ(初期値:
false)。OK 判定(judgeKita)または NG 判定(judgeIknai)の完了後にtrueになる。trueになるとフリーズアローは帯の消滅アニメーションのみ継続し、以降の判定は行われない - isMoving (boolean) — 移動中フラグ(初期値:
true)。ヒット(changeHitFrz)時にfalseに変わり、帯の縮小処理に切り替わる - frzBarLength (number) — フリーズアロー帯の現在の長さ(px)。ヒット中は毎フレーム
currentSpeed * boostSpd分だけ減少し、0以下になると OK 判定となる - keyUpFrame (number) — ヒット中にキーを離していたフレーム数。
g_headerObj.frzAttemptを超過すると NG 判定(judgeIknai)になる - barY (number) — 帯部分(
frzBar)の相対Y座標。ヒット中は毎フレーム更新される - btmY (number) — 後発矢印部分(
frzBtmRoot)の相対Y座標。ヒット中は毎フレーム更新される - Normal (string) — 通常時の矢印部分の色
- NormalBar (string) — 通常時の帯部分の色
- NormalShadow (string) — 通常時の影部分の色
- Hit (string) — ヒット時の矢印部分の色
- HitBar (string) — ヒット時の帯部分の色
- HitShadow (string) — ヒット時の影部分の色
- HitAll (string) — 生成時点での全体色変化後のヒット矢印色(全体色変化との比較用に退避)
- HitBarAll (string) — 生成時点での全体色変化後のヒット帯色
- HitShadowAll (string) — 生成時点での全体色変化後のヒット影色
// フリーズアローのライフサイクル概要
// 1. 生成時: isMoving=true, judgEndFlg=false → 通常スクロール
// 2. キーを押した瞬間: isMoving=false → 帯の縮小開始(changeHitFrz)
// 3. 帯が0になる: judgEndFlg=true → キター判定(judgeKita)
// 4. キーを離した: keyUpFrame++ → frzAttempt超過でNG(judgeIknai)、judgEndFlg=true
// 5. judgEndFlg=true 後: 帯の残骸アニメーションのみ継続し、やがて削除