トップページ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/
0002名前は開発中のものです。2008/05/11(日) 01:43:10ID:PRhlwPyW
《Game Makerの特徴》
@ コリジョン(当たり判定)/スプライト/マップ/サウンド再生など、2Dゲーム作成にかかせない機能が充実
@ なにかと便利なイメージエディタを内蔵
@ プログラミングの知識はあってもなくてもよい
@ *.exe(単体実行可能)形式でゲームを出力できる
@ 作ったゲームは自己責任の元で自由に配布できる(作ったゲームを売る場合のライセンス料さえ不要!)
@ キーボード、マウス、ジョイスティックからのキー・ボタン入力をサポート
@ イベントドリブン型なのでスマートにゲームを構築できる
@ 組み込みスクリプト言語"GML"により、さらに細かい処理が可能
@ エンジンはDirect X

※有料登録(15ユーロ)するとゲーム起動時のロゴ表示が消えて3Dやエフェクト機能などが追加されますが、基本的に無料で充分使えます。

《Game Makerの欠点》
@ 英語ソフトなので、英語が読めないととっつきにくい
@ ツクール類とは違い、ゲームの"動き"から設計しなければならない(それがまた長所でもある)
0003名前は開発中のものです。2008/05/11(日) 01:43:51ID:PRhlwPyW
《豆知識》
Game Makerの作者であるMark H. Overmars氏はオランダの超名門大学"Utrecht"大学の教授で、主にゲームデザインについて研究されています。
参考: ttp://www.cs.uu.nl/people/markov/

《このスレの掟》
・Game Makerの略称はGMとする
・いきなり、「こんな素材ありませんか?」系の書き込みは避ける → 素材スレに行きましょう
・質問する場合には、「Game Makerのバージョン」「GMLを使えるか否か」をなるべく記す。
 (必要に応じて、「ビデオメモリ容量」や「DirectXのバージョン」などを書くとなおよい)

現在主に使われてるGame Makerのバージョンには5.3Aと6.xがありますが、
5.3AはGame Maker 5.x系列の最終安定リリース版で、Game Maker 6.xは今のところ開発段階にあります。

●Game Maker 5.3A ダウンロード先:
 ttp://www.gamemaker.nl/old.html
●Game Maker 6 ダウンロード先:
 ttp://www.gamemaker.nl/download.html

5.3Aと6.xの詳しい相違点については以下を参照のこと:
ttp://gamemaker.main.jp/modules/smartfaq/faq.php?faqid=1
0004名前は開発中のものです。2008/05/11(日) 01:49:44ID:PRhlwPyW
【Gamemaker 6 日本語ヘルプファイル】

ttp://www.geocities.jp/hogehige2005/
0005名前は開発中のものです。2008/05/11(日) 01:51:35ID:PRhlwPyW
ごめん、前スレがそのままだった


前スレ:【2D】ゲーム作成ツールGameMaker part2【マンセー】
http://pc11.2ch.net/test/read.cgi/gamedev/1121126627/

前前スレ: 【2D】ゲーム作成ツールGameMaker【マンセー】
http://pc8.2ch.net/test/read.cgi/gamedev/1087068523/
0006名前は開発中のものです。2008/05/11(日) 01:57:21ID:ngsHwQAh
>>1-3
乙っす、自分もスレ立てしようとか思ってて追加情報とか書いてたら立ってたようなので・・・
んで、なんというか・・ちょこっと追加

初代スレ: 【2D】ゲーム作成ツールGameMaker【マンセー】
http://pc8.2ch.net/test/read.cgi/gamedev/1087068523/
前スレ:【2D】ゲーム作成ツールGameMaker part2【マンセー】
http://pc11.2ch.net/test/read.cgi/gamedev/1121126627/

●Game Maker まとめWiki
(過去ログから質問をジャンル別にまとめてあったり、関数ヘルプなど)
 ttp://www.wikihouse.com/GameMaker/index.php
0007名前は開発中のものです。2008/05/11(日) 01:59:26ID:ngsHwQAh
>>5
あうあうでしゃばってすません
0008名前は開発中のものです。2008/05/11(日) 02:10:15ID:ngsHwQAh
とかいいつつもう一つ追加

○現在主に使われてるGame Makerのバージョンには5.3Aと6.1A及び7.xのいずれか

