Violet Vreath is Shooter Game for Windows XP+(個人制作シューティングゲーム)
Révision | b2f8b9f14d6e480cfda4a801942bc92ce0c36cb8 (tree) |
---|---|
l'heure | 2022-05-16 23:36:28 |
Auteur | gecchi <gecchi@boch...> |
Commiter | gecchi |
少し整理
@@ -8,7 +8,7 @@ | ||
8 | 8 | namespace GgafDx { |
9 | 9 | |
10 | 10 | /** |
11 | - * 作成中 . | |
11 | + * アクターを乗せる力車 . | |
12 | 12 | * GeometricActor のメンバの<BR> |
13 | 13 | * _x, _y, _z ・・・ アクターの座標<BR> |
14 | 14 | * を、各成分毎に簡単に操作するために作成。<BR> |
@@ -53,21 +53,23 @@ public: | ||
53 | 53 | explicit GeoVehicle(GeometricActor* prm_pActor); |
54 | 54 | |
55 | 55 | /** |
56 | - * 移動速度の上限下限を強制 . | |
56 | + * 移動速度の上限下限を強制強制する . | |
57 | 57 | * @param prm_velo01 速度1 |
58 | 58 | * @param prm_velo02 速度2 |
59 | 59 | */ |
60 | 60 | void forceVeloRange(velo prm_velo01, velo prm_velo02); |
61 | 61 | |
62 | 62 | /** |
63 | - * 移動加速度の上限下限を強制 . | |
63 | + * 移動加速度の上限下限を強制する . | |
64 | 64 | * @param prm_acce01 加速度1 |
65 | 65 | * @param prm_acce02 加速度2 |
66 | 66 | */ |
67 | 67 | void forceAcceRange(acce prm_acce01, acce prm_acce02); |
68 | 68 | |
69 | 69 | /** |
70 | - * 移動方向を座標、移動速度を値で設定する。 | |
70 | + * 移動方向を座標、移動速度を値で設定する . | |
71 | + * 移動速度下限〜 移動速度上限 の範囲外を設定した場合、 | |
72 | + * 方向はそのままで、直近の範囲内に納められて設定される。 | |
71 | 73 | * @param prm_tx 移動方向X座標 |
72 | 74 | * @param prm_ty 移動方向Y座標 |
73 | 75 | * @param prm_tz 移動方向Z座標 |
@@ -76,7 +78,9 @@ public: | ||
76 | 78 | void setVeloTwd(coord prm_tx, coord prm_ty, coord prm_tz, velo prm_velo); |
77 | 79 | |
78 | 80 | /** |
79 | - * 移動方向を軸回転(Rz, Ry)、移動速度を値で設定する。 | |
81 | + * 移動方向を軸回転(Rz, Ry)、移動速度を値で設定する . | |
82 | + * 移動速度下限〜 移動速度上限 の範囲外を設定した場合、 | |
83 | + * 方向はそのままで、直近の範囲内に納められて設定される。 | |
80 | 84 | * @param prm_rz 移動方向z軸回転値 |
81 | 85 | * @param prm_ry 移動方向y軸回転値 |
82 | 86 | * @param prm_velo 移動速度 |
@@ -86,17 +90,25 @@ public: | ||
86 | 90 | |
87 | 91 | /** |
88 | 92 | * XYZ軸ベクトル成分で、移動速度を設定する . |
93 | + * 移動速度下限〜 移動速度上限 の範囲外を設定した場合、 | |
94 | + * 方向はそのままで、直近の範囲内に納められて設定される。 | |
89 | 95 | * @param prm_velo_vc_x |
90 | 96 | * @param prm_velo_vc_y |
91 | 97 | * @param prm_velo_vc_z |
92 | 98 | */ |
93 | 99 | void setVeloByVc(velo prm_velo_vc_x, velo prm_velo_vc_y, velo prm_velo_vc_z); |
94 | 100 | |
101 | + /** | |
102 | + * 移動速度を 0 に設定する . | |
103 | + * 但し、移動速度下限 が 0 より大きい場合、 | |
104 | + * 無理やり移動速度下限の速度がX軸方向に設定される。 | |
105 | + */ | |
95 | 106 | void setVeloZero(); |
96 | 107 | |
97 | - | |
98 | 108 | /** |
99 | - * 移動方向を座標、移動加速度を値で設定する。 | |
109 | + * 移動方向を座標、移動加速度を値で設定する . | |
110 | + * 移動加速度下限〜 移動加速度上限 の範囲外を設定した場合、 | |
111 | + * 方向はそのままで、直近の範囲内に納められて設定される。 | |
100 | 112 | * @param prm_tx 移動方向X座標 |
101 | 113 | * @param prm_ty 移動方向Y座標 |
102 | 114 | * @param prm_tz 移動方向Z座標 |
@@ -106,18 +118,20 @@ public: | ||
106 | 118 | |
107 | 119 | /** |
108 | 120 | * XYZ軸ベクトル成分で、移動加速度を設定する . |
121 | + * 移動加速度下限〜 移動加速度上限 の範囲外を設定した場合、 | |
122 | + * 方向はそのままで、直近の範囲内に納められて設定される。 | |
109 | 123 | * @param prm_acce_vc_x |
110 | 124 | * @param prm_acce_vc_y |
111 | 125 | * @param prm_acce_vc_z |
112 | 126 | */ |
113 | 127 | void setAcceByVc(acce prm_acce_vc_x, acce prm_acce_vc_y, acce prm_acce_vc_z); |
114 | 128 | |
115 | - void setAcceZero(); | |
116 | - | |
117 | 129 | /** |
118 | - * 速度、加速度をリセット、各上限下限を初期設定。 | |
130 | + * 移動加速度を 0 に設定する . | |
131 | + * 但し、移動加速度下限 が 0 より大きい場合、 | |
132 | + * 無理やり移動加速度下限の速度がX軸方向に設定される。 | |
119 | 133 | */ |
120 | - void reset(); | |
134 | + void setAcceZero(); | |
121 | 135 | |
122 | 136 | /** |
123 | 137 | * 駕籠(平行移動支援)が振る舞う . |
@@ -9,7 +9,7 @@ | ||
9 | 9 | namespace GgafDx { |
10 | 10 | |
11 | 11 | /** |
12 | - * アクターを乗せる力車(アクターの旋回移動支援) . | |
12 | + * アクターを乗せる力車(アクターの旋回移動支援) . | |
13 | 13 | * 力車は我々の目には触れませんが、演者(アクター)を持ち上げ、「移動」「向きの回転」を行わせる世話人です。<BR> |
14 | 14 | * 演者(アクター)は自らの意思で動作せずとも、力車のおかげで舞台を飛び回まわることができます。<BR> |
15 | 15 | * 基本的な動作は力車でほとんどカバーできてしまいます。そのお蔭で、演者は自身の演技に集中できるのです。<BR> |
@@ -72,7 +72,9 @@ void GeoVehicle::setVeloTwd(coord prm_tx, coord prm_ty, coord prm_tz, velo prm_v | ||
72 | 72 | if (ZEROd_EQ(p)) { |
73 | 73 | //速度が0になってしまったら |
74 | 74 | //加速度の方向ベクトルに最低速度を設定 |
75 | - p = 1.0*_acce_vc_x*_acce_vc_x + 1.0*_acce_vc_y*_acce_vc_y + 1.0*_acce_vc_z*_acce_vc_z; | |
75 | + p = 1.0*_acce_vc_x*_acce_vc_x + | |
76 | + 1.0*_acce_vc_y*_acce_vc_y + | |
77 | + 1.0*_acce_vc_z*_acce_vc_z; | |
76 | 78 | if (ZEROd_EQ(p)) { |
77 | 79 | //加速度も0なら、あきらめて _velo_vc_x に最低速度を設定 |
78 | 80 | _velo_vc_x = _bottom_velo; |
@@ -102,11 +104,15 @@ void GeoVehicle::setVeloTwd(angle prm_rz, angle prm_ry, velo prm_velo) { | ||
102 | 104 | } |
103 | 105 | |
104 | 106 | void GeoVehicle::setVeloByVc(velo prm_velo_vc_x, velo prm_velo_vc_y, velo prm_velo_vc_z) { |
105 | - double p = 1.0*prm_velo_vc_x*prm_velo_vc_x + 1.0*prm_velo_vc_y*prm_velo_vc_y + 1.0*prm_velo_vc_z*prm_velo_vc_z; | |
107 | + double p = 1.0*prm_velo_vc_x*prm_velo_vc_x + | |
108 | + 1.0*prm_velo_vc_y*prm_velo_vc_y + | |
109 | + 1.0*prm_velo_vc_z*prm_velo_vc_z; | |
106 | 110 | if (ZEROd_EQ(p)) { |
107 | 111 | //速度が0になってしまったら |
108 | 112 | //加速度の方向ベクトルに最低速度を設定 |
109 | - p = 1.0*_acce_vc_x*_acce_vc_x + 1.0*_acce_vc_y*_acce_vc_y + 1.0*_acce_vc_z*_acce_vc_z; | |
113 | + p = 1.0*_acce_vc_x*_acce_vc_x + | |
114 | + 1.0*_acce_vc_y*_acce_vc_y + | |
115 | + 1.0*_acce_vc_z*_acce_vc_z; | |
110 | 116 | if (ZEROd_EQ(p)) { |
111 | 117 | //加速度も0なら、あきらめて _velo_vc_x に最低速度を設定 |
112 | 118 | _velo_vc_x = _bottom_velo; |
@@ -169,7 +175,9 @@ void GeoVehicle::setAcceTwd(coord prm_tx, coord prm_ty, coord prm_tz, acce prm_a | ||
169 | 175 | } |
170 | 176 | |
171 | 177 | void GeoVehicle::setAcceByVc(acce prm_acce_vc_x, acce prm_acce_vc_y, acce prm_acce_vc_z) { |
172 | - double p = 1.0 * prm_acce_vc_x * prm_acce_vc_x + 1.0 * prm_acce_vc_y * prm_acce_vc_y + 1.0 * prm_acce_vc_z * prm_acce_vc_z; | |
178 | + double p = 1.0 * prm_acce_vc_x * prm_acce_vc_x + | |
179 | + 1.0 * prm_acce_vc_y * prm_acce_vc_y + | |
180 | + 1.0 * prm_acce_vc_z * prm_acce_vc_z; | |
173 | 181 | if (ZEROd_EQ(p)) { |
174 | 182 | _acce_vc_x = _bottom_acce; |
175 | 183 | _acce_vc_y = 0; |
@@ -208,7 +216,9 @@ void GeoVehicle::setAcceZero() { | ||
208 | 216 | |
209 | 217 | void GeoVehicle::behave() { |
210 | 218 | if (_acce != 0) { |
211 | - setVeloByVc(_velo_vc_x+_acce_vc_x, _velo_vc_y+_acce_vc_y, _velo_vc_z+_acce_vc_z); | |
219 | + setVeloByVc(_velo_vc_x+_acce_vc_x, | |
220 | + _velo_vc_y+_acce_vc_y, | |
221 | + _velo_vc_z+_acce_vc_z); | |
212 | 222 | } |
213 | 223 | //Actorに反映 |
214 | 224 | _pActor->_x += _velo_vc_x; |
@@ -25,7 +25,7 @@ using namespace VioletVreath; | ||
25 | 25 | |
26 | 26 | const velo MyBunshinWateringLaserChip001::MAX_VELO_RENGE = PX_C(512); //この値を大きくすると、最高速度が早くなる。 |
27 | 27 | //const double MyBunshinWateringLaserChip001::INV_MAX_VELO_RENGE = 1.0 / MAX_VELO_RENGE; |
28 | -const int MyBunshinWateringLaserChip001::R_MAX_ACCE = 20; //MAX_VELO_RENGE に対する加速度、この値を大きくすると、カーブが緩くなる | |
28 | +const int MyBunshinWateringLaserChip001::R_MAX_ACCE = 18; //MAX_VELO_RENGE に対する加速度、この値を大きくすると、カーブが緩くなる | |
29 | 29 | const velo MyBunshinWateringLaserChip001::INITIAL_VELO = MAX_VELO_RENGE*0.6; //レーザー発射時の初期速度 |
30 | 30 | //const double MyBunshinWateringLaserChip001::RR_MAX_ACCE = 1.0 / R_MAX_ACCE; //計算簡素化用 (現在未使用) |
31 | 31 | const acce MyBunshinWateringLaserChip001::MAX_ACCE_RENGE = MAX_VELO_RENGE/R_MAX_ACCE; |
@@ -416,81 +416,52 @@ void MyBunshinWateringLaserChip001::processJudgement() { | ||
416 | 416 | } |
417 | 417 | |
418 | 418 | void MyBunshinWateringLaserChip001::aimChip(int tX, int tY, int tZ) { |
419 | + // | |
420 | + // | 仮的 → | |
421 | + // | ┌ vVT(vVTx,vVTy,vVTz) | |
422 | + // | ^ \ | |
423 | + // | | \ | |
424 | + // | | … | | |
425 | + // | | |d|*9 | | |
426 | + // | | … | | |
427 | + // | | \ → | | |
428 | + // | | 的 座標(tX,tY,tZ)= vT(vTx,vTy,vTz) | 仮的 | |
429 | + // | | ^ ┌ → → | ↑ | |
430 | + // | | / \ |d|= vT - vVM | 的 ^ | |
431 | + // | | / \ → | ↑ | | |
432 | + // | | / ┐仮自 vVM(vVMx,vVMy,vVMz) | 仮自 | ^ | |
433 | + // | | |vT| / / | ↑ | | | |
434 | + // | | / / | | | | | |
435 | + // | | / / | | ||vT| ||vT|*0.9 | |
436 | + // | | / / *0.9の意味は右図のように直線に | | | | | |
437 | + // | | / / |vT|*0.9 並んだ際に仮自 が 的 を追い | | | | | |
438 | + // | | / / 越さないようにするため | | | | | |
439 | + // | 設定される加速度の方向 | / / | | | | | |
440 | + // | setAcceByVc(vVTx,vVTy,vVTz) ^ / ┐ 現在の移動方向ベクトルGeoVehicle | 自 v v | |
441 | + // |※メソッド内でMAX_ACCE_RENGE | // (_velo_vc_x,_velo_vc_x,_velo_vc_z) | | |
442 | + // | 範囲に調整される 自 ---+--------------------------- | |
443 | + // | 座標(_x,_y,_z)=ベクトルの基点(0,0,0) | | |
444 | + // ---+------------------------------------------ | |
419 | 445 | GgafDx::GeoVehicle* pGeoVehicle = getGeoVehicle(); |
420 | - //自→的、方向ベクトル (vT) | |
446 | + //自→的、方向ベクトル (→vT) | |
421 | 447 | coord vTx = tX - _x; |
422 | 448 | coord vTy = tY - _y; |
423 | 449 | coord vTz = tZ - _z; |
424 | 450 | //|vT| |
425 | 451 | coord lvT = UTIL::getDistanceFromOrigin(vTx, vTy, vTz); |
426 | 452 | double ve = pGeoVehicle->_velo; |
427 | - //自→仮自 | |
453 | + //自→仮自 (→vVM) | |
428 | 454 | coord vVMx = lvT * (pGeoVehicle->_velo_vc_x / ve)*0.9; |
429 | 455 | coord vVMy = lvT * (pGeoVehicle->_velo_vc_y / ve)*0.9; |
430 | 456 | coord vVMz = lvT * (pGeoVehicle->_velo_vc_z / ve)*0.9; |
431 | - //仮自→仮的 *2、仮自から的をはさんで2倍の距離 | |
432 | - double vVTx = (vTx - vVMx)*10; | |
433 | - double vVTy = (vTy - vVMy)*10; | |
434 | - double vVTz = (vTz - vVMz)*10; | |
435 | - //自→仮的 へ加速度設定 | |
436 | - const double t = 1.0 / sqrt(vVTx * vVTx + vVTy * vVTy + vVTz * vVTz); | |
437 | - pGeoVehicle->setAcceByVc((t * vVTx) * MAX_ACCE_RENGE, | |
438 | - (t * vVTy) * MAX_ACCE_RENGE, | |
439 | - (t * vVTz) * MAX_ACCE_RENGE); | |
457 | + //仮自→仮的*10、((→vT) - (→vVM))*10 仮自から的を距離1として、的から距離9場所 | |
458 | + coord vVTx = (vTx - vVMx)*10; | |
459 | + coord vVTy = (vTy - vVMy)*10; | |
460 | + coord vVTz = (vTz - vVMz)*10; | |
461 | + //自→仮的 へ加速度設定(※メソッド内で MAX_ACCE_RENGE 範囲に調整される) | |
462 | + pGeoVehicle->setAcceByVc(vVTx, vVTy, vVTz); | |
440 | 463 | } |
441 | 464 | |
442 | -///////////////////////////// | |
443 | - | |
444 | -// // | vVT 仮的 | | |
445 | -// // | ^ ┌ | | |
446 | -// // | |仮的| > |仮自| / \ vVP 仮自→仮的 | 仮的 | |
447 | -// // | となるような / \ | ↑ | |
448 | -// // | vVTを設定 / ┐ | 仮自 | |
449 | -// // | (|仮自|*1.2) / /vVM 仮自 | ↑ | |
450 | -// // | / / =(vMx*5,vMy*5,vMz*5) | | | |
451 | -// // | / / | | | |
452 | -// // | / / | | | |
453 | -// // | / / |仮自| = lVM * 5 | | | |
454 | -// // | 的 vT(vTx,vTy,vTz) | 的 | |
455 | -// // | ┌ ^ / | ↑ | |
456 | -// // | \ / ┐vM 現在の移動方向ベクトル | | | |
457 | -// // | vVP 仮自→仮的 \ // (vMx,vMy,vMz) | | | |
458 | -// // | 自 | 自 | |
459 | -// // | (_x,_y,_z) | | |
460 | -// // ---+------------------------------------------ ---+--------------------------- | |
461 | -// // | | | |
462 | -// // | |
463 | -// vVP が動きたい方向。vVPを求める! | |
464 | -// static const coord rv = 10; // 5 | |
465 | -// GgafDx::GeoVehicle* pGeoVehicle = getGeoVehicle(); | |
466 | -// //自→仮、自方向ベクトル(vM) | |
467 | -// //|vM| | |
468 | -// coord vVMx = pGeoVehicle->_velo_vc_x * rv; | |
469 | -// coord vVMy = pGeoVehicle->_velo_vc_y * rv; | |
470 | -// coord vVMz = pGeoVehicle->_velo_vc_z * rv; | |
471 | -// coord lvVM = pGeoVehicle->_velo * rv; | |
472 | -// //自→的、方向ベクトル (vT) | |
473 | -// coord vTx = tX - _x; | |
474 | -// coord vTy = tY - _y; | |
475 | -// coord vTz = tZ - _z; | |
476 | -// //|vT| | |
477 | -// coord lvT = UTIL::getDistanceFromOrigin(vTx, vTy, vTz); | |
478 | -// //|仮的| を lvVM の長さに合わせて作成 | |
479 | -// double rMT = (lvVM * 1.2 / lvT) ; | |
480 | -// //1.2は右上図のように一直線に並んだ際も、進行方向を維持するために、 | |
481 | -// //|仮自| < |仮的| という関係を維持するためにかけた適当な割合 | |
482 | -// coord vVTx = vTx * rMT; | |
483 | -// coord vVTy = vTy * rMT; | |
484 | -// coord vVTz = vTz * rMT; | |
485 | -// coord lvVT = lvT * rMT; | |
486 | -// //vVP 仮自→仮的 の加速度設定 | |
487 | -// //→vVP=( vVTx-vVMx, vVTy-vVMy, vVTz-vVMz ) | |
488 | -// pGeoVehicle->setAcceByVc((vVTx-vVMx) * RR_MAX_ACCE, | |
489 | -// (vVTy-vVMy) * RR_MAX_ACCE, | |
490 | -// (vVTz-vVMz) * RR_MAX_ACCE); | |
491 | -//} | |
492 | - | |
493 | - | |
494 | 465 | void MyBunshinWateringLaserChip001::onHit(const GgafCore::Actor* prm_pOtherActor) { |
495 | 466 | GgafDx::GeometricActor* pOther = (GgafDx::GeometricActor*) prm_pOtherActor; |
496 | 467 | //ヒットエフェクト |
@@ -25,3 +25,4 @@ | ||
25 | 25 | /Release_XP/ |
26 | 26 | *.dll |
27 | 27 | /gprofdot_result3.svg |
28 | +/.vs/ |