トップページ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/
05425402008/12/04(木) 22:08:30ID:hYQrGj00
>>541
それです!
ありがとうございました。
0543名前は開発中のものです。2008/12/05(金) 17:53:46ID:X+fPv7FO
>>539
助かりました。
ありがとうございます!
0544名前は開発中のものです。2008/12/06(土) 17:02:27ID:DxqncoX6
また問題が出ました。
何度も何度もすみません。
敵が全滅したり
味方が全滅したりすると
変数の参照先がなくなり
エラーになります。
解決策はないでしょうか?
0545名前は開発中のものです。2008/12/06(土) 17:49:42ID:6jDgYk9y
参照するまえに、存在するか確認する。
存在するなら参照する。しなかったら何もしなくていい。
instance_exists(obj)を使えば存在するかどうかが、
instance_number(obj)を使えば個数がわかる。
05465442008/12/06(土) 18:50:41ID:DxqncoX6
ありがとうございます。
0547名前は開発中のものです。2008/12/06(土) 19:09:11ID: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になるごとに変動してしまうので初めから固定で番号を与えることはできません。


長文かつ分かりにくい文章だと思いますがどうすればよいか分かる方ご教授願います…
0548名前は開発中のものです。2008/12/06(土) 21:06:12ID: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に戻す
とすればいい。
0549名前は開発中のものです。2008/12/06(土) 21:34:34ID:uswEIGEy
ありがとうございます
ちょっと難しそうですが頑張ってみます。
0550名前は開発中のものです。2008/12/06(土) 21:44:15ID:Gr9J9Ja2
やはり548氏が説明されてるキューが一般的だと思う
あえて別の方法を挙げると
ターン情報をグローバル変数ではなく各ユニットに持たせるようなやり方

ユニットは配列に格納しておきそれぞれにターン値を設定する
unitList[0].turn = 15; // ターン値の初期値
unitList[0].speed = 7; // 素早さ
毎ターンごとに全ユニットのturnプロパティに素早さパラメータを加算
unitList[0].turn = 15 + unitList[0].speed;
turnの値が100以上になったユニットがいれば彼のアクティブターン
いなければ素早さ加算を繰り返す

