for(i=0;i<5;i++){
var inst = instance_create_layer(x, y, "instance_layer", obj_Bullet);
with (inst){
speed = other.shoot_speed;
direction = other.i*10;
}
}
for(i=0;i<5;i++){
var inst = instance_create_layer(x, y, "instance_layer", obj_Bullet);
with (inst){
speed = other.shoot_speed;
direction = other.dir;
}
dir += 10;
}
新しい「トリガー」、エリアや線に触れる、出る、入るなどでイベントをトリガーする機能が来るそうです。
ライブコーディング機能が実装される予定があるそうです
3Dの機能を求める声はあるようですが、YoYoGamesはあくまでGameMakerを2Dゲームエンジンとして位置づけ、2Dゲームに注力していきたいようです。
Intellisenseの改良についても、来年はじめに情報が出るかもしれません。
roomエディタ内でインスタンスのspriteを変えられるようにする議論があるそうです。
これができたら個人的にうれしい
オーディオ周りを全面的に改善する計画があり、オーディオ専門のプログラマを募集しているとも。
個人的には、リバーブとかのエフェクト機能が実装されたらいいなあ・・・
ビデオの再生機能が来年の前半にリリースされる計画があるそうです
永久ライセンスの人にも機能開放したみたいですね
CTRL+TAB も知りませんでした…
たしかに便利ですね!
そういえば作成するオブジェクト用に空のレイヤーを作っておくという発想はありませんでした・・・
こちらの方が使い勝手が良さそうなので、yOichiさんと同様にbulletレイヤーを作っておいて、instance_create_layer()を使っていくことにします。
ありがとうございました!
depthについて、詳しい解説ありがとうございます!勉強になります。
マクロについてもありがとうございます、scriptに記載していくことにしました。
ルームのフィルターとエフェクト機能なんて追加されてたんですね。
使用頻度は人によりそうだから、ちょっと怒るのはわかるかな…。
9sliceはすごい活用してるので、これがサブスク限定だとかなり怒ってたかもw
自分の場合ですと、roomエディターで自機のインスタンスレイヤーの上に弾のインスタンスレイヤーを作って、 instance_create_layer() で表示させていますね。
自分は色々とキャラクターの表示順を試しながら作っているのですが、故事的に、depthよりはroomのレイヤーで管理したほうが楽そうだな、という印象だったのが理由ですね。
質問1
instance_create_depthでもいいと思います。
この関数を使うデメリットというのは特にありません。
どちらを使うのが自分に都合がいいのかで選ぶといいと思います。
instance_create_layerで作るとレイヤーのdepthになります。
instance_create_depthで作ると引数で指定したdepthになります。
どっちで作っても後でdepthを変更できます。
GMS2はdepth毎にレイヤーを作成します。
質問2
コード、scriptのどこでもいいので、
というように記述してください
参考
https://manual.yoyogames.com/GameMaker_Language/GML_Overview/Variables/Constants.htm
ご回答ありがとうございます!
このためにPaypalアカウントを作っていたので、とりあえず無駄にならずに済んで良かったです。
どうやら、現在一時的にPaypal支払いができないようです。
解決時間は未定のようです。
https://forum.yoyogames.com/index.php?threads/gamemaker-studio-2-version-2-3-6-release-more.90551/#post-542644
CTRL+TAB
CTRL+T
CTRL+SHIFT+F
この3つは万人におすすめする機能で、私は常に使いマクリマクリスティーです。
ルームのフィルターとエフェクト機能がサブスク限定で古参開発者がじゃっかん怒ってましたね
Goto window の存在を初めて知りました(汗)。
トップページからブログに飛べるのは地味に嬉しかったり。
テクスチャグループのリネームができないようです。
CTRL+Tはコンテキストによって動作が変わる仕様になったようです。