現状の最新バージョンは7.0です。
●Game Maker 7 ダウンロード先:
 http://www.yoyogames.com/gamemaker/try
 ダウンロードにはサイト登録が必要
0009名前は開発中のものです。2008/05/11(日) 15:38:01ID:cmOvm32X
前スレ終わりました。
なので、ここで続きの質問をさせていただきます。
ゲームオプションでマウスを消すとはどういう風にすればいいのでしょうか
なお、7を使ってるので英語で読めません。。
Global Game settingsって奴の中にあるのでしょうか?
具体的にご教授お願いします。
0010名前は開発中のものです。2008/05/11(日) 16:01:38ID:/qP9TRX5
Global Game Setting > Graphicsタブ の Display cursor のチェックボタンをはずす。
0011名前は開発中のものです。2008/05/11(日) 18:11:22ID:cmOvm32X
>>10
了解です。ありがとうございます。
0012名前は開発中のものです。2008/05/11(日) 18:39:07ID:cmOvm32X
マウスの方は上手くいきました。
しかし、マウスカーソルの位置に向かって銃を構えた画像に変更するのが、
上手くいきません。。
レジストしてない場合、コードを書く必要があるけど
向きごとに別々にスプライトがあるのかそれともフレームが分かれてるのか、
全部で何方向あるのかとかで対応が違う。
まあ、何方向でも構わないからなるべくスムーズにしたいというのなら
>1. スプライトエディタで Animation > Rotation Sequenceの機能を使って
>360°分回転させたイメージを作る(36フレームくらいがおすすめ)
>2. StepイベントでVARアクションを使って次の変数を設定
>image_single = direction / 360 * image_number
これをすると一度はその方向を向きますが、後はまったく反応してくれません
0013名前は開発中のものです。2008/05/11(日) 19:26:43ID:cmOvm32X
追記
一応自分なりにこれなら出来るんじゃないだろうかっと思う程度まで考えて、
その銃を構えるキャラクターのSpriteを45度の角度づつ計8個(1.270°2.235°3.180°4.135°5.90°〜方向に銃を構える)
マウスポインタの位置がキャラクターに対してどの角度内にいるかでSpriteを変更したいと思います。
あと、Test Expressionで一文ぐらいなら出来ると思います。。
よろしくお願いします。
0014名前は開発中のものです。2008/05/11(日) 22:15:44ID:cmOvm32X
Step Event:
if at position (1 <= x <= 333,-3 <= y <= -999) there is object obj_p001
set the sprite to spr_k001_08 with subimage 0 and speed 1
else
if at position (0,-1 <= y <= -999) there is object obj_p001
set the sprite to spr_k001_01 with subimage 0 and speed 1
else
if at position (-1 <= x <= -333,-3 <= y <= -999) there is object obj_p001
set the sprite to spr_k001_02 with subimage 0 and speed 1
else
if at position (-333 <= x <= -1,0) there is object obj_p001
set the sprite to spr_k001_03 with subimage 0 and speed 1
else
if at position (-333 <= x <= -1,1 <= y <= 999) there is object obj_p001
set the sprite to spr_k001_04 with subimage 0 and speed 1
else
if at position (0,1 <= y <= 999) there is object obj_p001
set the sprite to spr_k001_05 with subimage 0 and speed 1
else
if at position (1 <= x <= 333,3 <= y <= 999) there is object obj_p001
set the sprite to spr_k001_06 with subimage 0 and speed 1
else
if at position (1 <= x <= 333,0) there is object obj_p001
set the sprite to spr_k001_07 with subimage 0 and speed 1

この形に組みました。
(GMLでなく普通にです)
何となく、自分のしたいことは表せたのですが、一切反応してくれませんでした。。
間違っている所やこうしたらいいと言う意見をお待ちしております。。。
何度も何度も度々すみません。。
0015名前は開発中のものです。2008/05/11(日) 23:56:50ID:AX4c16UA
スプライト8枚じゃなくて、1枚のスプライトでサブイメージ8枚にする
(1番目が右向き、2番目が右上、3番目が上、……と0°から反時計回りに並べる)
で、Stepイベントで
image_singe = point_direction(x, y, mouse_x, mouse_y) / 45
と設定すればいけるはずだけど。
(厳密に言えば、image_singleはGM6以降では廃止されているので、
image_indexを設定してimage_speedを0にするのが正しい)