魔法や呪文で素早さやターン順が変わるゲームではこの方法も分かりやすいかもしれない
0551名前は開発中のものです。2008/12/06(土) 22:33:58ID:uswEIGEy
>>548
stepの部分を入れてみたところ色々なところが構文エラーになってしまったのがどうしてでしょうか…
obj.enemyなどの部分はちゃんとオブジェクト名に直しました(そこは関係なかったみたいですが)。
0552名前は開発中のものです。2008/12/07(日) 01:43:46ID:Hva4nw+k
すみません、{などの位置を正したら直ったみたいです。

>>548の場合私が設定したglobal.aやbなどは無くても大丈夫なのでしょうか?
0553名前は開発中のものです。2008/12/07(日) 15:34:40ID:BlF8unb/
また問題が...
自分のオブジェクトと敵のオブジェクトの間に
壁オブジェクトがあったら弾を打たず、
無かったら撃つという風にしたいのですが・・・
回答はしたいときで構いません。
よろしくお願いします。
0554名前は開発中のものです。2008/12/07(日) 16:47:56ID:iNdKCD5t
>>553
ヘルプでcollision_line関数を調べてみましょう・・・
05555532008/12/07(日) 18:01:29ID:BlF8unb/
またまたありがとうございます
0556名前は開発中のものです。2008/12/10(水) 20:08:22ID:Pwqi4CyR
http://www2.uploda.org/uporg1845643.gmk.html
今こんなゲームを作っています
クリックしたとこに緑のやつが移動
近くに赤いやつがいたら勝手に撃つ
左上はレーダー

ですが、
なぜか赤いやつの処理だけが遅いのです。
緑のほうが、数も処理数も多いはずです。
赤が一匹だけでもかくかくになってしまいます。
見ていただけたらうれしいです。
0557名前は開発中のものです。2008/12/10(水) 20:09:11ID:Pwqi4CyR
連レスorz
パスは fedora8 です
0558名前は開発中のものです。2008/12/10(水) 20:27:44ID:edz1Bxdl
緑の奴にinstance_exists(object3)があるから
もし赤い奴がなければこれ以降が無視されるので軽い
衝突判定だとか索敵を毎ステップやると当然重くなるよ

あと他の人に見てもらうならコメントか何かはつけるべし
0559名前は開発中のものです。2008/12/10(水) 20:56:57ID:nqQ/Z5/R
ルームのスピードはそのまま(30fps)で特定のキャラクターのスプライトを10fpsでアニメーションさせる、というようなことは可能でしょうか?
0560名前は開発中のものです。2008/12/10(水) 22:32:55ID:eRvJFMy9
>>559
image_speed アニメーションの速度
image_index アニメーションの何コマ目を表示しようとしてるか
image_number アニメーションの長さ(総コマ数)

ヘルプの同じページに3つとも例文付きで載ってます
徐々にアニメーションを早くしたり、特定のコマで停止したり
状況に応じて動的にアニメーション速度を変更できます
0561名前は開発中のものです。2008/12/11(木) 08:01:09ID:0wlARFf+
ステップの処理速度を早くしたいのですが
ルームのfpsを高くするだけで効果はあるのでしょうか?
0562名前は開発中のものです。2008/12/11(木) 08:47:48ID:BGyF9xSS
>>561
ステップの処理速度を早くしたい、というのは、
動作が重いのを何とかしたい、ということだろうか。

基本的に、効率が悪いと重くなる。
処理速度を上げたいのなら、効率を上げるのが一番いい方法。

例えばマ○オで、そのステージ全体の処理を全て実行するのは無駄が多すぎるのがわかるだろうか。
見えない部分、画面からあまりにも離れた場所の処理を省くことで、効率も処理速度も大きく変わる。

同じ要領で、毎ステップ実行しなきゃいけないことなのかどうかを考えながら、
無駄な部分を出来る限り省いてみるといいと思う。
05635612008/12/11(木) 09:52:59ID:uFLRyYUD
説明不足でした。すみません
キャラAが行動し終わったらすぐキャラBが行動し、Bが行動し終わったらキャラCがすぐ行動し…
という動作をあくまでも順番通りに、かつほぼ瞬時に行いたいのですがどうも若干遅延したり最初に動くキャラと最後に動くキャラで行動終了に差が出来たりしてしまうのです。
これはfpsを高くすることで若干でも解消できるのでしょうか。
0564名前は開発中のものです。2008/12/11(木) 14:11:51ID: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を処理して……と。
順番を扱うときには配列等を使うのもあり。
0565名前は開発中のものです。2008/12/11(木) 16:37:49ID:nF6qn38V
結論から言えばfpsを変えても解消できないだな
1フレーム毎にオブジェクトが全部更新されるから、何の差か知らないけれど
ある経過時間での差は変わらないよ

キャラA、B、Cが別々に動いてそれぞれの行動開始までの時間がばらつくというのなら
最初のフレームで行動決定処理(AI部分)をやって次のフレームで行動開始ってすれば
揃っているように見えるけど・・・ゲームによりけりかもね
0566名前は開発中のものです。2008/12/11(木) 18:43:18ID:0wlARFf+
なるほど、ありがとうございます
一応>>548を参考にして形だけは出来たのですが先述の通り遅延が生じたり
敵の数が多くなると処理が遅くなって(主人公の動ける順番が回ってくるのが遅くなって)
一歩動くと次動くまでに若干待たされ動作が快適とは言えないような状態になってしまうのです

解消する方法は無いでしょうか…
0567名前は開発中のものです。2008/12/11(木) 19:45:07ID:nF6qn38V
ゲームの設計かキューの使い方、どちらかが間違っているような気がする

スペックにもよるけどインスタンス5〜600体ぐらいなら
上記のキュー設計で処理落ちすることはあんまりないと思うんだけどなあ
主人公サイドはキューに詰め込まなくてもいいとか細かいことはあるけど
0568名前は開発中のものです。2008/12/11(木) 20:57:24ID:0wlARFf+
処理落ちというか主人公が動いたときに一斉に行動するのではなく敵がちょっと遅れて動くんです。
敵の数が多ければ多いほど番号が最後に割り振られてる敵?の動きがかなり遅れています。
0569名前は開発中のものです。2008/12/11(木) 20:59:36ID:5W34XGsl
>>568
1)情報を小出しにしない。
2)仕様はなるべく提示
3)表現したい目的を言う
0570名前は開発中のものです。2008/12/11(木) 21:22:53ID:YYSIE6Pp
もともと>547で敵が全部一斉に動くのがイヤだというから>548のキュー案が出てきたわけで
「順番に動く」と「一斉に動く」は両立しないんだけど、結局どうしたいの?

