トップページgamedev
996コメント482KB

【2D】ゲーム作成ツールGameMaker part3【マンセー】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/05/11(日) 01:41:47ID:PRhlwPyW
無料Windows用2Dゲーム作成ツール"Game Maker"について、色々と語り合うスレッドです。

●本家(英語)
 ttp://www.gamemaker.nl/
●GameMaker Japan - 非公式情報サイト(日本語)
 ttp://gamemaker.main.jp/
●初心者向けチュートリアル
 ttp://gamemaker.main.jp/modules/articles/index.php?cat_id=1


前スレ: 【2D】ゲーム作成ツールGameMaker【マンセー】
http://pc8.2ch.net/test/read.cgi/gamedev/1087068523/
0783名前は開発中のものです。2009/02/15(日) 20:07:47ID:oFgirjli
座標をゆっくり動かすだけでふんわり感は出ると思うんだけど
もし極値に近いところほどゆっくりにしたいとかなら
三角関数を使って座標を決めればいいかと
0784名前は開発中のものです。2009/02/15(日) 20:54:16ID:KuC38cSs
>>782
重力加速度的に動かせばいいと思うよ。

create eventにて初速をdirection 270 もしくは90に
速度2か3くらい設定しておいて、
更にcreate時のx,y座標をx_start,y_startという変数に覚えさせておく。

あとは数フレームごとに
gravity_directionを
point_diection(x,y,x_start,y_start)とすれば、ふんわり
初期位置に向かって動くと思う。

gravityの値は0.1か0.2くらい?
0785名前は開発中のものです。2009/02/15(日) 23:18:47ID:WsRH8hUT
えと、
>gravity_directionを
>point_diection(x,y,x_start,y_start)とすれば、
これはどうやればいいのでしょう?
set the gravityのdirectionに入れるだけだとやっぱり駄目なのでやり方をお願いします。
0786名前は開発中のものです。2009/02/16(月) 17:25:30ID:ILNE3Tn0
>>785
784じゃないけどステップイベントに「Execute a piece of code」アクションをおいて

gravity_direction = point_diection(x,y,x_start,y_start);

とかいてやればいいんでね?
0787名前は開発中のものです。2009/02/16(月) 22:38:37ID:bdIz0Orh
set the gravityのdirectionに入れるのと原理的には同じことだから
たぶんどこか他のところミスってるべ。
というか、そのやり方だとスタート地点から離れられないし
素直に>783でよくないかい?

三角関数といっても別段難しく考える必要なくて
/* Createイベント */
a = 0;
/* Stepイベント */
a += 0.1;
y += sin(a) * 0.5;
これだけでそれらしく動く。後は数字を色々変えてみて調整すればいい
0788名前は開発中のものです。2009/02/26(木) 17:16:38ID:V4sqiU4f
アクションゲームで地面に着いたとき着地音を出したいのですが
コリジョンで設定すると上にある足場にぶつかったときや壁にぶつかった時も音が出てしまいます。
下方向に着地した時だけの設定を作りたいのですがどう設定すればいいのでしょうか
0789名前は開発中のものです。2009/02/26(木) 20:12:16ID:NIFAUqfl
>>788
>>420から抜粋
「行き詰ったら原点に返れ」
詰まったらまず、何をしたいのかを明確にする。それから、したいことを分析しよう。

何をしたいのかは明確。『地面に着いたとき着地音を出したい』
んで、ここからしたいことを分析するわけだ。
>コリジョンで設定すると上にある足場にぶつかったときや壁にぶつかった時も音が出てしまいます。
そりゃそうなるよな。コリジョンってのは単に接触したときのイベントなんだから、
『足場のオブジェクトと接触したとき』に音が鳴るわけだ。
プログラム的にはおかしくない。けど、やりたいのはこれじゃない。

さて、ここでGMやらプログラムやらは横に置いといて、理論的に考えてみよう。
『地面に着いたとき』ってのはどういうときだ?
「前まで空中にいて、今足場に触れた」ってのは?
いや、それだとジャンプ中に壁にぶつかったときにも音が鳴ってしまう。
ついでに、上にある足場にぶつかったときも鳴るな。
「降下中に足場に触れた」なら?
これも、降下中に壁にぶつかったときに音が鳴ってしまうことになる。
『地面に着いたとき』という状況を別の言葉で言い換えるとどうなるんだろう?

……と考えていくのも分析の一つ。勿論別のアプローチもある。例えば、似た状況を探すとか。
着地音を出したいってことなら、『ジャンプ後、足場に乗ったときに降下が止まる』というのは実現できてるのが前提だよな?
それは『地面に着いたとき』という状況のはず。そこから何かヒントが見つからないかな?
また、その降下を止めたときに音を鳴らすという考え方もある。


生憎これから用事があるので、考えられるだけ並べてみた。
何かヒントになれば幸い。これ抜きで解決法が見つかればさらに幸い。
0790名前は開発中のものです。2009/02/26(木) 20:36:54ID:lirPt0Cs
ご苦労!
0791名前は開発中のものです。2009/02/27(金) 12:58:14ID:7UDXTjXQ
イベントでステップごとに変数を1ずつ増加させていって特定の数になったとき一つアクションを起こしたいのですが、
5の時にA、20の時にA〜と一つずつやるのでなく5、20、40の時にA〜など複数を一括で設定するのはどうやればいいのでしょう。
0792名前は開発中のものです。2009/02/27(金) 17:03:38ID:QoamVV9D
ユーザ定義イベントを使う。

