GameMaker 日本語掲示板

Instance_create_ layerについて

3 コメント
views
16 フォロー

Instance_create_layerの仕様?がまだよく理解できていません。chatgptにも聞いてみたのですが、新しいバージョンに適用できてなかったりするので、正しいのかが分かりません。やりたい事としては、objectAとobjectBをobjectCでInstance_create_layerするというもので、

objectA

//create
visible=false
kakudo=random_range(1,360)
x=random_range(100,200)
y=random_range(15,30)
//step
x+=lengthdir_x(1,kakudo)
y+=lengthdir_y(1,kakudo)

objectB

//create
visible=false
//step
x=objectA.x //多分ここが違う
y=objectA.y

objectC

//create
alarm[0]=1
a=0
//alarm[0]
var a= instance_create_ layer(x,y,layer,objectA)
var b= instance_create_ layer(x,y,layer,objectB)

a.visible=true
b.visible=true

a++
if(a!=5){
alarm[0]=1
}

というようなプログラムにしたのですが、
x=objectA.x
y=objectA.y
だと、本来instance_create_layerで生成したobjectAのx,y座標にするつもりが、本体のobjecrAの方のx,y座標になってしまいます。どうしたらいいですか?もし、そもそもinstance_create_layerの使い方が間違っていたら教えてください。

Giga
作成: 2024/03/09 (土) 16:47:59
通報 ...
1
生高橋 2024/03/09 (土) 22:25:09

BとCのコードを変更をしてみました。
これで動作すると思われます。

objectB

//create
a = noone;//aのインスタンスを保持する変数
visible=false

//step
x=a.x//cで受け取ったaの座標と同期
y=a.y

objectC

//create
alarm[0]=1
a=0
//alarm[0]
var a= instance_create_ layer(x,y,layer,objectA)
var b= instance_create_ layer(x,y,layer,objectB)

b.a = a;//bにaのインスタンスを渡す

a.visible=true
b.visible=true

a++
if(a!=5){
alarm[0]=1
}

【細かい説明】
インスタンスとは生成されたオブジェクトのコピーことを言います(たぶん)
以下のソースコードだと、固有のインスタンスではなくおそらく最初に生成されたオブジェクトAの座標を取得することになります。

x=objectA.x 
y=objectA.y

objectAが一つしかない場合はこれで問題ないですが複数ある場合はどのobjectAを取得できるのか明確ではありません。
ですのでinstance_create_layerで変数を受け取ってそれを用いて変数を変更したり受け取ったりします。
今回変更したコードはCで生成されたobjectAのインスタンスをobjectBに渡して利用するコードになってます。
少々流れが複雑ですがわからないことがあれば聞いてください。

2

a.xが見つからないというエラーが起こってしまったので、代用でobjectAを作成のaの値に入れ、おかしな挙動にならないよう、b.a = aの後にアクティブになるようにしたところ上手くいきました!!今まで何となくで使ってきたので細かい説明助かりました、ありがとうございます!!