私個人としては、Workspace Navigationウィンドウと、Gotoウィンドウと、Search & Replaceウィンドウはどこからでも使いたいです。
そこでRoom EditorのショートカットをCTRL+T以外に変更しました。これでRoom EditorからもCTRL+TでGotoウィンドウを開けるようになりました。
インストールしてざっとショートカット動作を確認。
修正された点
CTRL+TABで常にWorkspaces navigation windowが開くようになった(はず)。
タイルマップレイヤーでCTRL+C/Vができるようになった。
直ってない点
room editor上ではCTRL+Tを押してもGoto windowが開かない。代わりに新しいタイルマップレイヤーが作成される。
ありがとうございます。
regionかuser eventで悩んだ結果、今はuser eventでやらせてもらってます。
regionも便利なので使っていきたいですね。
よく思い出せないので申し訳ないです。
同じことはGMS2ではできないのでそれをやるには関数にすることになると思います。ですがもし、扱いやすさや慣れ以外の理由で関数にする必要がないものをあえて関数にするのも変かなと思う場合は、regionをお試しください。コードのブロックを開閉できるようになります。
イベント内のコードが長くなる点については、数百行でしたら私は気にせず書いています(関数も使っているのでそこまで長くなることはめったにありません)。
ご回答ありがとうございます。
説明が分かりづらく申し訳ありません。
1.4の頃ってCodeで書くにしても添付画像の赤丸のようにアクションとして並べるしかなかったと思っていて・・・(他に方法があった?)
その方法に慣れていたので、Step内でCodeが分割できないことに驚いて質問させていただきました。
色々な方法を提示いただき助かります。
objectにも関数定義できるのは知りませんでした。regionも便利ですね・・・
いずれも試してみます。ありがとうございました。
私は1.4の時からアクションは使わずCodeに書いてきたのでActionについて詳しく分からないのですが、1.4のActionsをドラッグして置いていくやり方に該当するのがGMS2のDnDではないでしょうか。これはコードを直接記述せずにアイコンを並べたりしてプログラミングしていく方法です。
コードを書いていくやり方で、コードを整理するには以下の方法があると思います。
出来ました!ありがとうございます。
しかし仰る通り、ショートカットキーが効きませんね、これは早く直してほしい・・・
実装できました!
詳しい解説までありがとうございます。勉強になりました!
また機会があればよろしくお願いします!
バージョンいくつからか不明ですが、少なくとも最新版ではショートカットキーのバグがあり
Ctrl+C/Vができなかったりします。その場合はRoomメニュー>Tile editingで同様の操作をしてみてください。
今は範囲選択して切り取り、貼り付けによって移動させる方法になってると思います。
連投になりますが、ループ用の変数iを角度にも使えば以下のように省略できます。(さっきの書いてから気づいた)
shoot_speed = 3;
for(i=0;i<5;i++){
var inst = instance_create_layer(x, y, "instance_layer", obj_Bullet);
with (inst){
speed = other.shoot_speed;
direction = other.i*10;
}
}
横から失礼します。
gamemakerのwikiでの解説です。このwikiは何かと参考になるかと・・・
https://www.wikihouse.com/GameMaker/index.php?cmd=read&page=instance_create_layer()&word=instance creat
wikiのプログラムを書きかえました。即興なので変な所あったらすみません。
弾を撃つのをfor文で5回繰り返して(repeatと同じようなもん)、一番下で1回ごとに角度用の変数dirを10ずつ増やしてます。
withの中身が発射した弾が出現した瞬間の処理(弾objectのcreateイベントを持って来てる感じ)なので、そこでローカル変数のdirection(向き)に変数dirを代入してます。(otherはwithの外の変数を持ってくるみたいな意味です)
shoot_speed = 3;
dir = 0;
for(i=0;i<5;i++){
var inst = instance_create_layer(x, y, "instance_layer", obj_Bullet);
with (inst){
speed = other.shoot_speed;
direction = other.dir;
}
dir += 10;
}
ありがとうございます!数が増えました!
これらに一定の角度つけて扇状にしたい場合はどうすれば良いのでしょうか?
こういうやり方はどうでしょうか?
理解が深まりました。感謝します。
はい、そういうことです!
「グローバルスコープ」とは特定のオブジェクトではなく、ゲーム自身を参照するということです。ゲーム自身にはdirectionは無いのでエラーになるというわけです。
asaさんコメントありがとうございます!
2.3以前→オブジェクトAの変数宣言したものを利用してスプリクトは実行できる。
2.3以降→"functionで包んでいないスクリプト内のコードはゲーム起動のタイミングで実行される。
"「directionという変数が定義されてないのに使おうとしてるよ」というエラーです。しかし変数directionはビルトイン変数なので定義しなくても使えるものです。"と前回asaさんが言っていました。
これはそもそもゲーム起動のタイミングだからスクリプト内のコードをしようとするから何も準備できていないよー!って状況だからビルトイン変数のdirectionが未定義エラーになるということでしょうかね。
なんかかなり腹落ちした気がします……!さらにソース提示までいただいてありがとうございます!
直ってよかったです!!
2.3以前のチュートリアルを参考にされたのだと思います。
古いチュートリアルで学習すると同じことが起こるので、今後の参考に簡単に説明します。
バージョン2.3以前の形
scriptには処理を直接記述していました。1つのscriptは1つの関数の定義になっていました。
例:
script "PlayerAnimateSprite"
バージョン2.3以降の形
処理をfunctionで包む形で記述し、これを関数定義とするようになりました。例は1つのfunctionだけですがscriptの中に複数のfunctionを書けるようになりました。
例:
script "PlayerAnimateSprite"
なので、古いチュートリアルのコードは全て、この読み替え、書き換えが必要になります。
以下に少し説明しますが、説明が雑で逆に混乱するかもしれないので、参考程度に読んでみてください
2.3以前では、Runしてもscript "PlayerAnimateSprite"は実行されません。関数"PlayerAnimateSprite"が定義されるだけです。オブジェクトAからPlayerAnimateSprite();を呼び出した時点でオブジェクトAのスコープで実行されます。コードにあるdirectionはオブジェクトAのdirectionが参照されるのでエラーになりません。
2.3以降では、Runしたらscript "PlayerAnimateSprite"に書かれたコードはグローバルスコープのコードとして全て実行されます。functionで包んでないコードは全てゲーム起動のタイミングで実行されます。そこでオブジェクトの変数であるdirectionを参照すればエラーになります。
functionで包めば、それが関数定義になります。Runした時点で関数が定義され、オブジェクトから呼び出した時点で実行されます。
関連資料
https://www.yoyogames.com/en/blog/gamemaker-studio-2-dot-3-new-gml-features
asaさんありがとうございます!できました!
どのようにお伝えしていいかわかりませんが、本当に嬉しいです!
1週間近くいろいろ変化させてみたり、全て打ち直したりしてだめだったので、本当に助かりました!
夜遅くにありがとうございます!
コードが書かれているのはscriptファイルの中ということですね。
関数を呼び出してる部分を探しますと、PlayerAnimateSprite(); があります。
PlayerAnimateSprite がスクリプトファイルの名前でしょうか?
その前提で以下に説明しますと、このスクリプトを開いて、
という形になっていなければ、この形にしてください。コードを全部コピペして
の中に入れるだけでOKです。
そしてRunするとどうなるでしょうか?