ステップ内で
a+=1;
if (a == 5 || a == 20 || a == 40) event_user(0);

等と書いておき、起こしたいアクションをUser 0イベントの中に入れる。

ユーザ定義イベントの場所は
Add Event
>Other
>User defined
>User 0

ユーザ定義が何かわからなければ>>734辺りやヘルプを参照。
0793名前は開発中のものです。2009/02/27(金) 17:30:52ID:QoamVV9D
……いや、もしかしてGML使えないのか?
だったら、Execute Codeの中に

event_user(0);

とだけ書いたもの(Aと呼ぶ)を

〔VAR〕 If a is equal to 5
 A
〔VAR〕 If a is equal to 20
 A
〔VAR〕 If a is equal to 40
 A

と置いて、起こしたいアクションをUser 0イベントの中に入れとけ。
0794名前は開発中のものです。2009/02/28(土) 17:47:00ID:gTDyAg6K
主人公がプレイ中に操作も外見も完全に別のキャラクターになる状況で
各主人公オブジェクトの親に「主人公カメラ」を設定しました。
ビューが「主人公カメラ」を追うようにしたのですがキャラクターが切り替わる際に
カメラがしっかり付いていかず画面ががくっとなります。
どうも切り替わる際に一瞬だけ「主人公カメラ」を見失っているようです。
動いているものがその場で別のオブジェクトになってもビューがスムーズにそれを追ってくれる方法はありますか?
0795名前は開発中のものです。2009/03/01(日) 01:28:59ID:FK5vDD5W
親子関係にしなければいいんじゃないかな
それで自分でビューが追うべきインスタンスをカメラ側で設定すればいいと思う
0796名前は開発中のものです。2009/03/01(日) 03:20:11ID:n7LRNs7y
基本的な質問で申し訳ないのですが
「save game」
で保存されるものの詳細って
何処かに記載されているでしょうか?

>保存されるデータは基本的な情報しかないことに注意してください。
>再生中の音楽や、音楽再生中の正確な位置などは、保存されません。
>また、変更されたリソースも保存されません。
>データ構造のデータや、パーティクル、マルチプレイヤの設定なども保存されません。
とは書いてあるのですが、具体的に何が保存されて
何が保存されないのかが気になりまして。
0797名前は開発中のものです。2009/03/01(日) 18:36:17ID:KiSfn/LG
>>796
そのヘルプのが一番詳しい説明なんだけれど。
そこに書いてあるもの以外は全部保存されると思っておけばいい。
そいつら除いたら残るのはグローバル変数(組み込みとユーザ定義含めて)、
ルーム内のインスタンス、それぞれのローカル変数、
あとはpersistentなルームの状態くらいかな。
0798名前は開発中のものです。2009/03/01(日) 19:20:12ID:n7LRNs7y
>>797
ありがとうございます。

保存したい情報が、まんまだと保存されていなければ
一時的にグローバル変数に保持しておくように
してみます。

逆に保存したくない情報がロードによって復帰してしまう場合は
ロード直後に初期化してしまうとかですかね?

セーブしたい内容、したくない内容
セーブ/ロードのタイミング等、複雑になりそうであれば
自前で作るのも検討します。

0799名前は開発中のものです。2009/03/01(日) 19:45:16ID:U/3M/kF8
gravityの使い方がわからないので教えてください。
gravityを使おうとすると実行時にgravityを使ったオブジェクトとその行とVariable name expectedというエラーが出ます。

用はそんな変数ねえよ。ってことなんでしょうが、
Draw a textで
'加速度 ' + string(bear.gravity )
'加速度方向 ' + string(bear.gravity_direction )
(bearはオブジェクト名です。)

とすると上はエラーになりますが下はエラーが出ず表示されます。
ヘルプを見てもgravityとgravity_directionで引数の数が違ったり書き込み禁止の違いがあったりするわけではないので、
変数の呼び出し方は間違ってはいないとと思うのですが、何が間違っているのでしょうか?

バージョンは5.3aです。
オブジェクトで生成時にオブジェクト名をいれずに、gravity=0としたり、ボタンが押されたときgravity=0としても同様のエラーが出ます。
bear.grまで入力して入力補正でbear.gravityと入力することも試したのでスペルミスもないと思います。
0800名前は開発中のものです。2009/03/01(日) 20:04:57ID:KiSfn/LG
「変数名が必要です」 = 「gravityが変数の名前ってありえないよねー」
つまりgravityは何か別のもの、例えばオブジェクトだとか
スプライトだとかの名前なんだよ!
といった理屈で、変数名とリソース名がかぶってるとそのエラーになります。

そういうことを避けるために、スプライト名にはspr_とかオブジェクト名には
obj_とかプレフィクスを付けて区別することが推奨されてるわけで。
0801名前は開発中のものです。2009/03/01(日) 20:28:59ID:U/3M/kF8
確かにスプライトとオブジェクトが同じ名前だったのでなるほどと思ったのですが、エラーが解決できません。
名前をそれぞれspr_bearとobj_bearに変えて、下の二つをそれぞれ試してもやはり上だけエラーになります。
'加速度 ' + string(obj_bear.gravity)
'加速度方向 ' + string(obj_bear.gravity_direction)

