日々進化を続けるRigid Chipsですが、Ver1.02では特に大きな変化がありました。
それが_bye()関数によるチップの切り離しです。
コレを使うことでスムーズなブースターの切り離し、子機の射出、ミサイル発射等々が実現可能です。
今回はこの中でも特に人気の高い「ミサイル発射」を取り上げてみたいと思います。

まずはこれを開いてみてください。

おなじみのきほんけいですね。
コレに下記を追加します。

Val{
	fire(default=0,min=0,max=1,step=1)
	m1p(default=0,min=0,max=1000000,step=0)
Key{
	4:fire(step=1)
Body{
		S:Chip(){
			S:JET(angle=-80,power=m1p,name=m1){		//南方向にジェット、角度は-80度、パワーはm1p、チップの名前はm1
			}
			W:Frame(){
				W:Wheel(angle=90,power=Engine){
				}
			}
			E:Frame(){
				E:Wheel(angle=90,power=-Engine){
				}
			}
		}
Script{
	if fire=1 {m1p=1000000 dummy=_bye(m1)}			//fireが1なら、m1pを1000000にする、チップm1を切り離す。

missile.jpg

うまくfile追加(リンク切れ中)出来ました?

ミサイル(ジェット)に点火する→ミサイルを切り離す。
これが基本的なミサイルの動きになります。

_bye()を使うときにはいくつかの注意点があります。
_bye()で切り離されたチップは、そのパワーを徐々に失っていきます。
また、切り離されたチップに対してPOWER命令を使うことは出来ません。
そのため、ミサイルを切り離してから点火しようとすると、空しくその場で落下することになります。
ANGLE命令は普通に使えますので、切り離したミサイルをコントロールする事などは可能です。
切り離したチップに対しても_bye()は使えるので、空中で拡散するミサイルとかも出来ますね。

他にVer1.03時点の仕様(バグ?)として_BYE()を単体で使うとその後の命令が無視されるというものがあります。

	if fire=1 {m1p=1000000 fire=2 _bye(m1)}		//これならOK
	if fire=1 {m1p=1000000 _bye(m1) fire=2}		//これはNG FIRE=2が実行されない。

_bye()は if fire=1 {_bye(M1)} と言うような単体での記述も出来ますが、
現状では dummy=_bye(m1) のように何かダミーの変数を指定しておく方が無難なようです。
(これだと上記の現象は起こらない。)

さて、一発だけでは寂しいのでもうちょっと追加してみましょう。

	fire(default=0,min=0,max=2,step=2)
	mis(default=1,min=0,max=3,step=0)
	m1p(default=0,min=0,max=1000000,step=0)
	m2p(default=0,min=0,max=1000000,step=0)
	m3p(default=0,min=0,max=1000000,step=0)
		S:Chip(){
			S:JET(angle=-80,power=m1p,name=M1){
			}
			W:Frame(){
				S:JET(angle=-80,power=m2p,name=M2){
				}
				W:Wheel(angle=90,power=Engine){
				}
			}
			E:Frame(){
				S:JET(angle=-80,power=m3p,name=M3){
				}
				E:Wheel(angle=90,power=-Engine){
				}
			}
		}
if fire=1 & mis=1 {fire=2 mis=2 m1p=1000000 dummy=_bye(M1)}
if fire=1 & mis=2 {fire=2 mis=3 m2p=1000000 dummy=_bye(M2)}
if fire=1 & mis=3 {fire=2 mis=0 m3p=1000000 dummy=_bye(M3)}

fireのmaxとstepが2に変更されていることに注意してください。
これは一発撃つごとに確実に射撃を止めるために行っています。

if fire=1 & mis=1 {fire=2 mis=2 m1p=1000000 dummy=_bye(M1)}	//発射ボタンを押してミサイルが一発目ならこれが発射される。
if fire=1 & mis=2 {fire=2 mis=3 m2p=1000000 dummy=_bye(M2)}	//一発目が発射された後fireが2になっているのでここで止まる。
if fire=1 & mis=3 {fire=2 mis=0 m3p=1000000 dummy=_bye(M3)}	//ボタンが放されるまでfireは2のままなので、止まったまま。

例えばfireのmaxとstepが1だったとすると…

if fire=1 & mis=1 {mis=2 m1p=1000000 dummy=_bye(M1)}	//発射ボタンを押してミサイルが一発目ならこれが発射される。
if fire=1 & mis=2 {mis=3 m2p=1000000 dummy=_bye(M2)}	//一発目を発射した時点でmis=2になってるのでこれも発射される。
if fire=1 & mis=3 {mis=0 m3p=1000000 dummy=_bye(M3)}	//二発目を発射した時点でmis=3になってるのでこれも発射される。

このようにボタン一回ですべて発射されます。

missile3.jpg

上手くfile発射できましたか?





それでも物足りないfile貴兄に。


添付ファイル: filebasic_mis80.rcd 181件 [詳細] filebasic_mis3.rcd 124件 [詳細] filemissile3.jpg 24件 [詳細] filemissile.jpg 26件 [詳細]