11. ·:·:· 外部スクリプトのインポート ·:·:·

> Stone Story RPGの案内へ戻る

·:·:· 外部スクリプトのインポート ·:·:·

あなたのスクリプトはすべて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回だけ実行され、毎フレームでは実行されません。

▲ 上に戻る


> Stone Story RPGの案内へ戻る