エラー内容も同じですし、他にbearというリソースはないです。
よろしければもう一度ご指摘をお願いします。
0802名前は開発中のものです。2009/03/01(日) 20:30:28ID:Y4TCiCmT
パーティクルだけを加算合成して、
後は普通にするというのはできないでしょうか?
0803名前は開発中のものです。2009/03/01(日) 20:32:52ID:KiSfn/LG
いや、gravityって名前のリソースがあるでしょってこと。
コードエディタで「gravity」って単語が青じゃなくて紫になったら100%それ。
0804名前は開発中のものです。2009/03/01(日) 20:40:00ID:ab64wVb2
>>802
パーティクルを使ったことがないので実際どうなるかわからんが、ヘルプによると、

>Normally particles are blended with the background in the same way as sprites.
>But it is also possible to use additive blending.
>This gives in particular a great effect for explosion.

>part_type_blend(ind,additive)
>Sets whether to use additive blending (1) or normal blending (0) for the particle type.

(訳)
通常、パーティクルはスプライトと同じように描画されます。
しかし、加算合成を使うことも可能です。
(次の一文必要なさそうなので略)

part_type_blend(ind,additive)
additive
1:加算合成
0:通常

ということで、part_type_blend(ind,additive)を使ってみては?
0805名前は開発中のものです。2009/03/01(日) 20:40:55ID:U/3M/kF8
分かりました。
gravityというスクリプトを作ってたのでそれの名前を変えたら実行できるようになりました。
本当にありがとうございます。
0806名前は開発中のものです。2009/03/01(日) 20:42:08ID:Y4TCiCmT
>>804
ありがとうございます。
早速やってみます。
0807名前は開発中のものです。2009/03/02(月) 09:51:07ID:uDCLfBnj
カットインのようなものを作りたいのですがdrawで表示するスプライトを半透明にすることはできませんか?
もしくはオブジェクトをビューのyと基点を合わせながら横に加速させる方法があれば教えてください
0808名前は開発中のものです。2009/03/02(月) 22:47:21ID:UrY5j/m3
draw_spriteで半透明にならないって意味だったらdraw_sprite_extの方を使え。
後半は意味がよくわからんが、何かを加速させたいならスピードを一定量ずつ増やせばいい。
0809名前は開発中のものです。2009/03/03(火) 19:46:03ID:4PMDwMZy
横スクロールアクションを作りたいのですが、gmdやgm6で配布されていて中身の見れるゲームはありますか?
0810名前は開発中のものです。2009/03/03(火) 22:47:02ID:CEgL9EGt
>>809
公式のフォーラム行ったらチュートリアルから中身見れるのまで色々あるよ。
日本人が作ったのは閉鎖的な国民性から察するにどこにもなさそうだけど。
0811名前は開発中のものです。2009/03/04(水) 00:48:18ID:q7VrZUsH
gamdev wikiが機能してたころはいろいろうpされてたんだけどね。
うpロダごと消失して、資産が無くなった。

一部は手元にあるが、補完していいものなのだろうか・・・。
0812名前は開発中のものです。2009/03/04(水) 00:48:53ID:q7VrZUsH
あ、gamdevは現行のでなく、旧gamdevね。
0813名前は開発中のものです。2009/03/04(水) 20:14:05ID:TCZrRgAQ
んー、公式かー
英語苦手なんだけど探してみます
0814名前は開発中のものです。2009/03/05(木) 01:32:36ID:UPJSPUse
なにー、しばらく見てないうちにgamdev消えてたのか!
まいったなぁ・・・
0815名前は開発中のものです。2009/03/06(金) 01:25:31ID:fiR1q+Tb
アクションの跳ね返りを使うと入射角が反射角と等しくなったり垂直に当たると垂直に跳ね返ってしまいます。
壁に当たった時垂直なら少しずらすようにする、あるいはある程度ランダムに跳ね返るようにしたいのですがどうすればいいでしょう?
0816名前は開発中のものです。2009/03/06(金) 09:57:33ID:LhdGRRlv
特殊な跳ね返りは自前でするしかないよ。
ローカル変数の speed と direction (もしくは、hspeed と vspeed)をいじって、
自分の思うような跳ね返り制御を作るべし。
ランダムは、GML関数 random() を使用するとよい。
0817名前は開発中のものです。2009/03/07(土) 00:49:14ID:0T7+yypj
よく位置座標の指定で、相対的な位置の指定とありますが
この基準となる座標はどこでしょうか?
スプライトの中心点でよろしいのでしょうか?
0818名前は開発中のものです。2009/03/07(土) 01:07:42ID:JJRbXmJT
>>817
アドバンスドモードでスプライトプロパティーを開いたら
Originってのがみれると思う。
これがそのスプライトの基準座標になる(原点)
デフォルトは(0.0)で一番左上の位置、Centerボタンを押すと
自動的にど真ん中に原点が設定される。
アドバンスドモード切替は
「File」メニューにある「Advanced mode」にチェックを入れると切り替わります。
0819名前は開発中のものです。2009/03/07(土) 21:49:17ID:0T7+yypj
>>818
ありがとうございます
0820名前は開発中のものです。2009/03/07(土) 22:55:52ID:3TWKzE70
背景の多重スクロールが出来ない。
0821名前は開発中のものです。2009/03/08(日) 15:09:06ID:eu0flUmZ
スプライトのアニメーションで、一コマあたりの表示時間を決めることはできないのでしょうか?
同じ絵を何個も登録することでしかアニメーションの長さを調整するしかないのでしょうか
0822名前は開発中のものです。2009/03/08(日) 17:21:43ID:yExqEGdE
>>820
透過設定した背景画像を重ねてスクロールさせるってのはだめ?
roomの設定で8枚まで背景画像を設定できる。
また、アドバンスドモードでタイルを使用するとか。
この場合は、自力でGMLで制御する必要があるが。