>566で言ってる主人公が待たされるのを解消したいと言うのなら
行動完了するまで待たないで、行動開始してから数ステップ経過したら
次のキャラに行動を始めさせるという手がある。
キャラ数に応じて間隔を変えるようにすれば>568の問題もばっちり。
もちろん、複数のキャラがある程度並行して動けるように設計しとかないといけない。
0571名前は開発中のものです。2008/12/11(木) 22:19:17ID: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に代入
だと視覚的でなく実際に「主人公と敵全員が一斉に動いた」のですが
これでは順番に動くというのが全く無視されるため廃止しました。

自分の希望としては
・(視覚的にでもいいので)全員が同時に動く。
・順番に攻撃したりするために(内部処理の面だけでもいいので)順番に行動しているようにする。
の二つが同時に満たされるといいのですがいい方法は無いでしょうか。
何度も申し訳ありません
0572名前は開発中のものです。2008/12/11(木) 22:41:52ID:YYSIE6Pp
普通のターン制ゲームでも、敵がたくさんいたら全員が攻撃し終わるまで待たされるだろ?
と書こうとしたけど、でも全員が歩き終わるのを待ったりはしないよな?と思ったのでちょっと考えてみた。

シレンなり何なり君が参考にしてるゲームで自分と敵の動きをじっくり観察すればわかるはずだけど、
その手のゲームでは1ターンが実際には複数のフェーズから成り立っている。
(1) 自分が行動する(歩く、攻撃する、道具を使うなど)
(2) 敵が歩く(全員同時に)
(3) 敵が攻撃する(一体ずつ順番に)
自分が歩いた時には(1)と(2)が同時に起こるけど、それ以外の行動をとると(1)が終わってから(2)が起こる。
誰も攻撃行動をとらなければ、主人公は立ち止まることなくスムーズに歩き続けられるわけだ。

この辺を踏まえて、歩くのとその他の行動を分けて別々に実行させるようにしたらどうかな。
ただ、敵はあくまで1ターンに「歩く」と「攻撃する」のどちらか片方しかしないと思うので、
どちらの行動をとるかは(2)より前(ひいては主人公が歩き始める時)に決めておく必要がある。
まとめるとこんな感じかな。
・主人公が行動決定したら、その他のキャラ全員がどう行動するか決定。変数にでも覚えておく
・主人公の攻撃行動、終わるまで待つ(攻撃しない場合はすぐ次に進む)
・歩く予定のキャラ全員を同時に歩かせる。全員の行動が終わるまで待つ
・攻撃予定のキャラに、キューを使って順番に攻撃行動を行わせる
・全員行動し終わったら最初に戻る
0573名前は開発中のものです。2008/12/12(金) 00:41:26ID:YwPJgrfp
攻撃はなるべく隣接したときや一直線上にきたときに行いたいので
行動前に決定するのはちょっと自分の技能じゃ辛いかなぁと…

主人公が行動する→敵:主人公の行動と同時に、攻撃範囲内に主人公がいなければ移動や特殊行動、いる場合は一旦待機
→移動するべき敵が全員移動し終わったら攻撃準備している敵のフェイズに入る→キューを使って順番に攻撃処理→主人公が動ける状態に戻す

として

変数aを用意→a=1の時主人公行動可能状態→主人公行動時にa=2→a=2になったら敵の行動開始(a=2になった際敵の数をbに記録)→
・攻撃範囲内に主人公がいない敵:移動や特殊行動をし、b-=1
・攻撃範囲内に主人公がいる敵:キューを利用して順番に攻撃。何らかの変数等をON状態にしてその敵だけキューに対応させる?>攻撃したらb-=1
b=0になったらa=1に戻して再び主人公行動可能状態に