ちなみにどうしてもスプライト別々でやりたいなら、
変数を一つ設定しておいて
set the variable direction to point_direction(x, y, mouse_x, mouse_y)
if expression (direction < 22.5 || direction >= 337.5) is true // 8角形に「?」のアイコンを使う
set the sprite (右向きのスプライト)
if expression (direction >= 22.5 && direction < 67.5) is true
set the sprite (右上のスプライト)
if expression (direction >= 67.5 && direction < 112.5) is true
set the sprite (上向きのスプライト)
……(中略)
if expression (direction >= 292.5 && direction < 337.5) is true
set the sprite (右下のスプライト)

みたいな感じに判定していく。ここまでくるとGML書いてるのとあまり変わらんけど、
アクションだと複数条件の組み合わせはうまく表現できないからね。
0016名前は開発中のものです。2008/05/12(月) 00:15:01ID:Nz3aygB6
条件文が意味不明だ。なぜ、Check Object を使うのか。
条件にあるxとyの値が決め打ちなのも意味不明。

君がやりたいことは、
・マウスの方向によって画像を変更する
なのだろう?
なら、「マウスの方向」が条件になるはずではないか。マウスの座標は mouse_x mouse_y で知ることができる。
そして、自キャラから見たマウスの方向は、point_direction() という関数で知ることができる。
アイコンによる設定の説明は面倒なので、コードだけ書いとく。(Varアクションと TestExpression でできるけど)
ステップイベントにExecute Code アクションを追加して、中身を下のやつをコピペしてみ。
spr_k001_xx は向きにあわせたものに直してくれ。

direction = floor(point_direction(x,y,mouse_x,mouse_y)+22.5);
if (direction>=0 && direction <45) { //右向き
sprite_index = spr_k001_xx;
} else if (direction>=45 && direction <90) { //右上
sprite_index = spr_k001_xx;
} else if (direction>=90 && direction <135) { //上
sprite_index = spr_k001_xx;
} else if (direction>=135 && direction <180) { //左上
sprite_index = spr_k001_xx;
} else if (direction>=180 && direction <225) { //左
sprite_index = spr_k001_xx;
} else if (direction>=225 && direction <270) { //左下
sprite_index = spr_k001_xx;
} else if (direction>=270 && direction <315) { //下
sprite_index = spr_k001_xx;
} else if (direction>=315 && direction <360) { //右下
sprite_index = spr_k001_xx;
}
0017名前は開発中のものです。2008/05/12(月) 00:15:38ID:Nz3aygB6
おわ、リロードすればヨカタ.... orzorz
0018名前は開発中のものです。2008/05/12(月) 01:16:43ID:ikz1QGUi
>>15 >>16
返答ありがとうございます。
おお、出来ました
お二人ともありがとうございました。
ではまたいじってきます^^
0019名前は開発中のものです。2008/05/12(月) 01:30:34ID:RmZAj2l+
プリミティブでテクスチャを綺麗に台形に表示するってのはできないのかね……

三角形単位だとやっぱ辛いか
0020名前は開発中のものです。2008/05/12(月) 02:07:25ID:TpSXp6LY
>>19
三角形単位だと歪むね・・・。
64x64で、上辺32、下辺64、高さ64の等脚台形で、力技でこんなのやってみた。
比較的ゆがまないが、多数表示するのには向いていないだろうね

draw_primitive_begin_texture(pr_linelist,texid);
for (i=0;i<64;i+=1) {
draw_vertex_texture(16-i*16/63,i,0,i/63);
draw_vertex_texture(47+i*16/63,i,1,i/63);
}
draw_primitive_end();
0021名前は開発中のものです。2008/05/12(月) 02:38:35ID:ikz1QGUi
>>16さんの文章を応用して、弾もマウスの方向によって変えたいのですが、
どう書き換えたらいいでしょうか。。書き換えていただけませんか?
0022名前は開発中のものです。2008/05/12(月) 02:41:29ID:ikz1QGUi
あ、あとしっかりとマウスの方向に向かって回るようにしたら中心を動かすことになったので
動かしたのですが、そしたら弾の出る場所がおかしくなりました。。
どうしたら前のように銃口の座標から撃てるでしょうか
0023名前は開発中のものです。2008/05/12(月) 03:03:27ID:4cPaCS6e
>>ID:ikz1QGUi
いいかげんにしろ。
「書き換えていただけませんか?」とか、失礼すぎ。人をツールのように扱うなよ。
あと、基本的なことが理解できてないようだから、
>>1の非公式サイトを読みながら、最低一ヶ月試行錯誤しろ。
今までの質問を解決する材料は、全て書いてあるし。
0024名前は開発中のものです。2008/05/12(月) 09:26:48ID:RmZAj2l+
>>20
やっぱり簡単にはいかないのかな