>>821
ローカル変数 image_speed で、1ステップあたりの送りコマ数を設定できる。
デフォルトは1なので、1ステップで1コマ進む。
image_speedを 1/2にすると2ステップで1コマ進むようになる。
また、マイナスにすると逆送りになる。
0823名前は開発中のものです。2009/03/08(日) 17:22:44ID:Bfb+aHVH
>>821
っimage_speed

image_speed = 1; // 1フレーム1コマ
image_speed = 2; // 1フレーム2コマ
image_speed = 0.5; // 2フレーム1コマ
0824名前は開発中のものです。2009/03/08(日) 17:23:43ID:Bfb+aHVH
リロードすればよかったf(- -;)
0825名前は開発中のものです。2009/03/08(日) 17:37:26ID:yeeZk4Xb
>>822ではないが補足
 1コマ当りの表示時間を秒単位で設定したい場合、room_speedと合わせて
使用することで可能になる。room_speedは1秒間で何ステップ処理するかを
設定する変数で、俗にいうfps設定。(ルームプロパティのsettingsタブのspeedの数値がそれにあたる)
で、obj_aというオブジェクトの1コマ当りの表示時間を0.5秒で設定したい場合,GMLだと
   obj_a.image_speed = 1/(room_speed*0.5);
と書いてやる。
0826名前は開発中のものです。2009/03/08(日) 17:42:43ID:GCOCuTiZ
822
透過設定した背景画像を何枚重ねても一緒にスクロールしてしまう。
強制スクロールなら出来るんだけど。
0827名前は開発中のものです。2009/03/08(日) 18:04:49ID:yeeZk4Xb
>>826
ルームプロパティーのbackgroundsタブのhor.speed(横スクロール量)ないしはvert.speed(縦スクロール量)
をバックグランド各々に違う値を設定してやればいい
0828名前は開発中のものです。2009/03/08(日) 18:06:08ID:yExqEGdE
>>826
一緒に動いてしまう、ってことは、ビューを使っているのかな?
もしそれなら一緒に動くのはあたりまえ。
ビューの動きに応じて背景画像位置の補正をしてあげないと。
グローバル変数の
background_x[0..7]
background_y[0..7]
とかをいじるなり、なんなり。
0829名前は開発中のものです。2009/03/08(日) 18:08:45ID:yExqEGdE
おわわw
>>825
補足ありがとうございます。
そして、>>824様と同様、リロードすればヨカタ..(ノ∀`)
0830名前は開発中のものです。2009/03/08(日) 18:36:46ID:eu0flUmZ
>>822-823
ありがとうございます。
ある画像は2フレーム、ある画像は3フレームみたいな風にアニメーションを作りたかったのですが
少し大変そうですね
0831名前は開発中のものです。2009/03/08(日) 18:48:53ID:yeeZk4Xb
>>830
いやいや「設定した秒数のあいだだけ同じコマ」としたい場合は>>825になるだけで
フレーム数で指定するだけならimage_speedの値は単に
  1/(表示したいフレーム数)
になるということです。そんなに難しく考えなくていいよ
0832名前は開発中のものです。2009/03/08(日) 19:14:46ID:yeeZk4Xb
あ いや >>831書いてて少しimage_speedの値と表示される
サブイメージの関係が若干違うのに気がついた。
08338322009/03/08(日) 19:49:01ID:yeeZk4Xb
あ ループ再生だと問題ないのか・・・ごめん
一応思ったことは書いておく。
>>4のヘルプファイルの「Game Maker スクリプト言語 (GML)について」→「グラフィック」→「スプライトと画像」の項
参照願います。
image_speedとは別にimage_indexという変数があって、これは今表示されているサブイメージ番号を保持している
変数であるが、その説明の中に
>値は小数点以下も有効です。表示されるサブイメージは、小数点以下を四捨五入して整数化した値となります
と説明がある。
表示されるサブイメージ番号はimage_index変数で制御されていてステップ毎にimage_speedの値が足しこまれて
いってると考えると1/(フレーム数)だと四捨五入で小数点以下が0.5以上だと次のコマが表示されることになる。
だからループでサブイメージを再生する場合はいいけど1回再生の時は最初と最後のフレームだけ半分になるように
おもう。
なんかひとりよがりなレスしてごめんね
0834名前は開発中のものです。2009/03/08(日) 20:18:01ID:VURSMlHx
>>821はたとえば「1コマ目は4フレーム、2コマ目は1フレーム、3コマ目は5フレーム」
みたいにサブイメージごとに長さをバラバラにしたいんじゃないの?
だとしたらコマ増やして調整するか、配列でも使って自分でimage_indexを
コントロールするしかないね。

>>833
原文では「rounded down」つまり切り捨てと言ってるから、四捨五入ってのは
訳し間違いだと思う。ただ実際には微妙に仕様の不一致があって、
Drawイベントに何も置かないデフォルトの描画だと切り捨てされるけど
draw_spriteなどの関数で描画すると四捨五入されるよ。
0835名前は開発中のものです。2009/03/08(日) 20:30:11ID:eu0flUmZ
すみません私の説明が悪かったようで
まさに>>834さんの言うとおりです。
やはりコマ数そのもので調整するしかないようですね。
0836名前は開発中のものです。2009/03/08(日) 21:02:45ID:Bfb+aHVH
ただ同じ画像を増やすのはお勧めしない。
それより
├─1枚目─┼2枚目┼3┼─4枚目─┤
と、フレーム数を数えながら、フレーム数の範囲で画像を指定してやる方がいいかと。

<例>

<Create>
image_count = 0;

<Step>
image_count += 1;
if (image_count >= 120) image_count -= 120;

if (image_count < 20) image_index = 0; // 0〜19フレーム
else if (image_count < 50) image_index = 1; // 20〜49
else if (image_count < 80) image_index = 2; // 50〜79
else image_index = 3; // 80〜(120)

考え方。
ステップ数を数える。(image_count)
そのステップ数がここからここまでのときはこの画像、ここからここまではこの画像と個別に定めてやる。
0837名前は開発中のものです。2009/03/11(水) 23:13:52ID:Qnpz25or
英語が弱くて全然探せないんだけど公式のサンプルってここだけですかね?
ttp://www.yoyogames.com/make/tutorials
809の人とは別人ですが、アクションのサンプルを探してます。
0838名前は開発中のものです。2009/03/12(木) 00:18:26ID:+06GIEDb
>>837
そこのTutorial:Platform Gamesはサンプルで作成例が段階ごとに見られるようになってるから
同時に2つ起動して片方はそれを表示しながらもう片方で試行錯誤すると覚えが早いよ
これと日本語ヘルプで当面はなんとかなる
0839名前は開発中のものです。2009/03/13(金) 19:15:24ID:+YfOrsIA
レジストしてYOYOからメールでもらったパスが通らない…
・Purchase Reference Number 1-(14桁の番号)
これがパスですよね?うーむ…
0840名前は開発中のものです。2009/03/13(金) 19:19:18ID:B1p0cXJF
それじゃない
08418372009/03/13(金) 23:50:19ID:y2i0vPyS
ちょっと遅くなったけど838さんありがとうございます。
色々むさぼって見ます。
0842名前は開発中のものです。2009/03/14(土) 19:45:29ID:tIr9eZos
キーボードとジョイパッド両対応させるには、コントール用オブジェクトを作って
ステップごとに↓のように適応させていくしかないのでしょうか?

{
botan = joystick_direction(1)
keyboard_key_press(botan)
keyboard_key_release(botan)

if joystick_check_button(1,2) = 1
{
keyboard_key_press(ord('X'))
}
else
{
keyboard_key_release(ord('X'))
}
}
0843名前は開発中のものです。2009/03/14(土) 20:34:54ID:yMyACmE5
わざわざキーシミュレートしなくても、スクリプトなりユーザ定義イベントなりで
両方のイベントで同じコードを呼び出せばよかろう。
(ちなみにジョイスティックのイベントはMouseの中にある)

俺はジョイスティックとキーボード判定するスクリプト作ってStepイベントから呼んでる。
xx = joystick_xpos(1) + keyboard_check(vk_right) - keyboard_check(vk_left);
yy = joystick_ypos(1) + keyboard_check(vk_down) - keyboard_check(vk_up);
button = joystick_check_button(1, 1) || keyboard_check(ord('Z'));
基本こんな感じで。(実際には同時押し対策とか組み込む必要あるけど)
0844名前は開発中のものです。2009/03/15(日) 10:29:34ID:GfuU1PKs
自分は、必要なキーのイベントを全て拾って、
ゲームの入力キーフラグをセットするような専用のオブジェクトを作ってる。

十字キーとジョイパッドの十字入力の両方で上下左右にさせたかったら、
それぞれの入力イベントで上下左右のフラグを立てる。
で、キーに反応するオブジェクトがステップイベントなどで
上下左右フラグを参照すれば、
同じ動作を複数キーに対応することが出来る。
Step Beginイベントで入力フラグの更新処理をしておくのを忘れずに。
0845名前は開発中のものです。2009/03/16(月) 07:41:32ID:HfmZHncc
ありがとうございます
いろいろやり方はあるようですが、ステップイベントから呼び出すのは同じみたいですね
0846名前は開発中のものです。2009/03/17(火) 05:01:13ID:EJdwTMCN
最近暇つぶしに利用しだしたんだけどコード書いてるときのエディタのもっさり感はなんとかならないのかな?
入力見て関数予測とかしてるせいかもしれんが異様に重い、入力文字が飛ぶんだけど
0847名前は開発中のものです。2009/03/17(火) 08:25:59ID:CaGz4CkZ
メモ帳で書いてからコピペしてる。
コード自体が長いときは、貼り付けた後しばらく止まるけど。
0848名前は開発中のものです。2009/03/17(火) 20:45:46ID:YSPxjodU
>>846
File > Preferences > Scripts and Code >
Show Help on function and variable names
↑このチェックを外して補完を切れば多少は変わるかも

でもまぁ他のコード編集環境を使った方が快適かもしれない
たしか候補が分かるだけで入力補完まではしてくれないんだよね
0849名前は開発中のものです。2009/03/17(火) 21:02:29ID:EJdwTMCN
最初は他のエディタで書いて貼り付けてたんだけどデバッグの微調整の書き換えがつらかったもんで(´・ω・`)
んで、>>848の通りに補完もどきの設定OFFにしたらスイスイになりました
>>847-848の方ありがd
0850名前は開発中のものです。2009/03/17(火) 23:06:13ID:8EeLcLHS
ついでにPreferencesで好きなエディタを登録して使うこともできる。
まあ、反映するにはセーブしてエディタを閉じないといけないから
貼り付けとどっちが楽かは微妙だけど。