とこんな感じでいいのでしょうか?
攻撃をする敵に関するキューをどう組めばいいやらよく分からないのですが…
0574名前は開発中のものです。2008/12/12(金) 01:37:09ID:AbV0Ta9O
攻撃範囲にいたらキューに追加
フェーズが変わったら一個取り出してと処理していけば問題ないんじゃないか

根本的に a が 0,1,2,4 とかビットフラグで管理したいのかもしれないけど
慣れていないならきちんと名前をつけて真偽値でやるべき
フェーズ管理についても同様。変数の状態で管理するのではなく
主人公行動、敵の行動、敵の攻撃 etc とそれぞれフラグ管理するべき

bの意味が果てしなくないように見える
0575名前は開発中のものです。2008/12/12(金) 14:22:36ID:UTYwgiXi
オブジェクトの親やマスクを途中で変えたいのですがどうやればいいのでしょうか?
0576名前は開発中のものです。2008/12/12(金) 19:19:55ID:b5nKeRJC
親を変えるのは不可能だけど
マスクはmask_indexに再代入すればできるはず
0577名前は開発中のものです。2008/12/12(金) 21:00:29ID:6TlHc+FT
すみません
gmkはgmdに変換できないでしょうか
0578名前は開発中のものです。2008/12/12(金) 22:10:49ID:Vplk2GsR
>>575
object_set_parentで親を変えることはできるが、インスタンスではなく
オブジェクト自体(設計図)に作用するから期待するような結果にはならない。
親を変えたいって質問はたまに見るけど、そういう時はたいてい設計が間違ってるべ。

>>577
LGMでGM7→6に変換できるらしいけど、使ったことないから本当かどうかはわからん。
ttp://www.ismavatar.com/lgm/
って、gmdってことはさらに6→5に落とさないといけないのか。
互換性ない機能も多いからほとんど無理じゃないかな?
0579名前は開発中のものです。2008/12/12(金) 22:16:46ID:agcPaJTz
GMで5ボタンマウス等のサイドボタン使う事はできませんか?
0580名前は開発中のものです。2008/12/12(金) 22:59:50ID:AbV0Ta9O
Help見る限り無理っぽそうだけど

もしデバッグでサイドボタン押したときのmouse_buttonの値が0〜3以外だったら
その値を割り当てればいいし、キーコンフィグっぽくするなら
global.mb_side_one |= mouse_bottun
とかすればできそうではあるけど対応していないような気もする
0581名前は開発中のものです。2008/12/12(金) 23:36:54ID:agcPaJTz
>>580
レスありがとう
デバッグでGM5.3とLGMで確認したところ無反応でした
05825772008/12/13(土) 00:38:49ID:K75p9U8G
>>578
ありがとうございます
LGMですね
やってみます
05835822008/12/13(土) 14:58:29ID:K75p9U8G
LGMでGM6.1A用に変換しました
http://www2.uploda.org/uporg1852115.gm6.html
PASSは GT
このobject3の変数 "near"がおかしいです
クリックでobject0を近づけると
ちゃんとスクリプトやCreateイベントで定義してあるのに
Unknown variable near で
エラーになります
バグでしょうか?
0584名前は開発中のものです。2008/12/13(土) 16:00:12ID: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
05855832008/12/13(土) 16:21:59ID:K75p9U8G
>>584
wwww
そうでしたね
修正します
0586名前は開発中のものです。2008/12/14(日) 22:59:58ID:VLzMeB5w
>>585
>wwww
とか
>バグでしょうか?
言い出す前に、テメーの無能を疑えよな
0587名前は開発中のものです。2008/12/15(月) 14:09:14ID:VQe5+xHL
>>586には同意としても
なんとなく高圧的な人増えたな。嫌味っぽく言ってもなんもならんのに
0588名前は開発中のものです。2008/12/15(月) 18:09:05ID:6p1v9SNR
質問する側もちょっとは考えろという事でしょう
0589名前は開発中のものです。2008/12/16(火) 11:54:03ID:Pj6nrR98
RPG的なものを作っているのですが、手に入れたアイテムをアイテム欄などで取得順に表示したり
カーソルが合わさっているとき使用するとそのアイテムの効果が現れたりするにはどうすればいいのでしょうか。
アイテム自体は全部完成しており、アイテム名のスプライトやシステム上の番号等は割り振ってあります。5.3です
0590名前は開発中のものです。2008/12/16(火) 12:21:24ID:KxWOE/yV
オブジェクト(例えば、主人公のオブジェクトとか)に取得したアイテムを管理する配列を用意して、
取得したアイテム番号を代入していく感じにすればイイのでは?

