·:·:· 外部スクリプトのインポート ·:·:·
あなたのスクリプトはすべてMind Stoneにある必要はありません。
Stonescriptは 'import
' および 'new
' キーワードを使用して外部ファイルの読み込みをサポートしています。
外部スクリプトが機能するためには、セーブファイルのフォルダ内にある /Stonescript フォルダ内に配置され、'.txt
' で終わる必要があります。
最も基本的な例では、外部スクリプトがインポートされ、それがMind Stone内に直接あるかのように実行されます。
これはスクリプトを整理する便利な方法です。
import Rocky import Deadwood import Caves import Forest
スクリプトがインポートされると、それが独自のコンテナにコピーされ、参照として返されます。
外部スクリプトで宣言された変数は分離され、他のスクリプトの変数とは干渉しません。
この例では、印刷ユーティリティスクリプトが簡略化されたサービスを提供しています:
// PrintUtil.txt func LowerLeft(x, y, color, message) y = y + screen.h >`@x@,@y@,@color@,@message@ func LowerRight(x, y, color, message) x = x + screen.w y = y + screen.h >`@x@,@y@,@color@,@message@
Mind Stone内のメインスクリプトでは、このように使用できます:
var print = import PrintUtil disable hud print.LowerLeft(0,-1,#ffffff,"Health: " + hp)
高度なソリューションでは、コンポーネンティゼーションまたはオブジェクト指向パラダイムを実装するために、同じスクリプトを複数回 'new
' コマンドを使用してインポートできます:
// Vector.txt var x = 0 var y = 0 func init(_x, _y) x = _x y = _y func subtract(otherVect) x = x - otherVect.x y = y - otherVect.y
Mind Stone内のメインスクリプトでは、このように使用できます:
var vectFrom = new Components/Vector var vectTo = new Components/Vector vectFrom.init(5, 4) vectTo.init(8, 2) vectTo.subtract(vectFrom) >x = @vectTo.x@, y = @vectTo.y@
外部スクリプトは 'ToString()
' 関数を実装でき、高度な印刷コマンドで直接使用できるようになります:
// Vector.txt var x = 0 var y = 0 func init(_x, _y) x = _x y = _y func ToString() return "(" + x + ", " + y + ")"
Mind Stone内のメインスクリプトでは、このように使用できます:
var v = import Components/Vector v.init(3,5) >Vector = @v@
外部スクリプトはサブフォルダからインポートできます:
import Games/Blackjack import Cosmetics/PetFrog import Cosmetics/Hats
'import
' と 'new
' の間には似ている点がありますが、2つの重要な違いがあります。 'import
' では同じオブジェクトが毎回返されます。
同じスクリプトを複数の場所からインポートすると、それらはすべて同じオブジェクトを使用します。
'new
' でインポートされたスクリプトは一意のコピーですが、そのスクリプト本体は1回だけ実行され、毎フレームでは実行されません。