>848 補完はCtrl+Pでできるよ。(ヘルプのAdvanced Use>Scripts参照)
0851名前は開発中のものです。2009/03/21(土) 00:05:09ID:FvUF+tit
アイコンで設定する処理と同じ事をGMLでどうやって書くかを調べることはできませんか?
0852名前は開発中のものです。2009/03/21(土) 00:27:06ID:cQFO1gC4
つ 付属のヘルプ

・・・というか、ヘルプと格闘しながら、
アクションをGMLで自分で書く、というのが一番のGMLの勉強になると思うんだが。
遠回りかもしれないが、がんばってみてはどうか。
0853名前は開発中のものです。2009/03/21(土) 00:27:10ID:kRQxhdof
1) 全てはここにある
Help
>The Game Maker Language (GML)

2) 一部が日本語でここにある
ttp://gamemaker.main.jp/modules/articles/index.php?cat_id=3


最初から1を見るもよし。
2を見て、見つからなければ1を見るのもよし。
0854名前は開発中のものです。2009/03/21(土) 00:39:57ID:kRQxhdof
……ってか、使ってるアクションアイコンがExecute a piece of codeしかないw
0855名前は開発中のものです。2009/03/21(土) 00:54:51ID:FvUF+tit
いやあヘルプは見てるんだけどさ。
例えばDestroy Instanseのアイコンでが何をしてるか調べようとしても、Destroyで調べてもキーワードでも検索でもそれらしいのが出てこないからインスタンスで調べたら
instance_destroy()
現在のインスタンスを破棄します。
っていうそれらしいのを見つけたけど現在のインスタンスって何のことよ?Destroy InstanseアイコンのSelfの事か?
じゃあDestroy Instanseアイコンのother,objectってどのメソッドを使ってるんだよ。ってなるんだよね。

