2016-07-15 11 views
0

私のゲームをよりダイナミックにするために、私は事前定義された変数に代入するために引数が使用されるスクリプトを作成しました。左mouse_buttonをクリックするとGame Maker Studio、スクリプト引数が変数に応答しない

は、コードがある:

weapon1とammo1はローカル変数です
script_execute(scrShoot, weapon1, ammo1); 

。次のように

簡単なスクリプト 'scrShoot' は:

if argument0 = 1 
{ 
    argument1 -= 0.05; 
    instance_create(x,y,objBullet); 
} 

if argument0 = 2 
{ 
    argument1 -= 0.05; 
    repeat(4) 
    { 
     instance_create(x,y,objBullet2); 
    } 
} 

期待通りに動作argument0、成功しweapon1により置換されている、しかし、変数ammo1は減少することはありません。

引数1の代わりに手動でammo1を書き込むと、スクリプトは正常に動作します。クリックごとに0.05減少します。

スクリプトを使用した他のテストでは、変数を使用して引数を置き換える問題があると考えられています。文字列と数値は、期待通りに機能します。

複数のシナリオでこの問題が発生しましたが、私はインターネット上の他の誰も同じ問題を抱えているように思われます。

答えて

3

スクリプトに引数として数値を渡すと、そのスクリプトにはコピー番号のコピーが与えられます。つまり、スクリプトは、あなたがそれを渡していることを確認しませんammo1 - それはあなたがそれを渡したと見て、例えば、50。行argument1 -= 0.05は、ammo1ではなく、スクリプトが受け取るコピーを変更するだけです。

これは参照によりとは対照的に(変更する変数にスクリプトを指す)、(スクリプトにそれを修正することができるコピーを与える)値によって引数を渡すと呼ばれます。

参照:What's the difference between passing by reference vs. passing by value?

GML自体が参照による引数を渡すための構文を持っていないので、あなたは運の出ています。

/// scrShoot() 
var o = argument0; 
if (o.weapon == 1) { 
    o.ammo -= 0.05; 
    instance_create(x, y, objBullet); 
} 

/// Your object 
script_execute(scrShoot, self); 
:あなたはは、私は信じて、何を行うことができ、スクリプトにインスタンスID(self様またはother、またはinstance_createへの呼び出しの結果を)渡しです
関連する問題