get_item[0] = 取得したアイテム番号
[]内は取得するに従い数値を上げていけばよい。
配列の長さを調べる術はないので、自分で管理しないといけない。

もしくは、データ構造で map が使えるなら、それを使ってもよい。
たとえば、キーネームをアイテム名、値に所持数とやると管理しやすい。
ただし、mapはキーネームでソートされてしまうんで、取得順となると工夫しないといけないね。

アイテムメニューのシステムは面倒だが地道にやるしかないのでは。
カーソルの操作処理とかも、いちいちオブジェクトを用意してやらないといけない。

アイテム効果を発動させるには、
メニュー欄に表示されるアイテムオブジェクトに、
使用するときのキー入力イベント(mouseクリックボタン等)を持たせて、
そのイベント内で、
・アイテム効果発動
・アイテム消費
の処理を記述していく感じかな。

概念的なことしか書いてないが、参考になれば。
0591名前は開発中のものです。2008/12/17(水) 08:18:19ID:BlN9VESD
アイテムAを取った時にグローバル変数に1をプラスして、アイテムAの変数にグローバル変数+1を代入。
アイテムを使用した時はグローバル変数から1マイナスする。

ってな感じでどうかな?
0592名前は開発中のものです。2008/12/18(木) 00:08:00ID:A6CnLTdh
instance_id[] のインデックス使えないかなと思ったけど
これ自体キューになってるんだね。そりゃそうか
0593濱田2008/12/18(木) 18:33:59ID:5x5AGIoL
 ゲーム作成ツールGameMaker で商業ソフトを作成、販売することは合法でしょうか?
 またファイナルファンタジータクティクスのようなクォータビューのSRPGは製作可能でしょうか?
0594名前は開発中のものです。2008/12/18(木) 18:49:28ID:zjRT977K
>>593
課金版なら可能。それと理論上はどんなゲームでも作れる。
0595名前は開発中のものです。2008/12/18(木) 19:00:44ID:AtKHrczp
えーと変数を使用したアクションを実行すると
ERROR in .....posution 1:UnKnown variable {変数名}
ってでるんですけど原因わかる人いたら教えてください
0596名前は開発中のものです。2008/12/18(木) 19:06:15ID:uRYQk5PQ
>>595
初期値定義してないんじゃね?
0597名前は開発中のものです。2008/12/18(木) 20:00:57ID:AtKHrczp
>>596
ゲーム作り初心者ですみません・・・
初期値定義ってなんですか?
0598名前は開発中のものです。2008/12/18(木) 20:23:37ID:9UDCWn2j
変数に最初の値を定義するってこと
0599名前は開発中のものです。2008/12/18(木) 20:34:28ID:AtKHrczp
>>599
ありがとうございます。
何とかできました。
0600名前は開発中のものです。2008/12/18(木) 22:15:12ID:BD5z/Zcu
>>594
非レジスト(Lite)版でも商用利用可だよ。EULA見た限りでは、商用不可のはβ版だけ。
レジストしてないと「GameMakerで作りました」ってロコが出るからカッコ悪いことになるけど。

>>595
その「.....」の中にも割と重要な手がかり(イベント名とか)が含まれてることがあるので
今後はなるべく省略なしで頼む。
0601名前は開発中のものです。2008/12/18(木) 23:23:16ID:gWEUu2RB
初心者とか変に短文にしようとするから困る

・長文でもいいから情報を小出しにするな
・現在どうなってるのか提示
・目的を明確に