あとアイコンのDraw_textだと文字が表示されるけど、draw_text(x,y,string)使っても何も表示されねーじゃん。これって別物なのか?
って思っても調べようがないんだよね。
何かいい方法はないもんですかね。
0856名前は開発中のものです。2009/03/21(土) 01:00:44ID:kRQxhdof
それは単に使い方が正しくないだけ。
例えばobjというオブジェクトを破棄したい場合、
with (obj)
{
  instance_destroy();
}
とする。

draw_textの場合、
1) ちゃんとDrawイベントで実行しているか
2) VisibleはONになっているか
3) そもそもそのオブジェクトはROOM内にあるか
この辺をチェックしとけ。
0857名前は開発中のものです。2009/03/21(土) 01:14:45ID:kRQxhdof
補足
instance_destroy()はご想像通り、Destroy InstanceのSelfと同じことをする。
なら、Self以外のものを破棄したい場合にはどうしたらいいか。

GMLではここでwith文を使う。
with文は、指定した全てのインスタンスで実行するという便利なもの。
with (obj)
{
  instance_destroy();
}
ってのは、

オブジェクトがobjである全てのインスタンスにおいて、
{
  Destroy InstanceのSelfを実行する
}
と言った感じになる。

>>494, >>497辺りもwith文について書いてある。参考までに。
0858名前は開発中のものです。2009/03/21(土) 01:29:29ID:kRQxhdof
ああ、draw_textについて忘れていたことが1つ。
文字列は「"」で括る必要がある。
draw_text (x, y, "moji");
とすると、mojiと表示される。

また、
string = "moji";
draw_text (x, y, string);
としても、mojiと表示される。

Help
>The Game Maker Language (GML)
>GML Language Overview
>Expressions
0859名前は開発中のものです。2009/03/21(土) 01:38:03ID:DpJJfV3I
>>851
ここから自分のバージョンに合うの選ぶよろし
D&d Actions And Their Code Equivalents
ttp://gmc.yoyogames.com/index.php?showtopic=334704
0860名前は開発中のものです。2009/03/21(土) 02:19:43ID:FvUF+tit
>>856
色々ありがとう。助かります。
draw_textに関してはstepで呼び出してたのが原因でした。
あとdraw_textで変数+文字列を表示するにはどうすればいいのでしょうか。
858の使い方は確認したのですが、string+"moji"などとやっても+まで含めで変数名と解釈されているのかエラーになってしまいます。

