さて、ターボパワーで強力な動力性能を得たきほんけいですが、また問題が出てきました。
スピードが上がってくると今度は非常に曲がりにくいはずです。

under.jpg
[どアンダー!直後落水]

自動車が曲がるときには、左右の車輪に回転数の差が発生します。
旋回半径の小さい内側の車輪は回転数が少なく、半径の大きい外側は多くなるわけです。
通常、この差をデフギヤで吸収するのですが、きほんけいにはデフギヤがありません。
結果としてリアタイヤが直進しようとする力が強くなり、アンダーステアが出るわけです。
リアのみに付いたウイングがこの動きをさらに助長します。

前置きが長くなりましたが、今回はこれを解決してみましょう。
ある程度のスピードになったら、内輪の回転を落としてやることにします。
それでは、いつものようにfile前回のテキスト(リンク切れ中)を開いてください。

Val
{
Handle(default=0,min=-20,max=20,step=5)
Engine(default=0,min=-2500,max=2500,step=2500)
wing(default=-0,min=-60,max=-0,step=0)
EL(default=0,min=-10000,max=10000,step=10000)
ER(default=0,min=-10000,max=10000,step=10000)
tb(default=0.6,min=0.6,max=3,step=0.05)
}

左右のタイヤを独立して制御するため、変数EL、ERを追加します。

		S:Chip(){						//6:  1の南側にチップ
			W:Frame(){				//7-1: 6の西側にフレーム
				W:Wheel(angle=90,power=EL){		//8-1: 7-1の西側にホイール、90度曲げる
				}
			}
			E:Frame(){				//7-2: 6の東側にフレーム
				E:Wheel(angle=90,power=-ER){	//8-2: 7-1の東側にホイール、90度曲げる
				}
			}
		}

出力もそれに合わせて変更します。

script
{
V=_VZ(0)
wing=V*2
if _abs(v)>5 { tb=3 }
EL=engine*tb
ER=engine*tb
if (v>-18) {goto owari:}			//Vが-18より大きければ、ラベルowariにジャンプする
if (handle<0) {el=el*0.5}			//handleが0より小さければ、ELに0.5を乗算する
if (handle>0) {er=er*0.5}			//handleが0より大きければ、ERに0.5を乗算する
label owari				//ラベルowari
}

新しい命令gotoとlabelが出てきました。
scriptは通常上から下へと順番に実行されていきます。
gotoはこの流れを無視して、labelで書いてある場所に飛ぶことが出来ます。
つまり (v>-18) が成立した場合…

script
{
V=_VZ(0)
wing=V*2
if _abs(v)>5 { tb=3 }
EL=engine*tb
ER=engine*tb
if (v>-18) {goto owari:}			//Vが-18より大きければ、ラベルowariにジャンプする
if (handle<0) {el=el*0.5}			//handleが0より小さければ、ELに0.5を乗算する
if (handel>0) {er=er*0.5}			//handleが0より大きければ、ERに0.5を乗算する

上の2行は完全に無視されることになります。

label owari				//ラベルowari
}

つまり「Vが-18より大きくない」、「handleが0より大きい(小さい)」この2つの条件が揃った時に、内輪の回転が落ちることになります。

script
{
V=_VZ(0)
wing=V*2
if trug > 800 { tb=3 }
EL=engine*tb
ER=engine*tb
if handle<0 & v<=-18 {EL=EL*0.5}
if handle>0 & v<=-18 {ER=ER*0.5}
}

Rgid Chips ver1.01からは&(and) |(or)も使えるようになったので、このように置き換えることも可能です。

&(and)とは複数の条件のすべてが成立した時にだけ{}内の命令を実行します。
|(or)は複数の条件の中で、1つでも成立していれば{]内の命令を実行します。

if a=1 & b=2 & c=3 {goto dokoka}

この場合、a=1、b=2、c=3がすべて満たされていれば、ラベルdokokaへジャンプします。

if a=1 | b=2 | c=3 {goto dokoka}

この場合で例えばa=1だった場合、bとcが成立して無くてもラベルdokokaへジャンプします。

circuit.jpg

扱いやすくなりました?


添付ファイル: filecircuit.jpg 45件 [詳細] fileunder.jpg 56件 [詳細]