この3つそろそろテンプレに入れた方がいいんじゃないか?
0602名前は開発中のものです。2008/12/18(木) 23:35:13ID:9UDCWn2j
まあ正論だけど
もう解決したからいいんじゃない
0603名前は開発中のものです。2008/12/19(金) 00:51:49ID:AK9HTeCg
何がわからないのかわからないもんさ
0604名前は開発中のものです。2008/12/19(金) 01:06:57ID:QZODxzKf
ゲーム起動時のローディングの時に出せる画像ですが、
あれをアニメ(gif)にしたり複数用意した画像の中からランダムで一枚を表示、などということは可能でしょうか?
0605名前は開発中のものです。2008/12/19(金) 11:57:53ID:OJi6EA5S
http://www.uploda.org/uporg1866564.txt.html

使えるかどうかわからないけど
ポーズのスクリプト書いてみた。

初期値 global.move=0 のあと
このスクリプト読めばば動くはず。

カウントや時間を使ってる、またオブジェクトの生成、消去の部分は別途、

if (global.move =0)
{
  〜〜〜〜〜
}

でくくってあげればいいはず。
06066052008/12/19(金) 12:03:25ID:OJi6EA5S
書き忘れてたけどスクリプトの読み込みはkeypress時ね
0607名前は開発中のものです。2008/12/19(金) 20:40:28ID:7ZgwG0BV
消えるのはや!
ありがたく貰おうと思ったらもう404…
0608濱田2008/12/19(金) 21:11:16ID:sOxi3S7i
Game Maker 5.3A で作成したゲームをVistaでする事は出来ますか?
0609名前は開発中のものです。2008/12/19(金) 21:12:39ID:7ZgwG0BV
できるよ。
0610名前は開発中のものです。2008/12/20(土) 10:28:38ID: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;
}
}
0611名前は開発中のものです。2008/12/20(土) 10:29:35ID: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つに分けたけどこれだけ
0612名前は開発中のものです。2008/12/20(土) 21:00:05ID:4d+YUfVI
ゲームの遷移状態を管理するオブジェクトに
ポーズ状態をループさせるほうがいいと思うんだけどなあ

各インスタンスの変数を一括処理するのは思わぬバグが出るときがあるから
できるだけ避けたほうがいいよ
現にアラーム処理が抜けているような
0613名前は開発中のものです。2008/12/21(日) 11:14:37ID:PzRsHlBP
instance_activate...とinstance_deactivate...を使う方法もある。
あと、>>31にルーム移動を使ったポーズがある。
0614濱田2008/12/21(日) 13:39:17ID:OMCEofD9
GMver7で日本語表示するにはどうすればいいでしょうか?
初めてGMでゲーム作成する者ですがバージョン5,3A. 6. 7 .どれを使えばいいでしょうか?
0615名前は開発中のものです。2008/12/21(日) 14:13:03ID:susUXEb/
あるオブジェクトAにオブジェクトB(いくつもある)が重なった時にEnterを押すと
重なっているBだけが消えるようにしたいのですがどのようにアクションを組めばいいのでしょうか
0616名前は開発中のものです。2008/12/21(日) 15:46:08ID:xad+zz/A
音ゲーチックな物を作ろうとしているのですが、soundに音楽を入れ再生した場合ズレが生じたりはしないでしょうか。
するとしたらできるだけ軽減する方法はありますか?
0617名前は開発中のものです。2008/12/21(日) 16:03:49ID:J97WFZEv
>>615
アクションの中にIf there is an objectみたいなのがある。
BのEnterキーアクションの中でそれを使って、Aと重なっていたら自分を消せばいい。

>>614
>1の非公式情報サイトへGo
っていうか、その質問だとすでに7使うこと前提じゃないの?
とりあえずバージョンごとの違いとか、今まで聞いてきたことも
このスレ内にちゃんと情報があるのでまずは頭から読んできて。
0618名前は開発中のものです。2008/12/22(月) 01:31:06ID:FUN2QKHC
なんか、大雑把な質問になりますけど、

変数を用意していない状態などで
relative用いて変数増やそうとしたり、分母0の割り算とかすると、
エラーメッセージが出て、プレイが中断されますよね?