>>859
ありがとう。こういうのが欲しかった。
0861名前は開発中のものです。2009/03/21(土) 08:28:23ID:kRQxhdof
>>860
自分の環境では
string = "moji1";
draw_text (x, y, string+" moji2");
を実行したところ、「moji1 moji2」と正常に表示された。

もしかして、数字と文字列を同時に表示しようとしたのではないだろうか。
もしそうなら、数字の方はstring(num)を使って数字を文字列に変換する必要がある。
違うのなら、エラーに書かれているメッセージと実行したコードを書いてくれ。
0862名前は開発中のものです。2009/03/21(土) 08:37:57ID:kRQxhdof
……今自分で書いてて思った。
正常に表示はされたけど、この書き方はよくなかったっぽい。

多分原因は、string = "moji";のstringをGMがstring()と解釈したからだと思う。
というわけで、変数の名前にstring以外の名前をつける。

str = "moji1";
draw_text (x, y, str+" moji2");
0863名前は開発中のものです。2009/03/21(土) 13:23:00ID:zhdjiqTz
GM7標準でマルチバイト文字描画と綺麗な坂道コリジョン判定ができれば最強なんだがなぁ

坂の上にいるときは矩形判定ではなく、GMLでインスタンスの中心の足元の点と坂で判定して
上り下りともにスムースに移動できるようにしなければならない
もちろん普通のsolidな壁とも通常どおり判定させる

これできた人いる?
てか過去スレでも話題になってた気がするが、GMでできんのか坂
0864名前は開発中のものです。2009/03/21(土) 23:32:50ID:FvUF+tit
>>860
この通りやったら出来ました。
何処かでミスをしていたようです。重ね重ねありがとうございます。
0865名前は開発中のものです。2009/03/22(日) 02:31:40ID:CIxwNgdY
>>863
坂ねぇ……。

1) 高い点低い点の座標を記録する。座標から
   rate = abs (high_x - low_x)/high_y
  として、坂の傾きを求める。
2) 目標のオブジェクトが坂(全体を含んだ長方形)にぶつかったとき、
   坂のx座標とオブジェクトのx座標から、x軸において坂のどの辺りにいるかを求める。
   1で求めた傾きから、オブジェクトがいる場所の坂の高さを求める。
   オブジェクトyをその坂の高さに乗せてやる。

坂ってのはxが増減するにつれて高さも増減している。
(坂の縦方向に注目する。上り坂の始点にいるときは高さ0、終点に近づくにつれて高さが増える)
で、オブジェクトが坂にいるとき(坂にめりこんでるときも)、そのオブジェクトのx座標においての坂の高さを求める。
そして、求めた坂の高さを使って、坂に乗るようにオブジェクトのyを定める、といった感じ。

と思いついただけ書いてみた。
0866名前は開発中のものです。2009/03/22(日) 02:37:02ID:CIxwNgdY
式間違えた。
rate = (high_x - low_x)/(low_y - high_y);
多分これで合ってる……かな?
0867名前は開発中のものです。2009/03/22(日) 02:54:47ID:CIxwNgdY
長方形は要らんかった。書き直す。

1) 高い点低い点の座標を記録する。座標から
   rate = (high_x - low_x)/(low_y - high_y);
  として、坂の傾きを求める。
2) 目標のオブジェクトが坂にぶつかったとき、
   坂のx座標とオブジェクトのx座標から、x軸において坂のどの辺りにいるかを求める。
   1で求めた傾きから、オブジェクトがいる場所の坂の高さを求める。
   オブジェクトyをその坂の高さに乗せてやる。

坂ってのはxが増減するにつれて高さも増減している。
(坂の縦方向に注目する。上り坂の始点にいるときは高さ0、終点に近づくにつれて高さが増える)
で、オブジェクトが坂にいるとき(坂にめりこんでるときも)、そのオブジェクトのx座標においての坂の高さを求める。
そして、求めた坂の高さを使って、坂に乗るようにオブジェクトのyを定める、といった感じ。
0868名前は開発中のものです。2009/03/22(日) 09:35:33ID:gflCZPhk
>>867
傾きは(high_y-low_y)/(high_x-low_x)だった気がする…

てかcollision_lineて使えないかな?
0869名前は開発中のものです。2009/03/22(日) 12:08:53ID:dGELDjyL
坂ってplatformのチュートリアルになかったっけ?
たとえば坂の傾きが最大で1/2だとしたら、右に移動する場合
・まず右に4ドット、上に2ドット動かす
・そこから地面に接触するまで1ドットずつ下げてく(最大で4ドット分まで)
みたいな原理で実現してたと思う。
(実際のコードではループしながらplace_freeで移動先を探すと思うけど)
0870名前は開発中のものです。2009/03/22(日) 20:01:04ID:mIv6hu6A
質問なんですが
ルームにobj_meのインスタンスが1つあって、instance_create(x,y ,obj_menu)を実行すると、
x,yの場所にobj_meのインスタンスが移動してobj_menuのインスタンスが生成されないという現象がおきます。

