- 1 名前:名前は開発中のものです。 mailto:sage [2008/05/11(日) 01:41:47 ID: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【マンセー】 pc8.2ch.net/test/read.cgi/gamedev/1087068523/
- 487 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 13:37:01 ID:rNzKqzWh]
- >>486
親クラスのアクションを丸ごと使いまわす場合でも明示的なオーバーライドが必要だったはず GMの場合はCallInheritedEventとかそんな名前のアクション(正式名称はヘルプで確認) 何も意識せずオブジェクト指向っぽくなるのがGMLの巧い所だけど 徹底してOOPL的な書き方しようとすると逆に分かりにくかったりしますね
- 488 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 17:05:23 ID:23J9ij0M]
- ジャンプするボタン(ここではZキーとします)を押している時間の長さでジャンプする高さを変えたいのですがどうすれば良いのでしょう?
Zキーを押している間、変数「jmp」に1ずつ足していき・・・といった感じでやってみたのですが ジャンプする条件に地面の上にいる事が入っていて、ジャンプはZキーを押した瞬間に行われるので意味がありません。
- 489 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 21:07:21 ID:bzoft8au]
- >>488
押す(pressKeyDown)とパワーを貯めて(経過時間で数値を増加) 離す(pressKeyUp)とジャンプ処理 でどうですか?
- 490 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 22:28:28 ID:8vGbtbAk]
-
スープーメイリオブロ(英語は発音大事)みたいにしたいなら、 単純に押してる間だけスプライトを移動させていけばいいだろ
- 491 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 22:38:55 ID:Ib5prIDh]
- >>486
親のイベントにあって子のイベントに無い物は、自動で子に引き継がれる。 子と同じイベントにある親のアクションを引き継がせる場合、 その起こしたいイベントの中でCall Parent Eventアクション(GML: event_inherited())を使う。 というわけで、>>486の例だと子のクリエイトのbに2を代入した前でも後でもいいから 親のイベントを呼んでやると、子もa=1を持つようになる。 >>488 ボタンを押した時にジャンプの高さを全て決めるのではなく、 ボタンを押してジャンプさせ、ボタンを離した時に、押してからの長さによって「ジャンプの上昇を止めて落下させる」という考え方がどっかで使われていたと思う。
- 492 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 22:56:55 ID:23J9ij0M]
- >>491
ありがとうございます。 その方法は考えてませんでした。物凄く助かります。
- 493 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 23:26:08 ID:x//721CN]
- 範囲内ゼンブのオブジェクトに影響を及ぼすものはどうつくればいいのでしょう?
for(i=0;i<120;i+=1) {col_body =collision_circle(self.x,self.y-120,i,all,true,true)} with(col_body) とすればうまいこと行くかなとおもったのですが一番最初に範囲に入ってきた物が効果を重ねて受けてしまうようでうまくいきません。 配列を使えばいいというのはなんとなくわかるんですがfor(i=0;i<instance_count;i+=1) col_body[i] =collision_circle(self.x,self.y-120,120,all,true,true) with(col_body[i]) とするとUnknown variable col_body or array index out of bounds が出てきます……。根本的に書き方が違うのでしょうか?
- 494 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 23:45:40 ID:GUH2YmoS]
- 考え方を逆にして、全部のオブジェクトに対して「自分が範囲内にいるか」調べさせてみよう。
with (all) { // すべてのインスタンスをループ if (collision_circle(other.x, other.y-120, 120, self, true, true) { // もし範囲内にいたら // 何かする } } with文の中ではselfとotherの役割が入れ替わることに注意。
- 495 名前:名前は開発中のものです。 mailto:sage [2008/11/28(金) 23:51:13 ID:GUH2YmoS]
- ってnotmeをtrueにしちゃダメだな。ついでにselfよりidを使った方が安全かもしれない。
ということで2行目は if (collision_circle(other.x, other.y-120, 120, id, true, false)) { という感じで。 よく考えたら distance_to_point(other.x, other.y-120)<120 とかでも済むわけだけど。
- 496 名前:名前は開発中のものです。 mailto:sage [2008/11/29(土) 00:21:19 ID:IHR7UfyX]
- >>495
うっほおおお!!!!! ありがとうございます!!かれこれ一週間ぐらい悩んでたのでスッキリしました! こんな簡単にいくものだとは……。悔しいですね……;ω;
- 497 名前:名前は開発中のものです。 mailto:sage [2008/11/29(土) 00:23:52 ID:cPQXEOUA]
- >>493
GMのヘルプ >The Game Maker Language (GML) >GML Language Overview >With constructions の一番下にある例がまさにそれだな。 with (all) { if (distance_to_object(other) < 50) instance_destroy(); }
- 498 名前:名前は開発中のものです。 mailto:sage [2008/11/29(土) 01:08:40 ID:IHR7UfyX]
- 497さんもありがとうございます。いやあ新しい扉が開いたって感じです!
- 499 名前:名前は開発中のものです。 [2008/11/30(日) 11:51:36 ID:oUNmDB7a]
- 配列の例えばparts[i]というのがあるとして、
このiの値を取るにはどうしたらよいでしょうか?
- 500 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 17:50:24 ID:8ZPTNF4x]
- >>499
例)partsという配列のi番目の要素を得る方法 parts[4] = 16; parts[5] = 25; i = 4; hoge = parts[5]; // この時点で変数hogeには25という値が代入される hoge = parts[i]; // この時点で変数hogeには16という値が代入される i = 5; hoge = parts[i]; // この時点で変数hogeには25という値が代入される 「iの値を取る」の意味が分からん 上の例で言うと、どういうケースでどの値を取得したいんだろう 配列の基本的な使い方が分からないのか それとも要素からインデックス値を取得する方法かな
- 501 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 20:57:30 ID:ICPzjhiz]
- i の値を取得するという意味なら
単に i を使えばいいだけ。 i に代入されれば、i が取得したい値そのものなんだから 何も難しいことない
- 502 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 21:02:36 ID:ICPzjhiz]
- i さんに、「あなたはどの値を持っていますか?」なんて聞くようなプログラムなど要るはずがない。
i さんは、関数の中に入れば自分の持ってる値を提出するしかないからだ。 例えば i さんが 5 の値を持っていて printf(%d, i); のような仕事(関数)に従事したとする なら、printfによって 5 という値が勝手に取り出されるだけ 特に今何を持っているのかを教えてもらう必要はない。
- 503 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 21:38:09 ID:q/jrPCNZ]
- この場合、[i]というのは hoge という配列変数の何番目かという事を示している。
i=5だとするならば、hogeという配列の6番目という事をしめしている。 この書き方がされるまえには必ず、i には何らかの数値が代入されている。 よって、上記の氏たちのような返答でしか答えることができない。 というかjavaでもVBでもCでも何でいいので、プログラムのサイト調べておいで。
- 504 名前:499 [2008/11/30(日) 23:24:15 ID:oUNmDB7a]
- えーと…説明不足でした。スイマセン
まずボスを作っていてまず本体となるobj_baseと両手足となるobj_partsがあります。 そしてもう一つobj_controllerがあります。 コントローラーでinst=instance_create(x,y,obj_base)とします、そしてinst.…=…と各変数を定義していきます。 そしてfor(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。 パーツは両手足4つありそれぞれスプライトや描画位置が違うのでパーツのステップで もしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決めるためにiの値を取りたいのです 長々と失礼しました。
- 505 名前:名前は開発中のものです。 mailto:sage [2008/11/30(日) 23:54:17 ID:UwyYLNW7]
- やはり悩む必要ねえと思うが
- 506 名前:名前は開発中のものです。 [2008/12/01(月) 00:08:59 ID:RRq5dBO9]
- for(i=0;i<4;i+=1)inst.parts[i]=obj_parts
の意味が分からん。どういうつもりでそれを書いているのか。 それだと、parts[0]〜parts[3] まで、obj_parts が代入されるよ。 4つのオブジェクトを配列で管理しようとしているのかもしれないが、 結局右手をあらわす番号、左手をあらわす番号などは自分で決めるもの。 配列を使うのは、ループ使って処理しやすくするためなのだろう? なら、こうなるはずだ。 for(i=0;i<4;i+=1) { if (inst.parts[i] == 右手パーツ) { //右手パーツの処理 } else if (inst.parts[i] == 左手パーツ) { //左手パーツの処理 } ... } if 〜 else if 〜 の文は冗長でよろしくないが、switch文を使うとスマートに書ける。
- 507 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 00:21:52 ID:LiWv5v7d]
- > for(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。
これだとすべてインスタンスじゃなくてオブジェクト(obj_parts)への参照になってしまって 区別がつかないと思うけど。inst作った時と同じやり方で for(i=0;i<4;i+=1) inst.parts[i] = instance_create(x, y, obj_parts) とかすればいいと思うがどうか。 で、obj_parts自身のイベントの中で、自分が何番目のパーツなのか知りたいってことだよね? 上のやり方で各インスタンスを作った後でiを教えてやればいい。 for(i=0;i<4;i+=1) { inst.parts[i] = instance_create(x, y, obj_parts); inst.parts[i].number = i; } 番号に頼らずに、右手・左手・右足・左足それぞれ別オブジェクトにしてしまう手もあるけどね。 上で出てきたParentの考え方を使えばすっきりまとまるはず。
- 508 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 00:25:03 ID:QQgG8mIq]
- for(i=0;i<4;i+=1)inst.parts[i]=obj_parts
4まで数えるので、 inst_parts[0] = obj_parts inst_parts[1] = obj_parts inst_parts[2] = obj_parts inst_parts[3] = obj_parts inst_parts[4] = obj_parts obj_partsが右手だったら、5要素全部に右手を代入していることになっている
- 509 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 02:36:53 ID:dWziD4by]
- でも結局パーツごとに処理変数(スプライトとか位置とか)が違うんだったら
辺に端折らずに、それぞれ別個の変数で管理するほうが楽なんじゃない? 基本オブジェクト(胴体)の位置からそれぞれの位置を割り出して HPなどの共有する値は共有するようにglobalすれば良いだろうし。
- 510 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 04:46:27 ID:Ekx4hYib]
- もしかして、こうしたいんじゃなかろうか。
for(i=0;i<4;i+=1) { inst.parts[i] = instance_create(x, y, obj_parts); inst.parts[i].number = i; } こうすることで、 「パーツのステップでもしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決める」 という動作ができる。 このとき、参照するのはiじゃなくnumberな。
- 511 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 05:08:55 ID:Ekx4hYib]
- obj_partsが作られたとき、inst.parts[i]にインスタンスIDが代入される。
パーツのステップで、obj_partsが作られたときに代入したinst.parts[i]のiの値を使って位置を決めたい。 (と解釈した) ……ってことは、それぞれのパーツから見て、iって変わらないよね? つまり、右手はいつも右手ってこと。 だったら、作ったときにそのiの値をそのパーツに持たせればいい。 というわけで、パーツが作られたとき、そのときのiの値をnumberという名前の変数としてパーツに持たせてみたのが>>510。 これで、パーツのステップでnumberを使って位置を決めることで、「iを使って位置を決める」というのと同じ動作ができる。 ……ところで、base.parts[i]て何。inst.parts[i]ならまだ分かるが。
- 512 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 11:26:32 ID:Ekx4hYib]
- ってあるぇ? 今よく見てみたら>>507にあるじゃん。
しかも、よく読んでなかったのにnumberって変数の名前まで一致(意図してません)。 もう少し読もうな、俺。('A`)
- 513 名前:499 [2008/12/01(月) 13:30:41 ID:WFVB4NOy]
- なるほど…
ではやっぱり配列の[]内の値をとるシンプルな関数などはないんですね… やっぱり509氏の言うようにそれぞれ個別の変数を持たせた方がよさそうですね 皆さんいろいろな意見ありがとうございました
- 514 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 21:04:50 ID:LiWv5v7d]
- >>513
やりたいことはわかったけど、「配列の[]内の値をとる」なんて自分用語は やっぱり誰にも通じないぞ。「配列の要素から添字を調べる」とか もっと簡単に「検索する」とか言うんだ。 配列の検索自体は難しいことじゃない(ループして調べるだけ)。 そういうスクリプトは簡単に書けるし、ds_listなら関数一発でできる。 ただ、君のやりたいこと実現するのに検索なんて必要ない、 もっと簡単に済む方法がいくらでもあるってだけのこと。
- 515 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 21:39:31 ID:hPo6+q3F]
- 指定したサウンドでなく「今鳴っているサウンド」を停止する方法はありますか?
- 516 名前:503 mailto:sage [2008/12/01(月) 22:44:50 ID:dWziD4by]
- >>513
だーかーらー i を使ってるのはfor文の中でしょ? でfor文は繰り返す処理する処理で{}の中身を通して処理し、 最後に i++ で i に「+1」するんだ。 for(i=0;i<4;i+=1){中身} は、i の値が4になるまで繰り返す文 なんだ。 ここまではOK? なので、 i の値はその処理内の実行回数の値である。 i は、そのときの値である。 i にどの数値が代入されてるか調べるには、単に i を見ればいい。 ということだから、プログラムの基本中の基本であり、どっかの解説サイトを見てこいと言ったんだ!!
- 517 名前:名前は開発中のものです。 mailto:sage [2008/12/01(月) 23:04:58 ID:VAhzR6SY]
- >>516
おちつけwfor文がどうとかではなくて 定数定義とか列挙子みたいなことをやりたいんでしょ。たぶん GMLで使えないけど
- 518 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 02:15:33 ID:cOR4nM2X]
- i の値を取得するのは非常に簡単だから
Hello world レベルだから 実際、Hello world で使ってる関数の中身を数文字変えるだけ。 だから、そんなことで悩む事自体がおかしいのだ。 おかしいので、「そんなこと悩むわけがない、別のことを言いたいのではないか」 と思うし、実際文そのままの意味で取れば「そんなもん、幼稚園児でも出来るぞ」になるわけだ 言い回しがおかしいと答えも出ない
- 519 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 02:21:18 ID:cOR4nM2X]
-
なんつうのかな 箱にオモチャを入れました 箱の中身を知る方法ないですか と聞かれたようなものだ。 開けて見りゃいいじゃねえかよ 箱(変数) を関数に渡す、関数で使うようにプログラムすれば 関数は勝手に箱開けて中身を使う。 それで知ることができる 非常に単純なことだから、悩むなんて誰も思わない。 Cだったら、printfなどの、数字や文字を画面に表示する関数で使って、「見る」だけでいいからだ。
- 520 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 10:40:55 ID:xezqMnLO]
- 流されかかってる>>515を拾ってみる。
とりあえず思いついた方法2つ。どちらもGMを使う。 1)全音停止 sound_stop_all() ↑を使えば全部止めることが出来る。 全部止めれば、「今鳴っているサウンド」を停止することができる。 2)確認→停止 sound_isplaying(index) ↑を使って、再生されているかどうかの確認が出来る。 これを使って戻り値がtrueならsound_stop(index)で止める、という方法。 チェックしたいサウンド分だけループさせることで、「今鳴っているサウンド」をピンポイントで停止させる。
- 521 名前:520 mailto:sage [2008/12/02(火) 11:00:03 ID:xezqMnLO]
- >>520
誤)GM 正)GML orz
- 522 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 14:41:52 ID:xRaNmqQG]
- GMのヤバいところは、ほっておくとサウンドデバイスが増え続けること
ffdshowなどの、1デバイス1デコーダーのデコーダーで見るとわかるが、 音楽鳴るたびにデコーダが増える。 20曲鳴らせば20個のデコーダが用意され、デバイスを閉じても消えないことすらある。
- 523 名前:名前は開発中のものです。 [2008/12/02(火) 17:06:18 ID:We5UmkXJ]
- ゼルダみたいなゲーム作りたいんだけど
お金表示やお金を作ることってできるんですか?(ゼルダで言うルピーみたいな
- 524 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 17:25:34 ID:Ujq+dWEg]
- すごく初歩だと思うが質問させてください。
グラディウスみたいなのを想像してもらえればわかりやすいと思うけど、 自機の移動がうまくいかない。 上下左右それぞれ押したときにその方向に一定の速度を与え、 離したときにその方向の速度を0にしているんだが、 たまに引っかかったように動かなくなることがある。 急に逆方向のボタン(上と下、右と左)を押すとなることが多い。 ちなみに座標を移動させる場合も同じように引っかかる。 どうやったらもっとスムーズに動くんだろう?
- 525 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 20:58:31 ID:taOqiXBl]
- >>523
変数使えば簡単にできるけど 初心者だったらscoreを流用するのがお手軽でおすすめ。 >>524 GMについてくるサンプルか公式のチュートリアルに 1945っていうシューティングがあるから、見て真似してみれば? キーを下げた時(key press)と上げた時(key release)で制御してると 複数のキーの上げと下げが干渉してそんな不具合が起きやすい。 単に押している間(keyboard)だけ座標を増減させるようにすればすっきりする。
- 526 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 20:59:02 ID:UFWpQr+3]
- >>523
できます。 お金とか敵とかリンクとかはすべて「オブジェクト」という個体表示で考えます。 敵に当たるとダメージの部分を、 お金に触れると(お金が画面から消え)お金単位が増える。 と置き換えます。 どの言語を使っても考え方は同じになります。
- 527 名前:名前は開発中のものです。 [2008/12/02(火) 21:45:08 ID:We5UmkXJ]
- >>525>>526
ありがとうございます。スコア使ってみますね
- 528 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 22:23:17 ID:uu7fmr/m]
- なんか条件式がおかしいと思ったら
xprevious と ypreviousは >>377の >・(now all instances are set to their new positions) これ以降じゃないと値が保障されないのか。ぬかったわ
- 529 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 22:42:03 ID:ATORRfCZ]
- シミュレーションゲームの練習をしているのですが
範囲の求め方が分かりません。 自分のやり方だと先ず、プレイヤーを選択すると 移動範囲が出るようにはしたのですが、 この出し方がinstance_create(x,y,object) で出しているのですがこの方法だと どうすれば障害物の処理が出来るのかが分かりません; もう一回一から作ったほうがいいのでしょうか・・・ 説明が下手で申し訳ありません;
- 530 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 23:10:09 ID:uu7fmr/m]
- 自分もシュミレーション作ってるよ
ゲームにもよるけど障害物の処理ってのは避けて通るとかそういうことかな 具体的な状況がよく分からないかも どこまで移動できるかだけでいいなら プレイヤーに移動力のような値を持たせて 平地なら-1 砂地なら-2とかやって移動力がゼロ以上なら指定した場所までいけるとかできるけど
- 531 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 23:15:43 ID:ATORRfCZ]
- >>530
仰るとおりです。 障害物をよけて通れるようにしたいのです。 ネットとかで調べるとそのようなやり方を良く見かけるのですが、 如何せんどう組み込めばいいのか分からず; もう少しヒントを頂けると嬉しいです。 厚かましくてすみません;
- 532 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 23:21:00 ID:uu7fmr/m]
- どういうゲームなのか教えて欲しいかも
たとえばFEやタクティクスのようにターン制なのか ポピュラスのようにリアルタイムな感じなのか マップの構造によっても変わってくるし ていうかシュミレーション・・・これは恥ずかしい誤字だった///
- 533 名前:名前は開発中のものです。 mailto:sage [2008/12/02(火) 23:24:40 ID:ATORRfCZ]
- FE目指してます。
もう少し粘ってみます。
- 534 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 00:07:38 ID:5ByG7lYo]
- 例えば、開始時の移動力が10あるとして
5 1 6 4☆2 7 (星の位置がキャラクターだとして) 3 ☆を起点として1、2、3、4を調べ、座標とかかるコストを配列に保存する。 1に起点を移し周囲4マスを調べ、座標とそれまでにかかったコストを保存する。 すでに調べた座標は基本的に記録しないが 1→6 と 2→6のような経路が被る場合、移動コストが軽いほうを保存する。 移動コストが10より小さいものがなくなるまでこの作業を繰り返して 終わったら配列に保存された座標のところを移動範囲として表示すればいいような気がする FEだったらこんな感じかな
- 535 名前:名前は開発中のものです。 mailto:sage [2008/12/03(水) 02:03:59 ID:r0U2/w9u]
-
通れないマップチップは、「通れまへんフラグ」を設定しておく 自分と敵との最短経路を弾き出し、その間に「通れまへん」があれば分岐
- 536 名前:524 mailto:sage [2008/12/03(水) 17:54:24 ID:XBsb6U76]
- >>525
ありがとう、助かりました。
- 537 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 19:42:54 ID:COm9ODRQ]
- FEならSRC使うべきだろ常識的に考えて…
- 538 名前:名前は開発中のものです。 [2008/12/04(木) 19:51:06 ID:wis04ySw]
- 質問多くてすみません・・・
ゼルダでアイテム画面とかに移動する。というのはRPGのフィールドの位置保存 を使えばできると思ったんだけど、装備した元の位置の主人公のオブジェクト変更 ってできるんですか?
- 539 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 20:23:54 ID:BFQV7gOy]
- >>538
「元の位置の」ってのが何指してるのかどうしたいのかわからないけど 主人公の表示アイテムを変える方法としては、 1)アイテムに固有IDを割り振っておく 2)装備してるアイテムIDの画像を表示する で、いけるんじゃないかな。 もともと表示するのはIDのアイテムで、アイテムが変わったら画像もチェンジする アイテムごとに画像を用意しなくちゃいけないのは、そもそも当然のことだしね。
- 540 名前:名前は開発中のものです。 [2008/12/04(木) 20:32:17 ID:hYQrGj00]
- はじめまして。
GM初級者です。 早速質問ですが、 複数のインスタンスから 一番別のオブジェクトに近いインスタンスを取得したいのですが、 どうすればいいでしょうか。
- 541 名前:名前は開発中のものです。 mailto:sage [2008/12/04(木) 21:33:34 ID:BvmV+/Fo]
- >>540
質問がややこしくて読み間違えてるかもしれんが 恐らくinstance_nearest(x,y,obj)を探してるんだと思う 例えば、objMikata、objTeki、の2種類のオブジェクトがあるとして objMikataのインスタンスが9個ある(insMikata1〜insMikata9) 同じくobjTekiのインスタンスが9個ある(insTeki1〜insTeki9) この時、3番目の味方から最も近い敵は nearestTeki = instance_nearest(insMikata3.x, insMikata3.y, objTeki); こんな感じで求められる 詳しい説明や似たような関数はヘルプ参照
- 542 名前:540 [2008/12/04(木) 22:08:30 ID:hYQrGj00]
- >>541
それです! ありがとうございました。
- 543 名前:名前は開発中のものです。 [2008/12/05(金) 17:53:46 ID:X+fPv7FO]
- >>539
助かりました。 ありがとうございます!
- 544 名前:名前は開発中のものです。 [2008/12/06(土) 17:02:27 ID:DxqncoX6]
- また問題が出ました。
何度も何度もすみません。 敵が全滅したり 味方が全滅したりすると 変数の参照先がなくなり エラーになります。 解決策はないでしょうか?
- 545 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 17:49:42 ID:6jDgYk9y]
- 参照するまえに、存在するか確認する。
存在するなら参照する。しなかったら何もしなくていい。 instance_exists(obj)を使えば存在するかどうかが、 instance_number(obj)を使えば個数がわかる。
- 546 名前:544 mailto:sage [2008/12/06(土) 18:50:41 ID:DxqncoX6]
- ありがとうございます。
- 547 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 19:09:11 ID:uswEIGEy]
- ターン制を自分なりに頑張ってみたのですが、
完成したと思ったらやっぱり色々とおかしかったのでアドバイスをいただきたい次第です まず敵を用意して、生成時にglobal.bに+1する。 global.aを用意して、1の時主人公が行動できる→何か行動したらa=2にする a=2になったとき敵達のターンになり、何か行動したら一体につきglobal.bを-1する。 global.b=0になったときa=1にして、現在ルームにいる敵の数をbに代入する これで作ってみたのですが時々何故かbが0より少なくなったり敵が挙動不審な動きになってしまいます。 その辺りはまだ許容範囲だとしてもう一つ、 ・主人公が敵に囲まれているときに相手達のターンになり、敵が攻撃してくる の際一斉に殴りかかってくるような有様になってしまいます。 そこで現在いるモンスターに何か順番に番号を与えて、たとえば敵Aに1、Bに2、Cに3、Dに4…という具合に。 「global.Nを用意して、主人公が行動、つまりa=2になったらNを1にする N=1のときAが行動し、bから-1してN=2にする→N=2になったのでBが行動し、bから-1してN=3にする→ N=3のときCが…〜→b=0になったらa=0、N=0にする」 こうすればおそらく順番に行動してくれると思うのですが (b-=1のタイミングは攻撃や移動などのアニメーション終了時なのでちゃんと順に動くはず) 「現在いる敵に何か順番に『番号』を与える」「Nの値と等しい『番号』を持つ敵が行動し始める」 という処理をどう行えばいいのか分かりません。 敵の数は死んだり新しく出現したりでa=2になるごとに変動してしまうので初めから固定で番号を与えることはできません。 長文かつ分かりにくい文章だと思いますがどうすればよいか分かる方ご教授願います…
- 548 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 21:06:12 ID:eG4vVrw2]
- 一般には待ち行列とかキューとか言われる構造を使うと思う。
1. 主人公とすべての敵のインスタンスIDをキューに入れる 2. キューからインスタンスを一つ取り出し、そのインスタンスに行動させる 3. 行動が終わったら2に戻る。キューが空になっていたら1に戻って最初から 具体的にどう実装するかだけど、まずコントローラオブジェクトを一つ用意して 次のように処理させる。 (ds_queue使ってもいいけど、レジストしてないかもしれないので配列で実装してみた) ・Createイベントで以下の変数を用意 global.current_id = noone; // 現在行動しているインスタンスのID(nooneなら誰もいない) queue_size = 0; // キューの中身の要素数 queue_pos = 0; // キューの何番目まで処理したか ・Stepイベントで次のように処理 if (!instance_exists(global.current_id)) { // 行動しているインスタンスがいない場合 if (queue_pos >= queue_size) { // キューが空だったら…… queue[0] = obj_player.id; // 先頭に主人公のIDを入れ…… queue_size = 1; with (obj_enemy) { // 他のすべての敵もキューに入れる other.queue[other.queue_size] = id; other.queue_size += 1; } queue_pos = 0; } // キューから一つ取り出して行動を開始させる global.current_id = queue[queue_pos]; queue_pos += 1; } 主人公と敵のインスタンスは ・global.current_id == id だったら自分が行動する ・行動が終わったらglobal.current_idをnooneに戻す とすればいい。
- 549 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 21:34:34 ID:uswEIGEy]
- ありがとうございます
ちょっと難しそうですが頑張ってみます。
- 550 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 21:44:15 ID:Gr9J9Ja2]
- やはり548氏が説明されてるキューが一般的だと思う
あえて別の方法を挙げると ターン情報をグローバル変数ではなく各ユニットに持たせるようなやり方 ユニットは配列に格納しておきそれぞれにターン値を設定する unitList[0].turn = 15; // ターン値の初期値 unitList[0].speed = 7; // 素早さ 毎ターンごとに全ユニットのturnプロパティに素早さパラメータを加算 unitList[0].turn = 15 + unitList[0].speed; turnの値が100以上になったユニットがいれば彼のアクティブターン いなければ素早さ加算を繰り返す 魔法や呪文で素早さやターン順が変わるゲームではこの方法も分かりやすいかもしれない
- 551 名前:名前は開発中のものです。 mailto:sage [2008/12/06(土) 22:33:58 ID:uswEIGEy]
- >>548
stepの部分を入れてみたところ色々なところが構文エラーになってしまったのがどうしてでしょうか… obj.enemyなどの部分はちゃんとオブジェクト名に直しました(そこは関係なかったみたいですが)。
- 552 名前:名前は開発中のものです。 mailto:sage [2008/12/07(日) 01:43:46 ID:Hva4nw+k]
- すみません、{などの位置を正したら直ったみたいです。
>>548の場合私が設定したglobal.aやbなどは無くても大丈夫なのでしょうか?
- 553 名前:名前は開発中のものです。 [2008/12/07(日) 15:34:40 ID:BlF8unb/]
- また問題が...
自分のオブジェクトと敵のオブジェクトの間に 壁オブジェクトがあったら弾を打たず、 無かったら撃つという風にしたいのですが・・・ 回答はしたいときで構いません。 よろしくお願いします。
- 554 名前:名前は開発中のものです。 mailto:sage [2008/12/07(日) 16:47:56 ID:iNdKCD5t]
- >>553
ヘルプでcollision_line関数を調べてみましょう・・・
- 555 名前:553 mailto:sage [2008/12/07(日) 18:01:29 ID:BlF8unb/]
- またまたありがとうございます
- 556 名前:名前は開発中のものです。 [2008/12/10(水) 20:08:22 ID:Pwqi4CyR]
- www2.uploda.org/uporg1845643.gmk.html
今こんなゲームを作っています クリックしたとこに緑のやつが移動 近くに赤いやつがいたら勝手に撃つ 左上はレーダー ですが、 なぜか赤いやつの処理だけが遅いのです。 緑のほうが、数も処理数も多いはずです。 赤が一匹だけでもかくかくになってしまいます。 見ていただけたらうれしいです。
- 557 名前:名前は開発中のものです。 [2008/12/10(水) 20:09:11 ID:Pwqi4CyR]
- 連レスorz
パスは fedora8 です
- 558 名前:名前は開発中のものです。 mailto:sage [2008/12/10(水) 20:27:44 ID:edz1Bxdl]
- 緑の奴にinstance_exists(object3)があるから
もし赤い奴がなければこれ以降が無視されるので軽い 衝突判定だとか索敵を毎ステップやると当然重くなるよ あと他の人に見てもらうならコメントか何かはつけるべし
- 559 名前:名前は開発中のものです。 mailto:sage [2008/12/10(水) 20:56:57 ID:nqQ/Z5/R]
- ルームのスピードはそのまま(30fps)で特定のキャラクターのスプライトを10fpsでアニメーションさせる、というようなことは可能でしょうか?
- 560 名前:名前は開発中のものです。 mailto:sage [2008/12/10(水) 22:32:55 ID:eRvJFMy9]
- >>559
image_speed アニメーションの速度 image_index アニメーションの何コマ目を表示しようとしてるか image_number アニメーションの長さ(総コマ数) ヘルプの同じページに3つとも例文付きで載ってます 徐々にアニメーションを早くしたり、特定のコマで停止したり 状況に応じて動的にアニメーション速度を変更できます
- 561 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 08:01:09 ID:0wlARFf+]
- ステップの処理速度を早くしたいのですが
ルームのfpsを高くするだけで効果はあるのでしょうか?
- 562 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 08:47:48 ID:BGyF9xSS]
- >>561
ステップの処理速度を早くしたい、というのは、 動作が重いのを何とかしたい、ということだろうか。 基本的に、効率が悪いと重くなる。 処理速度を上げたいのなら、効率を上げるのが一番いい方法。 例えばマ○オで、そのステージ全体の処理を全て実行するのは無駄が多すぎるのがわかるだろうか。 見えない部分、画面からあまりにも離れた場所の処理を省くことで、効率も処理速度も大きく変わる。 同じ要領で、毎ステップ実行しなきゃいけないことなのかどうかを考えながら、 無駄な部分を出来る限り省いてみるといいと思う。
- 563 名前:561 mailto:sage [2008/12/11(木) 09:52:59 ID:uFLRyYUD]
- 説明不足でした。すみません
キャラAが行動し終わったらすぐキャラBが行動し、Bが行動し終わったらキャラCがすぐ行動し… という動作をあくまでも順番通りに、かつほぼ瞬時に行いたいのですがどうも若干遅延したり最初に動くキャラと最後に動くキャラで行動終了に差が出来たりしてしまうのです。 これはfpsを高くすることで若干でも解消できるのでしょうか。
- 564 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 14:11:51 ID:BGyF9xSS]
- 何だかどうしてもfpsを上げたいようだね。
それに、解消できるかどうかは、試してみればわかるようなことだと思うが……。 理論的には目立たなくなるだろうけど、でも「目立たなくすること」が最終目的じゃないはず。 「あくまでも順番通りに、かつほぼ瞬時に行いたい」 本来なら、これをどうやったら実行できるかと考えるべき。 うまくいかないのなら、何故ズレが生じるのかと原因を考えるべき。 ABCとキャラが三人いるとしても、ABCの順に処理されるとは限らない。 もしかしたらGMは、BCAの順に処理してるかもしれない。 もしそうだったら、 1フレーム目 B:「Aが未処理」 C:「Bが未処理」 A:処理 2フレーム目 B:処理(Aが処理済) C:処理(Bが処理済) という感じに、1フレーム目にAが処理され、2フレーム目にBCが処理されることになる。 これが多分遅延される原理だと思う。 他のオブジェクトに順番を覚えさせ、 そのオブジェクトがABC全員を操作するのがいいんじゃないかと。 例えば、Zってのを作って、ABC自身は何もせず、ZがAを処理してBを処理して……と。 順番を扱うときには配列等を使うのもあり。
- 565 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 16:37:49 ID:nF6qn38V]
- 結論から言えばfpsを変えても解消できないだな
1フレーム毎にオブジェクトが全部更新されるから、何の差か知らないけれど ある経過時間での差は変わらないよ キャラA、B、Cが別々に動いてそれぞれの行動開始までの時間がばらつくというのなら 最初のフレームで行動決定処理(AI部分)をやって次のフレームで行動開始ってすれば 揃っているように見えるけど・・・ゲームによりけりかもね
- 566 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 18:43:18 ID:0wlARFf+]
- なるほど、ありがとうございます
一応>>548を参考にして形だけは出来たのですが先述の通り遅延が生じたり 敵の数が多くなると処理が遅くなって(主人公の動ける順番が回ってくるのが遅くなって) 一歩動くと次動くまでに若干待たされ動作が快適とは言えないような状態になってしまうのです 解消する方法は無いでしょうか…
- 567 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 19:45:07 ID:nF6qn38V]
- ゲームの設計かキューの使い方、どちらかが間違っているような気がする
スペックにもよるけどインスタンス5〜600体ぐらいなら 上記のキュー設計で処理落ちすることはあんまりないと思うんだけどなあ 主人公サイドはキューに詰め込まなくてもいいとか細かいことはあるけど
- 568 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 20:57:24 ID:0wlARFf+]
- 処理落ちというか主人公が動いたときに一斉に行動するのではなく敵がちょっと遅れて動くんです。
敵の数が多ければ多いほど番号が最後に割り振られてる敵?の動きがかなり遅れています。
- 569 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 20:59:36 ID:5W34XGsl]
- >>568
1)情報を小出しにしない。 2)仕様はなるべく提示 3)表現したい目的を言う
- 570 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 21:22:53 ID:YYSIE6Pp]
- もともと>547で敵が全部一斉に動くのがイヤだというから>548のキュー案が出てきたわけで
「順番に動く」と「一斉に動く」は両立しないんだけど、結局どうしたいの? >566で言ってる主人公が待たされるのを解消したいと言うのなら 行動完了するまで待たないで、行動開始してから数ステップ経過したら 次のキャラに行動を始めさせるという手がある。 キャラ数に応じて間隔を変えるようにすれば>568の問題もばっちり。 もちろん、複数のキャラがある程度並行して動けるように設計しとかないといけない。
- 571 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 22:19:17 ID:0wlARFf+]
- 「一斉に動く」というのは視覚的な物で>>570さんのおっしゃる「ある程度並行して動く」というのが正しい表現ですね。すみません。
今は>>548さんの案でシステムを組んで、 主人公:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」 敵:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」(同じ) でそれぞれ動くようにしています。 敵が1体の時でも主人公が動く→敵が動くの過程で「視覚的に」同時には動かず、 ・主人公が動く→動き終わる(行きたいマスに行く)と敵がすぐ動く の流れになりどうも不自然になってしまいます。 敵の数が多くなればなるほどそれが連鎖して ・主人公動く→動き終わると敵Aが動く→Aが動き終わるとBが動く… となり少しずつ遅延されていってしまいます。 以前の global.a=1で主人公のターン global.a=2で敵のターン 主人公行動でa=2に 敵のクリエイト時にglobal.b+=1 global.bの最大値をglobal.cに記録 敵が行動するとglobal.b-=1 global.b=0になった時にa=1に戻し、cをbに代入 だと視覚的でなく実際に「主人公と敵全員が一斉に動いた」のですが これでは順番に動くというのが全く無視されるため廃止しました。 自分の希望としては ・(視覚的にでもいいので)全員が同時に動く。 ・順番に攻撃したりするために(内部処理の面だけでもいいので)順番に行動しているようにする。 の二つが同時に満たされるといいのですがいい方法は無いでしょうか。 何度も申し訳ありません
- 572 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 22:41:52 ID:YYSIE6Pp]
- 普通のターン制ゲームでも、敵がたくさんいたら全員が攻撃し終わるまで待たされるだろ?
と書こうとしたけど、でも全員が歩き終わるのを待ったりはしないよな?と思ったのでちょっと考えてみた。 シレンなり何なり君が参考にしてるゲームで自分と敵の動きをじっくり観察すればわかるはずだけど、 その手のゲームでは1ターンが実際には複数のフェーズから成り立っている。 (1) 自分が行動する(歩く、攻撃する、道具を使うなど) (2) 敵が歩く(全員同時に) (3) 敵が攻撃する(一体ずつ順番に) 自分が歩いた時には(1)と(2)が同時に起こるけど、それ以外の行動をとると(1)が終わってから(2)が起こる。 誰も攻撃行動をとらなければ、主人公は立ち止まることなくスムーズに歩き続けられるわけだ。 この辺を踏まえて、歩くのとその他の行動を分けて別々に実行させるようにしたらどうかな。 ただ、敵はあくまで1ターンに「歩く」と「攻撃する」のどちらか片方しかしないと思うので、 どちらの行動をとるかは(2)より前(ひいては主人公が歩き始める時)に決めておく必要がある。 まとめるとこんな感じかな。 ・主人公が行動決定したら、その他のキャラ全員がどう行動するか決定。変数にでも覚えておく ・主人公の攻撃行動、終わるまで待つ(攻撃しない場合はすぐ次に進む) ・歩く予定のキャラ全員を同時に歩かせる。全員の行動が終わるまで待つ ・攻撃予定のキャラに、キューを使って順番に攻撃行動を行わせる ・全員行動し終わったら最初に戻る
- 573 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 00:41:26 ID:YwPJgrfp]
- 攻撃はなるべく隣接したときや一直線上にきたときに行いたいので
行動前に決定するのはちょっと自分の技能じゃ辛いかなぁと… 主人公が行動する→敵:主人公の行動と同時に、攻撃範囲内に主人公がいなければ移動や特殊行動、いる場合は一旦待機 →移動するべき敵が全員移動し終わったら攻撃準備している敵のフェイズに入る→キューを使って順番に攻撃処理→主人公が動ける状態に戻す として 変数aを用意→a=1の時主人公行動可能状態→主人公行動時にa=2→a=2になったら敵の行動開始(a=2になった際敵の数をbに記録)→ ・攻撃範囲内に主人公がいない敵:移動や特殊行動をし、b-=1 ・攻撃範囲内に主人公がいる敵:キューを利用して順番に攻撃。何らかの変数等をON状態にしてその敵だけキューに対応させる?>攻撃したらb-=1 b=0になったらa=1に戻して再び主人公行動可能状態に とこんな感じでいいのでしょうか? 攻撃をする敵に関するキューをどう組めばいいやらよく分からないのですが…
- 574 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 01:37:09 ID:AbV0Ta9O]
- 攻撃範囲にいたらキューに追加
フェーズが変わったら一個取り出してと処理していけば問題ないんじゃないか 根本的に a が 0,1,2,4 とかビットフラグで管理したいのかもしれないけど 慣れていないならきちんと名前をつけて真偽値でやるべき フェーズ管理についても同様。変数の状態で管理するのではなく 主人公行動、敵の行動、敵の攻撃 etc とそれぞれフラグ管理するべき bの意味が果てしなくないように見える
- 575 名前:名前は開発中のものです。 [2008/12/12(金) 14:22:36 ID:UTYwgiXi]
- オブジェクトの親やマスクを途中で変えたいのですがどうやればいいのでしょうか?
- 576 名前:名前は開発中のものです。 [2008/12/12(金) 19:19:55 ID:b5nKeRJC]
- 親を変えるのは不可能だけど
マスクはmask_indexに再代入すればできるはず
- 577 名前:名前は開発中のものです。 [2008/12/12(金) 21:00:29 ID:6TlHc+FT]
- すみません
gmkはgmdに変換できないでしょうか
- 578 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:10:49 ID:Vplk2GsR]
- >>575
object_set_parentで親を変えることはできるが、インスタンスではなく オブジェクト自体(設計図)に作用するから期待するような結果にはならない。 親を変えたいって質問はたまに見るけど、そういう時はたいてい設計が間違ってるべ。 >>577 LGMでGM7→6に変換できるらしいけど、使ったことないから本当かどうかはわからん。 ttp://www.ismavatar.com/lgm/ って、gmdってことはさらに6→5に落とさないといけないのか。 互換性ない機能も多いからほとんど無理じゃないかな?
- 579 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:16:46 ID:agcPaJTz]
- GMで5ボタンマウス等のサイドボタン使う事はできませんか?
- 580 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:59:50 ID:AbV0Ta9O]
- Help見る限り無理っぽそうだけど
もしデバッグでサイドボタン押したときのmouse_buttonの値が0〜3以外だったら その値を割り当てればいいし、キーコンフィグっぽくするなら global.mb_side_one |= mouse_bottun とかすればできそうではあるけど対応していないような気もする
- 581 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 23:36:54 ID:agcPaJTz]
- >>580
レスありがとう デバッグでGM5.3とLGMで確認したところ無反応でした
- 582 名前:577 mailto:sage [2008/12/13(土) 00:38:49 ID:K75p9U8G]
- >>578
ありがとうございます LGMですね やってみます
- 583 名前:582 [2008/12/13(土) 14:58:29 ID:K75p9U8G]
- LGMでGM6.1A用に変換しました
www2.uploda.org/uporg1852115.gm6.html PASSは GT このobject3の変数 "near"がおかしいです クリックでobject0を近づけると ちゃんとスクリプトやCreateイベントで定義してあるのに Unknown variable near で エラーになります バグでしょうか?
- 584 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 16:00:12 ID:682sG2h4]
- 多分ここだろ。
with (ebul){ move_towards_point((near).x,(near).y,2) } with文内の変数は呼び出し元(この場合object3)の変数の意味にならないよ。 ちゃんと other. をつけてやらんと。(詳しくはヘルプ参照) 以下のように修正したらエラーは出なくなったぞ。仕様かどうか分からんが。 move_towards_point((other.near).x,(other.near).y,2) つーか、こんなことでツール側のバグとか疑うなよ・・・。自分のバグじゃないかw
- 585 名前:583 mailto:sage [2008/12/13(土) 16:21:59 ID:K75p9U8G]
- >>584
wwww そうでしたね 修正します
- 586 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 22:59:58 ID:VLzMeB5w]
- >>585
>wwww とか >バグでしょうか? 言い出す前に、テメーの無能を疑えよな
- 587 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 14:09:14 ID:VQe5+xHL]
- >>586には同意としても
なんとなく高圧的な人増えたな。嫌味っぽく言ってもなんもならんのに
- 588 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 18:09:05 ID:6p1v9SNR]
- 質問する側もちょっとは考えろという事でしょう
- 589 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 11:54:03 ID:Pj6nrR98]
- RPG的なものを作っているのですが、手に入れたアイテムをアイテム欄などで取得順に表示したり
カーソルが合わさっているとき使用するとそのアイテムの効果が現れたりするにはどうすればいいのでしょうか。 アイテム自体は全部完成しており、アイテム名のスプライトやシステム上の番号等は割り振ってあります。5.3です
- 590 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 12:21:24 ID:KxWOE/yV]
- オブジェクト(例えば、主人公のオブジェクトとか)に取得したアイテムを管理する配列を用意して、
取得したアイテム番号を代入していく感じにすればイイのでは? get_item[0] = 取得したアイテム番号 []内は取得するに従い数値を上げていけばよい。 配列の長さを調べる術はないので、自分で管理しないといけない。 もしくは、データ構造で map が使えるなら、それを使ってもよい。 たとえば、キーネームをアイテム名、値に所持数とやると管理しやすい。 ただし、mapはキーネームでソートされてしまうんで、取得順となると工夫しないといけないね。 アイテムメニューのシステムは面倒だが地道にやるしかないのでは。 カーソルの操作処理とかも、いちいちオブジェクトを用意してやらないといけない。 アイテム効果を発動させるには、 メニュー欄に表示されるアイテムオブジェクトに、 使用するときのキー入力イベント(mouseクリックボタン等)を持たせて、 そのイベント内で、 ・アイテム効果発動 ・アイテム消費 の処理を記述していく感じかな。 概念的なことしか書いてないが、参考になれば。
- 591 名前:名前は開発中のものです。 mailto:sage [2008/12/17(水) 08:18:19 ID:BlN9VESD]
- アイテムAを取った時にグローバル変数に1をプラスして、アイテムAの変数にグローバル変数+1を代入。
アイテムを使用した時はグローバル変数から1マイナスする。 ってな感じでどうかな?
- 592 名前:名前は開発中のものです。 mailto:sage [2008/12/18(木) 00:08:00 ID:A6CnLTdh]
- instance_id[] のインデックス使えないかなと思ったけど
これ自体キューになってるんだね。そりゃそうか
- 593 名前:濱田 [2008/12/18(木) 18:33:59 ID:5x5AGIoL]
- ゲーム作成ツールGameMaker で商業ソフトを作成、販売することは合法でしょうか?
またファイナルファンタジータクティクスのようなクォータビューのSRPGは製作可能でしょうか?
- 594 名前:名前は開発中のものです。 mailto:sage [2008/12/18(木) 18:49:28 ID:zjRT977K]
- >>593
課金版なら可能。それと理論上はどんなゲームでも作れる。
- 595 名前:名前は開発中のものです。 [2008/12/18(木) 19:00:44 ID:AtKHrczp]
- えーと変数を使用したアクションを実行すると
ERROR in .....posution 1:UnKnown variable {変数名} ってでるんですけど原因わかる人いたら教えてください
- 596 名前:名前は開発中のものです。 mailto:sage [2008/12/18(木) 19:06:15 ID:uRYQk5PQ]
- >>595
初期値定義してないんじゃね?
- 597 名前:名前は開発中のものです。 [2008/12/18(木) 20:00:57 ID:AtKHrczp]
- >>596
ゲーム作り初心者ですみません・・・ 初期値定義ってなんですか?
- 598 名前:名前は開発中のものです。 [2008/12/18(木) 20:23:37 ID:9UDCWn2j]
- 変数に最初の値を定義するってこと
- 599 名前:名前は開発中のものです。 [2008/12/18(木) 20:34:28 ID:AtKHrczp]
- >>599
ありがとうございます。 何とかできました。
- 600 名前:名前は開発中のものです。 mailto:sage [2008/12/18(木) 22:15:12 ID:BD5z/Zcu]
- >>594
非レジスト(Lite)版でも商用利用可だよ。EULA見た限りでは、商用不可のはβ版だけ。 レジストしてないと「GameMakerで作りました」ってロコが出るからカッコ悪いことになるけど。 >>595 その「.....」の中にも割と重要な手がかり(イベント名とか)が含まれてることがあるので 今後はなるべく省略なしで頼む。
- 601 名前:名前は開発中のものです。 mailto:sage [2008/12/18(木) 23:23:16 ID:gWEUu2RB]
- 初心者とか変に短文にしようとするから困る
・長文でもいいから情報を小出しにするな ・現在どうなってるのか提示 ・目的を明確に この3つそろそろテンプレに入れた方がいいんじゃないか?
- 602 名前:名前は開発中のものです。 [2008/12/18(木) 23:35:13 ID:9UDCWn2j]
- まあ正論だけど
もう解決したからいいんじゃない
- 603 名前:名前は開発中のものです。 mailto:sage [2008/12/19(金) 00:51:49 ID:AK9HTeCg]
- 何がわからないのかわからないもんさ
- 604 名前:名前は開発中のものです。 mailto:sage [2008/12/19(金) 01:06:57 ID:QZODxzKf]
- ゲーム起動時のローディングの時に出せる画像ですが、
あれをアニメ(gif)にしたり複数用意した画像の中からランダムで一枚を表示、などということは可能でしょうか?
- 605 名前:名前は開発中のものです。 mailto:sage [2008/12/19(金) 11:57:53 ID:OJi6EA5S]
- www.uploda.org/uporg1866564.txt.html
使えるかどうかわからないけど ポーズのスクリプト書いてみた。 初期値 global.move=0 のあと このスクリプト読めばば動くはず。 カウントや時間を使ってる、またオブジェクトの生成、消去の部分は別途、 if (global.move =0) { 〜〜〜〜〜 } でくくってあげればいいはず。
- 606 名前:605 mailto:sage [2008/12/19(金) 12:03:25 ID:OJi6EA5S]
- 書き忘れてたけどスクリプトの読み込みはkeypress時ね
- 607 名前:名前は開発中のものです。 mailto:sage [2008/12/19(金) 20:40:28 ID:7ZgwG0BV]
- 消えるのはや!
ありがたく貰おうと思ったらもう404…
- 608 名前:濱田 [2008/12/19(金) 21:11:16 ID:sOxi3S7i]
- Game Maker 5.3A で作成したゲームをVistaでする事は出来ますか?
- 609 名前:名前は開発中のものです。 mailto:sage [2008/12/19(金) 21:12:39 ID:7ZgwG0BV]
- できるよ。
- 610 名前:名前は開発中のものです。 mailto:sage [2008/12/20(土) 10:28:38 ID:rZvj3mwD]
- >>607
その1 if (global.move = 0) { global.move = 1; global.pause = instance_count; for(i=0; i<global.pause; i+=1) { array_a[i,1] = instance_id[i].gravity; array_a[i,2] = instance_id[i].gravity_direction; array_a[i,3] = instance_id[i].hspeed; array_a[i,4] = instance_id[i].vspeed; array_a[i,5] = instance_id[i].path_speed; instance_id[i].gravity = 0; instance_id[i].gravity_direction = 0; instance_id[i].hspeed = 0; instance_id[i].vspeed = 0; instance_id[i].path_speed = 0; } for(i=0; i<8; i+=1) { array_b[i,1] = background_hspeed[i]; array_b[i,2] = background_vspeed[i]; background_hspeed[i] = 0; background_vspeed[i] = 0; } }
- 611 名前:名前は開発中のものです。 mailto:sage [2008/12/20(土) 10:29:35 ID:rZvj3mwD]
- その2
else { global.move = 0; for(i=0; i<global.pause; i+=1) { instance_id[i].gravity = array_a[i,1]; instance_id[i].gravity_direction = array_a[i,2]; instance_id[i].hspeed = array_a[i,3]; instance_id[i].vspeed = array_a[i,4]; instance_id[i].path_speed = array_a[i,5]; } for(i=0; i<7; i+=1) { background_hspeed[i] = array_b[i,1]; background_vspeed[i] = array_b[i,2]; } } 書ききれないから2つに分けたけどこれだけ
- 612 名前:名前は開発中のものです。 mailto:sage [2008/12/20(土) 21:00:05 ID:4d+YUfVI]
- ゲームの遷移状態を管理するオブジェクトに
ポーズ状態をループさせるほうがいいと思うんだけどなあ 各インスタンスの変数を一括処理するのは思わぬバグが出るときがあるから できるだけ避けたほうがいいよ 現にアラーム処理が抜けているような
- 613 名前:名前は開発中のものです。 mailto:sage [2008/12/21(日) 11:14:37 ID:PzRsHlBP]
- instance_activate...とinstance_deactivate...を使う方法もある。
あと、>>31にルーム移動を使ったポーズがある。
- 614 名前:濱田 [2008/12/21(日) 13:39:17 ID:OMCEofD9]
- GMver7で日本語表示するにはどうすればいいでしょうか?
初めてGMでゲーム作成する者ですがバージョン5,3A. 6. 7 .どれを使えばいいでしょうか?
- 615 名前:名前は開発中のものです。 mailto:sage [2008/12/21(日) 14:13:03 ID:susUXEb/]
- あるオブジェクトAにオブジェクトB(いくつもある)が重なった時にEnterを押すと
重なっているBだけが消えるようにしたいのですがどのようにアクションを組めばいいのでしょうか
- 616 名前:名前は開発中のものです。 mailto:sage [2008/12/21(日) 15:46:08 ID:xad+zz/A]
- 音ゲーチックな物を作ろうとしているのですが、soundに音楽を入れ再生した場合ズレが生じたりはしないでしょうか。
するとしたらできるだけ軽減する方法はありますか?
- 617 名前:名前は開発中のものです。 mailto:sage [2008/12/21(日) 16:03:49 ID:J97WFZEv]
- >>615
アクションの中にIf there is an objectみたいなのがある。 BのEnterキーアクションの中でそれを使って、Aと重なっていたら自分を消せばいい。 >>614 >1の非公式情報サイトへGo っていうか、その質問だとすでに7使うこと前提じゃないの? とりあえずバージョンごとの違いとか、今まで聞いてきたことも このスレ内にちゃんと情報があるのでまずは頭から読んできて。
- 618 名前:名前は開発中のものです。 mailto:sage [2008/12/22(月) 01:31:06 ID:FUN2QKHC]
- なんか、大雑把な質問になりますけど、
変数を用意していない状態などで relative用いて変数増やそうとしたり、分母0の割り算とかすると、 エラーメッセージが出て、プレイが中断されますよね? テストプレイ中、エラーメッセージが出ずに、OS巻き込んで フリーズしたり電源落ちたりしてしまうことの原因で 考えられることって何があるでしょうか…。
- 619 名前:名前は開発中のものです。 mailto:sage [2008/12/22(月) 02:11:18 ID:UfdezWih]
- OSの種類もGMのバージョンもどんな状況でなるのかも分からず姉妹
- 620 名前:名前は開発中のものです。 mailto:sage [2008/12/22(月) 13:45:56 ID:VIUd8eyr]
- OS:windows xp sp2
CPU:pen4 3Ghz Memory:2G GM7 pro 処理落ちなどはなく、いきなりフリーズもしくは電源落ちします。 状況…なんですが、これが分からないんですよ。 1度起きた状況を再度再現しようとしたら、何回やっても全然問題なく動いたりするし。 2Dアクションゲームで、ボス敵が岩を投げるんですが、そのときその岩に対し 主人公キャラがジャンプ斬りをあてた時(その時ボスは防御していました) フリーズしました。 岩は「敵の攻撃」を親オブジェクトに持っていますが、 それまで何百回と出てきた「敵の攻撃」に対して同じ攻撃を当てた時はそのようなことはなかったです。 何らかの変数がオーバーフロウした時、似たようなことになった気もしますが、 そういうコードもなさそうです。 フリーズしてしまう原因として挙げられる要因(例えばオーバーフロウ等)、 どなたかご存知の方おられないでしょうか…。。
- 621 名前:名前は開発中のものです。 mailto:sage [2008/12/22(月) 21:09:57 ID:Ff2Oxw5o]
- >>620
その処理の中でオブジェクトの生成・削除・変更などしているとしたら イベントの無限呼び出し(Createイベントの中で同じオブジェクトをCreateするとか) が原因でスタックオーバーフローすることはあり得る。 あるいはコード的な無限ループとか。それで電源落ちるとまでは考えにくいけどね。 何らかのエフェクトを生成しているとしたら、ビデオドライバとの相性かもしれない。
- 622 名前:620 [2008/12/24(水) 13:52:00 ID:j2sRIJLR]
- 遅レスすいません。
無限呼び出しもないと思います。 そうですよね、、コード無限ループの場合、ゲームアプリのみが シャットダウンするに留まる程度だったような記憶があります。 未だ解決されていないのですが、起こる確率がかなり 低い様子ではあるので、この問題は一旦置いておくことにします。 ありがとうございました。
- 623 名前:名前は開発中のものです。 [2008/12/24(水) 19:15:30 ID:Je0ZC97P]
- 前に変数のエラーを書いたものです。
変数の初期値定義のやり方がわからないんですけど、教えてください。
- 624 名前:名前は開発中のものです。 mailto:sage [2008/12/24(水) 19:27:04 ID:Xm8ZsJDZ]
- >>599は何だったんだ
- 625 名前:名前は開発中のものです。 mailto:sage [2008/12/25(木) 00:32:19 ID:lTYGyE3i]
- 非公式情報サイト10回読破して来い
- 626 名前:名前は開発中のものです。 mailto:sage [2008/12/25(木) 01:47:33 ID:LZR7eQes]
- 何も置いてない部屋で「そのボールを四つ『A』って書いてある箱に入れといて」なんて言われても困るでしょう。
カラの入れ物を前もって用意しておかなきゃいけない 初期値定義なんて難しく(?)いうと混乱するかもしれないけど、 要は使いたい変数があるなら数値代入とかする前に数値0で変数を用意しておけ、ってこと。 オブジェクト「箱」の変数Aに+2とかしたいんだったら 「箱」のクリエイトイベントかどこかに「変数Aを0として用意」しておかないとAが見当たらないなんてことになってエラーが起きる。
- 627 名前:名前は開発中のものです。 [2008/12/25(木) 19:40:35 ID:wKjFbyzV]
- >>624
前は何故かGM5から7に変えたらできるようになったから 解決と思ってました・・ >>626 オブジェクトが作られたときに発生するイベントに変数のアクションで 変数を0にして入れたら 解決しました。 教えてくれて助かりました。 ありがとうございます。
- 628 名前:名前は開発中のものです。 mailto:sage [2008/12/25(木) 23:16:41 ID:FQPSIRUG]
- イベントとアクションで書いたものをGMLコードとして見ることはできますか?
- 629 名前:名前は開発中のものです。 mailto:sage [2008/12/25(木) 23:56:07 ID:lTYGyE3i]
- ObjectのShow Informationってボタンで見れたような気がする
- 630 名前:名前は開発中のものです。 [2008/12/26(金) 15:57:01 ID:PhPwcMia]
- これってコンピューター言語を使って自分でプログラム組めたりするの?
それと他のソフトとリンクしたりできる?? そういうのを後々やっていきたいんだけど
- 631 名前:RMT-WM mailto:rmt_wm@hotmail.co.jp [2008/12/26(金) 16:33:47 ID:K4aSBGcm]
- <a href="blog.rmt-wm.com">RMT−WMのブログ</a> ページへようこそ!
- 632 名前:名前は開発中のものです。 mailto:sage [2008/12/26(金) 19:46:25 ID:KU6Gan+K]
- >>629
やっぱそれぐらいしかないすか
- 633 名前:名前は開発中のものです。 mailto:sage [2008/12/26(金) 21:37:08 ID:L5Xtp1pR]
- >>630
GameMaker だけでは、Windows APIやプログラミング言語用のライブラリを直接使うようなプログラムは無理。 あくまでゲーム製作用ツールだからね。 ほかのソフトというか、ほかの言語(C++とか)で作ったDLLを呼び出すことは可能なので、 自作プログラムや、自作DLLで制御可能な他のソフトとの連携は可能。 なもんで、WindowsAPI とリンクさせることももちろん可能で、 例えばダイアログボックスをつくって、 そこからGameMakerでつくった自作ゲームに制御を加えるなんてことも出来る。 もちろん、Windowsプログラミングの知識がそれなりに必要。 流行の(?) .NET との連携は難しそうだね。
- 634 名前:名前は開発中のものです。 mailto:sage [2008/12/26(金) 21:38:56 ID:L5Xtp1pR]
- 追記。DLLを扱える機能は Pro バージョンのみです。
- 635 名前:名前は開発中のものです。 mailto:sage [2008/12/26(金) 22:56:29 ID:SuoE1taa]
- MPのようなゲージを作って、MPが10以上の時にボタンを押すと
MPを10消費して飛び道具が撃てるという設定を作りました。 その結果、何故か描写されているMPゲージが10以下にならず(もちろん内部も)、打ち放題になってしまう現象が起きました。 これのほかにはMPは以下にならない程度しかMPに関連する変数を弄っていないのですが何がいけないのでしょうか。
- 636 名前:名前は開発中のものです。 mailto:sage [2008/12/26(金) 23:11:14 ID:SxF5ePcK]
- >>635
普通そういうのは実際のソース見なけりゃ答えられん。が、もし If MPが10以上なら MPを10減らす 飛び道具を撃つ みたいに組んでるなら If MPが10以上なら ▲<Start of block> MPを10減らす 飛び道具を撃つ ▼<End of block> こう囲め。
- 637 名前:名前は開発中のものです。 [2008/12/27(土) 00:34:43 ID:zgTmgbXH]
- スプライトを透過させたい時に透過を選ぶとドット絵に穴があいたような感じになりますが
ああではなく後ろの色が映るいわゆる半透明にしたいのですが可能でしょうか
- 638 名前:名前は開発中のものです。 mailto:sage [2008/12/27(土) 01:12:00 ID:Glw8dwT3]
- >>637
単純に画像全体を半透明にしたいならどのverでもOK(未レジストでも) スプライトのalphaプロパティを弄れば良い ピクセルごと透明度が異なるような表現(例えば輪郭にアンチエイリアス)がしたいなら ver6以降のレジスト版か、あるいは外部DLLを使えばver6以前のGMでも可能かも ついでに確かver7レジスト版から32bitPNGが扱えたはず
- 639 名前:名前は開発中のものです。 mailto:sage [2008/12/27(土) 15:43:46 ID:bMiIzurr]
- アクションゲームを作っています。
フォーラムなどを参考にしてジャンプして地面に着地などはできるようになったのですが、 ジャンプ中やダッシュ中に障害物に当たると(毎回起こるわけではないのですが)コリジョンの設定が悪さをしているのか遥か上空に吹っ飛んだりあらぬところにワープしてしまいます。 障害物は上に乗れるので親を地面と同じにしています。 横移動やジャンプ中の接触(上や横)に対するコリジョンはどう設定すればいいのでしょうか。バージョンは5.3です
- 640 名前:名前は開発中のものです。 [2008/12/27(土) 19:56:55 ID:zgTmgbXH]
- >>638
できました、ありがとう ついでにもう一つ質問です キーボードを押しっぱなしの時にアクションを起こしているのですが 特定状況下で「プレイヤーはキーを押しっぱなしだけど内部ではそのキーは押されていない」と言う処理を行いたいのです。 これは可能でしょうか。
- 641 名前:名前は開発中のものです。 mailto:sage [2008/12/27(土) 21:54:29 ID:mqdpfh1K]
- >>639
ソース見なきゃわからん
- 642 名前:名前は開発中のものです。 mailto:sage [2008/12/27(土) 21:58:58 ID:mqdpfh1K]
- >>640
理解力が無いから俺の想像だけど 例えば変数1の時はAキーを押すとアクションが発生するけど、変数が2の時はAキーを押しても発生しないって事で良いかな? もしそうならキーを押すイベントでIf an exprssion is trueを使えば良いと思う
- 643 名前:名前は開発中のものです。 [2008/12/28(日) 01:10:46 ID:lQUrTnBK]
- ついに登場!アクションゲームツクール
www.famitsu.com/blog/tkool/2008/09/post_52.html アクションゲーム制作の決定版!Multimedia Fusion2 国内販売推進委員会 www7a.biglobe.ne.jp/~bp-827z/mmf2/ hp.vector.co.jp/authors/VA036419/game.html
- 644 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 05:48:32 ID:1w+FYaO/]
- なんか使ってるうちにアクションは全部スクリプトで処理になるよね?
管理と編集が楽になるよね?
- 645 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 15:22:43 ID:cZXYtdqt]
- あえてアイコン方式で記述する意味がないからなあ
コードがかけなくても作れるってのを謳い文句にしてるけど 制約の中アイコン記述を覚えてもしょうがないんだよな
- 646 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 17:21:40 ID:LlMEzWDN]
- ただ、スクリプト記述するよりもアイコンの方が処理が早い罠w
- 647 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 19:00:32 ID:fT956MDj]
- アクションゲームで左右キーを押すとキャラが左右に動くのですが
坂道などでは段差でカクカクしたりしてしまいます。 なめらかに動かすには当たり判定や動きをどう設定すればいいでしょう。
- 648 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 20:37:31 ID:cZXYtdqt]
- >>646
Scriptsは呼び出し自体が重いから差が顕著に出るけど piece of code だとほとんど変わらないような気がする >>647 ピクセル単位で当たり判定を取っていたりしないかな 矩形や簡易図形で当たり判定を取るようにすればよくなるんじゃないかと 少し上にもあったけど、当たり判定処理がうまくいかないとかは ○○のエラーがでますというのと違って、プログラムは良くも悪くも書いた通りにしか動かないから 周辺の情報を出さないと条件式を見直せぐらいしか答えようがなくなってくるよ
- 649 名前:名前は開発中のものです。 mailto:sage [2008/12/28(日) 21:00:33 ID:fT956MDj]
- 正確な当たり判定を取るとキャラクターの足が動くたびに判定がおかしくなるのでとりあえず大きさに合わせて四角にしています。
足場も同様ですが斜めの床を作る際斜めにすると三角でマスクしても微妙なドットのせいでかくかくしてしまうのです。
- 650 名前:646 mailto:sage [2008/12/28(日) 23:34:43 ID:LlMEzWDN]
- >>648
昔、timeGetTime()を呼び出すDLLを作って実験してみたことがあったんだ。 今また試しにやってみたところ、変数の代入なら varアイコンを使うより piece of code の方が早かった。 が、instance_create() の呼び出しは、アイコンの方が早かった。 即効作ったソース。 ttp://www3.uploda.org/uporg1890827.zip.html
- 651 名前:646 mailto:sage [2008/12/29(月) 00:02:49 ID:gdKazmBS]
- ああ、忘れてた。
>>650 の受信pass : gamemaker スレ汚しごめんなさい。
- 652 名前:名前は開発中のものです。 [2008/12/29(月) 01:21:50 ID:PIejyGZB]
- 床のコリジョンを作っていますが
今の段階だと床に当たった時に起きるアクションと空中にある床に頭から接触したとき、 壁に横から接触したときのアクションが同じになってしまいます。 コリジョンを方向によってわける方法を教えてください
- 653 名前:名前は開発中のものです。 mailto:sage [2008/12/29(月) 03:11:36 ID:p4VZEUac]
- vspeed > 0 && y < other.y+18
ってんでどうかな これは上からね
- 654 名前:645 mailto:sage [2008/12/29(月) 13:44:03 ID:T1r41zQH]
- >>650
404・・・自分でも確かめられることなのでやってみた repeat loop 20000 回でinstance_create()をGMのcurrent_timeで比較してみた 確かにアイコンの方が早いみたいですね。平均20msぐらい差が出ました 一応環境 XP SP3 Celeron M 1.3 GHz GMのcurrent_timeの精度もあるので相対比較という感じです
- 655 名前:濱田 [2008/12/29(月) 20:51:48 ID:hLjua+tb]
- 日本語訳の手に入れ方が分かりません。どうすればいいでしょうか?
- 656 名前:名前は開発中のものです。 mailto:sage [2008/12/29(月) 21:44:28 ID:quafeWvW]
- みんな買ってんの?
PROだとエフェクト楽しいのかな
|

|