テストプレイ中、エラーメッセージが出ずに、OS巻き込んで
フリーズしたり電源落ちたりしてしまうことの原因で
考えられることって何があるでしょうか…。
0619名前は開発中のものです。2008/12/22(月) 02:11:18ID:UfdezWih
OSの種類もGMのバージョンもどんな状況でなるのかも分からず姉妹
0620名前は開発中のものです。2008/12/22(月) 13:45:56ID:VIUd8eyr
OS:windows xp sp2
CPU:pen4 3Ghz
Memory:2G
GM7 pro
処理落ちなどはなく、いきなりフリーズもしくは電源落ちします。

状況…なんですが、これが分からないんですよ。
1度起きた状況を再度再現しようとしたら、何回やっても全然問題なく動いたりするし。

2Dアクションゲームで、ボス敵が岩を投げるんですが、そのときその岩に対し
主人公キャラがジャンプ斬りをあてた時(その時ボスは防御していました)
フリーズしました。
岩は「敵の攻撃」を親オブジェクトに持っていますが、
それまで何百回と出てきた「敵の攻撃」に対して同じ攻撃を当てた時はそのようなことはなかったです。
何らかの変数がオーバーフロウした時、似たようなことになった気もしますが、
そういうコードもなさそうです。

フリーズしてしまう原因として挙げられる要因(例えばオーバーフロウ等)、
どなたかご存知の方おられないでしょうか…。。
0621名前は開発中のものです。2008/12/22(月) 21:09:57ID:Ff2Oxw5o
>>620
その処理の中でオブジェクトの生成・削除・変更などしているとしたら
イベントの無限呼び出し(Createイベントの中で同じオブジェクトをCreateするとか)
が原因でスタックオーバーフローすることはあり得る。
あるいはコード的な無限ループとか。それで電源落ちるとまでは考えにくいけどね。
何らかのエフェクトを生成しているとしたら、ビデオドライバとの相性かもしれない。
06226202008/12/24(水) 13:52:00ID:j2sRIJLR
遅レスすいません。
無限呼び出しもないと思います。

そうですよね、、コード無限ループの場合、ゲームアプリのみが
シャットダウンするに留まる程度だったような記憶があります。

未だ解決されていないのですが、起こる確率がかなり
低い様子ではあるので、この問題は一旦置いておくことにします。

ありがとうございました。
0623名前は開発中のものです。2008/12/24(水) 19:15:30ID:Je0ZC97P
前に変数のエラーを書いたものです。
変数の初期値定義のやり方がわからないんですけど、教えてください。
0624名前は開発中のものです。2008/12/24(水) 19:27:04ID:Xm8ZsJDZ
>>599は何だったんだ
0625名前は開発中のものです。2008/12/25(木) 00:32:19ID:lTYGyE3i
非公式情報サイト10回読破して来い
0626名前は開発中のものです。2008/12/25(木) 01:47:33ID:LZR7eQes
何も置いてない部屋で「そのボールを四つ『A』って書いてある箱に入れといて」なんて言われても困るでしょう。
カラの入れ物を前もって用意しておかなきゃいけない
初期値定義なんて難しく(?)いうと混乱するかもしれないけど、
要は使いたい変数があるなら数値代入とかする前に数値0で変数を用意しておけ、ってこと。

オブジェクト「箱」の変数Aに+2とかしたいんだったら
「箱」のクリエイトイベントかどこかに「変数Aを0として用意」しておかないとAが見当たらないなんてことになってエラーが起きる。
0627名前は開発中のものです。2008/12/25(木) 19:40:35ID:wKjFbyzV
>>624
前は何故かGM5から7に変えたらできるようになったから
解決と思ってました・・
>>626
オブジェクトが作られたときに発生するイベントに変数のアクションで
変数を0にして入れたら
解決しました。 教えてくれて助かりました。
ありがとうございます。
0628名前は開発中のものです。2008/12/25(木) 23:16:41ID:FQPSIRUG
イベントとアクションで書いたものをGMLコードとして見ることはできますか?
0629名前は開発中のものです。2008/12/25(木) 23:56:07ID:lTYGyE3i
ObjectのShow Informationってボタンで見れたような気がする
0630名前は開発中のものです。2008/12/26(金) 15:57:01ID:PhPwcMia
これってコンピューター言語を使って自分でプログラム組めたりするの?
それと他のソフトとリンクしたりできる??
そういうのを後々やっていきたいんだけど
0631RMT-WM2008/12/26(金) 16:33:47ID:K4aSBGcm
<a href="http://blog.rmt-wm.com">RMT−WMのブログ</a> ページへようこそ!
0632名前は開発中のものです。2008/12/26(金) 19:46:25ID:KU6Gan+K
>>629
やっぱそれぐらいしかないすか
0633名前は開発中のものです。2008/12/26(金) 21:37:08ID:L5Xtp1pR
>>630
GameMaker だけでは、Windows APIやプログラミング言語用のライブラリを直接使うようなプログラムは無理。
あくまでゲーム製作用ツールだからね。
ほかのソフトというか、ほかの言語(C++とか)で作ったDLLを呼び出すことは可能なので、
自作プログラムや、自作DLLで制御可能な他のソフトとの連携は可能。