弾幕シューティングの背景にするには軽くないといけないし……

四角面を張れれば簡単なんだけどなぁ

もうちょっと研究してきますです
0025名前は開発中のものです。2008/05/12(月) 15:43:35ID:ikz1QGUi
>>23
すみません。。。以後頑張ってきます。。
0026名前は開発中のものです。2008/05/12(月) 20:15:49ID:3BNN/6ib
>>25
こいつアホだろ
0027名前は開発中のものです。2008/05/12(月) 20:18:50ID:5kQyHDOM
>>26
・・・何いってんの?
0028名前は開発中のものです。2008/05/12(月) 20:57:52ID:IGlYgd9c
こんな過疎板って、無闇な批判が飛んでくるとは
GMもそれなりに知名度を上げてきたって事かねぇ、TonyuやZGE出し抜いてよくまぁ…
0029名前は開発中のものです。2008/05/13(火) 00:13:26ID:jNkfDGaf
すいません、空気を読まずに質問させてください。

特定のボタンを押すと、前オブジェクトの動作が止まって
メニューが表示され、メニュー画面操作のみ受け付けるような
動作をさせたいと考えているのですが
いまいち、簡単な方法が思いつきません。

何か良い方法はありませんでしょうか?
0030名前は開発中のものです。2008/05/13(火) 00:14:04ID:jNkfDGaf
>>29
「前」じゃなくて「全」の間違いでした…
0031名前は開発中のものです。2008/05/13(火) 10:25:49ID:yM+gChpv
>>29
ポーズメニューみたいな感じなのかな。

それなら私が良く使う方法を一つ。


元のルーム(ゲーム部分)のルーム設定を「持続する」にしておいて、背景色を描画してないルーム(ポーズ部分)に移動する。

再描画されないのでメニューの後ろにだけウィンドウか何かを描画しておかないといけないけど。

元のルームに戻ればそのまま動作するのでそれっぽく見えるはず。

わかりにくくてゴメン。
0032名前は開発中のものです。2008/05/14(水) 01:04:12ID:+oaQcg1C
direction = floor(point_direction(x,y,mouse_x,mouse_y)+22.5);
if (direction>=0 && direction <45) { //右向き
sprite_index = spr_k001_xx;
} else if (direction>=45 && direction <90) { //右上
sprite_index = spr_k001_xx;
} else if (direction>=90 && direction <135) { //上
sprite_index = spr_k001_xx;
} else if (direction>=135 && direction <180) { //左上
sprite_index = spr_k001_xx;
} else if (direction>=180 && direction <225) { //左
sprite_index = spr_k001_xx;
} else if (direction>=225 && direction <270) { //左下
sprite_index = spr_k001_xx;
} else if (direction>=270 && direction <315) { //下
sprite_index = spr_k001_xx;
} else if (direction>=315 && direction <360) { //右下
sprite_index = spr_k001_xx;
}

前に教わったこの文章を応用して、プレイヤーキャラクターを追うキャラが、
プレイヤーキャラクターのいる角度によって画像を変えたいのですが、どこをどう返ればいいでしょうか。
あと、前は何度も何度も質問してすみませんでした。挙げ句の果てに、書き換えて欲しいなどと。。
以後頑張りますは以後自分で頑張りますの間違いです。
色々すみません。。
0033名前は開発中のものです。2008/05/14(水) 02:17:22ID:0kVdrtr1
「マウス」が「プレイヤー」になっただけだろ。
どこがそれに当たる場所なのか、それぞれの文が何をしているのか分かってる?
自分で原理を理解しないと、何から何まで人に作ってもらうことになるよ。
0034名前は開発中のものです。2008/05/14(水) 07:44:37ID:+PP6HbGL
>>31
なるほどぉ、そんな方法が。。。
ありがとうございます。
0035名前は開発中のものです。2008/05/14(水) 09:38:29ID:+oaQcg1C
>>33
floor(point_direction(x,y,mouse_x,mouse_y)+22.5);
ここだと自分は思ってます。
ただ、どう文章をおけばいいのかわからなくて。。
0036名前は開発中のものです。2008/05/14(水) 10:10:14ID:+oaQcg1C
direction = obj_k001_01;
if (direction>=0 && direction <45) { //右向き
sprite_index = spr_k002_07;
} else if (direction>=45 && direction <90) { //右上
sprite_index = spr_k002_06;
} else if (direction>=90 && direction <135) { //上
sprite_index = spr_k002_05;
} else if (direction>=135 && direction <180) { //左上
sprite_index = spr_k002_04;
} else if (direction>=180 && direction <225) { //左
sprite_index = spr_k002_03;
} else if (direction>=225 && direction <270) { //左下
sprite_index = spr_k002_02;
} else if (direction>=270 && direction <315) { //下
sprite_index = spr_k002_01;
} else if (direction>=315 && direction <360) { //右下
sprite_index = spr_k002_08;
}