obj_meとobj_menuは見た目はかなり違うので間違えようがなく、試しにobj_meのスプライトを変えるとinstance_create(x,y ,obj_menu)実行後にx,yに出来たものも変更したスプライトのobj_meでした。
ルーム作成時にあらかじめobj_menuを配置しておくとobj_menuはちゃんとあり、やはりスプライトが違うので見た目で混同することはありません。

試しにinstance_create(x,y ,obj_wall)でobj_menuをobj_wallに変更してみたものを実行すると、x,yの位置にobj_wallのインスタンスが生成されobj_meの位置に変化はありませんでした。

ゲームメーカーの再起動もしましたが解決せず意味が分かりません。
考えられる原因は何でしょうか。
0871名前は開発中のものです。2009/03/22(日) 20:24:23ID:V047b3QM
そんなバグにあったことがないんだが、周りにobj_menuをいじってるオブジェクトがあるか、
obj_menu自体が生成後の何かやらかしてるくらいしか考え付かない。
obj_meについては必死に探したと思うし。
とにかくもっと情報がないとわかんないね。バグだとしたらこのスレの偉い人が答えてくれるさ
0872名前は開発中のものです。2009/03/22(日) 20:50:38ID:fNzKc34k
まずは、バグが再現する状態にして、obj_menuのインスタンス数を確認してみては。
デバッグモードで起動して、デバッグウィンドウのExpressionで
instance_number(obj_menu)
とやって、数を確認してみよう。
見えないから存在してないと思ってても実は生成されていたりだとかするかもしれないし。
本当に無かったら、何かほかのオブジェクトが消しているのかもしれないし、obj_menuが自滅しているのかもしれない。
あと、散々既出だが、変数名とリソース名が被ってないかどうかも確認してみてね。
0873名前は開発中のものです。2009/03/22(日) 21:44:31ID:mIv6hu6A
アドバイスありがとうございます。
instance_number(obj_menu)で数を調べてみたところ、数が0のままでした。
obj_menuのクリエイト時の処理を調べたところ、obj_menuのxとyをobj_meのxとyに入れるという処理を書いてたので、obj_meが移動する原因はこれでした(自分で書いてて忘れてました)
ですので、処理がobj_menuが生成されobj_meの位置が変更された後にどこかでobj_menuを消している処理があるんだと思いソースを調べたのですが、該当する箇所がなかったのでobj_menuを生成するソース意外をコメントアウトしたところobj_menuが生成後消えずに表示されました。
具体的な問題の箇所はこれから探して見ます。ありがとうございました。
0874名前は開発中のものです。2009/03/29(日) 13:36:12ID:oNLdyzVJ
プレイヤーが近づいてきたら動き出す敵を作りたいのですが
その際↓のような式ではダメなのでしょうか
どうにも敵が反応してくれないのですが

if collision_rectangle(x-100,y-100,x+100,y+100,player,false,false) = true
0875名前は開発中のものです。2009/03/29(日) 14:09:45ID:RQOQ+L9B
よくある間違いだがcollision系の関数が返すのはtrue/falseじゃなくて
インタンスIDか負の値。(ヘルプのページの先頭で説明してある)
あと、その用途なら if (distance_to_object(player) < 100) で済む。
0876名前は開発中のものです。2009/03/29(日) 15:23:34ID:oNLdyzVJ
>>875
すみません、完全にヘルプを見落としてました
ありがとうございます
0877名前は開発中のものです。2009/03/29(日) 21:40:48ID:CdUYnV/Q
constみたいな定数を作りたい場合ってどうしますかね。
constがなくても変数を宣言時意外に値を変えなきゃいいんでしょうが、
room生成時にteisuu=1とかってすると、roomが変わったときに使えないだろうしglobalを多用はしたくないし。
0878名前は開発中のものです。2009/03/29(日) 22:15:37ID:iv9jPI98
>>877
コードでかけないから面倒なんだけど、
Global Game Settings の constants で「定数」の設定ができるよ。
一応、内蔵エディタで定数として認識されるようで、
色が変わって見分けが付くようにもなります。
0879名前は開発中のものです。2009/03/29(日) 22:36:14ID:CdUYnV/Q
>>878
ありがとう。これで何かと便利に作業できるわ。
0880名前は開発中のものです。2009/03/31(火) 00:58:37ID:9inYrVEs
スプライトにサブイメージを追加して、任意のタイミングでサブイメージを表示させることって出来ないんですかね。
サブイメージを追加すると表示したときに勝手に画像が切り替わっちゃうんで困ってます。
スプライトのspeedを0にしても、赤くなって適用されてないみたいですし。
0881名前は開発中のものです。2009/03/31(火) 01:53:49ID:vhB+70FJ
スプライトエディタのところのはな、あれはプレビューするだけで実際のスピードには関係ないんじゃ。

GM6以上だったら「Set the sprite」アクションのspeedの欄に0を入れる。
GM5だったら「Set the variable」使ってimage_speedを0にするか
image_singleにサブイメージの値を設定すればアニメーションが止まる。
0882名前は開発中のものです。2009/03/31(火) 19:50:31ID:jf9BJ086
初めまして。
ゲームメーカーは好きな絵をゲームに使えるんですか?
マタ自分で絵を作るには何か必要ですか?
作るに当たり嫉妬いたほうがいいこと歯なんですか?プログラミングとかは必要ですか?
■ このスレッドは過去ログ倉庫に格納されています