なもんで、WindowsAPI とリンクさせることももちろん可能で、
例えばダイアログボックスをつくって、
そこからGameMakerでつくった自作ゲームに制御を加えるなんてことも出来る。

もちろん、Windowsプログラミングの知識がそれなりに必要。
流行の(?) .NET との連携は難しそうだね。
0634名前は開発中のものです。2008/12/26(金) 21:38:56ID:L5Xtp1pR
追記。DLLを扱える機能は Pro バージョンのみです。
0635名前は開発中のものです。2008/12/26(金) 22:56:29ID:SuoE1taa
MPのようなゲージを作って、MPが10以上の時にボタンを押すと
MPを10消費して飛び道具が撃てるという設定を作りました。
その結果、何故か描写されているMPゲージが10以下にならず(もちろん内部も)、打ち放題になってしまう現象が起きました。
これのほかにはMPは以下にならない程度しかMPに関連する変数を弄っていないのですが何がいけないのでしょうか。
0636名前は開発中のものです。2008/12/26(金) 23:11:14ID:SxF5ePcK
>>635
普通そういうのは実際のソース見なけりゃ答えられん。が、もし

If MPが10以上なら
 MPを10減らす
飛び道具を撃つ

みたいに組んでるなら

If MPが10以上なら
 ▲<Start of block>
 MPを10減らす
 飛び道具を撃つ
 ▼<End of block>

こう囲め。
0637名前は開発中のものです。2008/12/27(土) 00:34:43ID:zgTmgbXH
スプライトを透過させたい時に透過を選ぶとドット絵に穴があいたような感じになりますが
ああではなく後ろの色が映るいわゆる半透明にしたいのですが可能でしょうか
0638名前は開発中のものです。2008/12/27(土) 01:12:00ID:Glw8dwT3
>>637
単純に画像全体を半透明にしたいならどのverでもOK(未レジストでも)
スプライトのalphaプロパティを弄れば良い

ピクセルごと透明度が異なるような表現(例えば輪郭にアンチエイリアス)がしたいなら
ver6以降のレジスト版か、あるいは外部DLLを使えばver6以前のGMでも可能かも
ついでに確かver7レジスト版から32bitPNGが扱えたはず
0639名前は開発中のものです。2008/12/27(土) 15:43:46ID:bMiIzurr
アクションゲームを作っています。
フォーラムなどを参考にしてジャンプして地面に着地などはできるようになったのですが、
ジャンプ中やダッシュ中に障害物に当たると(毎回起こるわけではないのですが)コリジョンの設定が悪さをしているのか遥か上空に吹っ飛んだりあらぬところにワープしてしまいます。
障害物は上に乗れるので親を地面と同じにしています。
横移動やジャンプ中の接触(上や横)に対するコリジョンはどう設定すればいいのでしょうか。バージョンは5.3です
0640名前は開発中のものです。2008/12/27(土) 19:56:55ID:zgTmgbXH
>>638
できました、ありがとう

ついでにもう一つ質問です
キーボードを押しっぱなしの時にアクションを起こしているのですが
特定状況下で「プレイヤーはキーを押しっぱなしだけど内部ではそのキーは押されていない」と言う処理を行いたいのです。
これは可能でしょうか。
0641名前は開発中のものです。2008/12/27(土) 21:54:29ID:mqdpfh1K
>>639
ソース見なきゃわからん
■ このスレッドは過去ログ倉庫に格納されています