これで一応できました。
ありがとうございました
0037名前は開発中のものです。2008/05/14(水) 15:15:31ID:jcqbfyhB
direction : インスタンスの方向をあらわすローカル変数 0〜360に丸められる。
floor(x) : x を超えない最大の整数を返す。 例 : floor(3.5) だったら3 floor(-2.5) だったら-3
point_direction(x1,y1,x2,y2) : 座標(x1,y1)から座標(x2,y2)を見たときの角度。 例 : point_direction(0,0,1,-1) だったら 45

floor(point_direction(x,y,mouse_x,mouse_y)+22.5)
っていうのは、floor() の中に point_direction(x,y,mouse_x,mouse_y)+22.5 っていうの入っている。
さらに、point_direction(x,y,mouse_x,mouse_y)+22.5 で角度を表しているということになる。
つまり、インスタンスのいる位置(x,y)から、マウスの座標(mouse_x, mouse_y)を見たときの角度を求めていて、 それに22.5度を加えている。
で、その角度を floor()によって整数にしているわけ。なぜ22.5を足すのかは、22.5を消して試してみればわかる。多少感覚とズレるはずだ。
どうしてズレるのかは自分で考えろよ?わからなければ、数学の勉強をしろ。
で、下に続くif文は全て、 directionの値で場合分けして、表示するスプライトを指定してるものが書かれているだけ。

>>36でやってる一行目の
direction = obj_k001_01;
っていうのは、そのインスタンスの direction を obj_k001_01 と同じにするっていう意味になってるの。
それで解決したなら別にいいんだけど、俺にはぜんぜんトンチンカンに見えるのだが。

お願いだから>>1の非公式情報サイトを読んできてくれ。サイト内の「検索」で全てでてくる。
今書いたことも。ドキュメントのところを探せ。
0038名前は開発中のものです。2008/05/14(水) 17:56:24ID:+oaQcg1C
>>37
色々とすみません。。
ある程度ましになるまで見てきます。
0039372008/05/14(水) 19:29:18ID:koT5HTYt
すまん、訂正させてくれ…
>>37 で「direction を obj_k001_01 と同じにする」
とか書いてるけど、間違ってるな。
obj_k001_01 のdirectionと同じな値になるとか勘違いしてた…。 obj_k001_01.direction と書けば、そういう意味になるが。

正確に言うと、obj_k001_01 っていうのはオブジェクト名なんだろうが、
これはある数値の定数になっている。(そのオブジェクトをリソースに追加したときに決まる)
この数値がそのまま direction に代入されているので、direction の値はそのまま固定値になってしまっている。
0040名前は開発中のものです。2008/05/16(金) 01:14:43ID:a1mpKMyg
レジストしたいと考えてるんですが、簡単な方法ってないものでしょうか?
0041名前は開発中のものです。2008/05/16(金) 22:37:09ID:mTen8rcq
金払う
0042名前は開発中のものです。2008/05/17(土) 11:05:14ID:iuDmkXQZ
過去スレにそれっぽいのなかったっけ?
0043名前は開発中のものです。2008/05/17(土) 13:11:22ID:4t7O5zMm
http://www.ice.ci.ritsumei.ac.jp/~ruck/CLASSES/SOUSEI1/gmaker_japan.htm
ここのChapter14 ゲーム配布に売ってもかまわないと書いてあるが、これ本当?
■ このスレッドは過去ログ倉庫に格納されています