【2D】ゲーム作成ツールGameMaker part3【マンセー】
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/05/11(日) 01:41:47ID:PRhlwPyW●本家(英語)
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@ コリジョン(当たり判定)/スプライト/マップ/サウンド再生など、2Dゲーム作成にかかせない機能が充実
@ なにかと便利なイメージエディタを内蔵
@ プログラミングの知識はあってもなくてもよい
@ *.exe(単体実行可能)形式でゲームを出力できる
@ 作ったゲームは自己責任の元で自由に配布できる(作ったゲームを売る場合のライセンス料さえ不要!)
@ キーボード、マウス、ジョイスティックからのキー・ボタン入力をサポート
@ イベントドリブン型なのでスマートにゲームを構築できる
@ 組み込みスクリプト言語"GML"により、さらに細かい処理が可能
@ エンジンはDirect X
※有料登録(15ユーロ)するとゲーム起動時のロゴ表示が消えて3Dやエフェクト機能などが追加されますが、基本的に無料で充分使えます。
《Game Makerの欠点》
@ 英語ソフトなので、英語が読めないととっつきにくい
@ ツクール類とは違い、ゲームの"動き"から設計しなければならない(それがまた長所でもある)
0003名前は開発中のものです。
2008/05/11(日) 01:43:51ID:PRhlwPyWGame 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:PRhlwPyWttp://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乙っす、自分もスレ立てしようとか思ってて追加情報とか書いてたら立ってたようなので・・・
んで、なんというか・・ちょこっと追加
初代スレ: 【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あうあうでしゃばってすません
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:/qP9TRX50011名前は開発中のものです。
2008/05/11(日) 18:11:22ID:cmOvm32X了解です。ありがとうございます。
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:cmOvm32Xif 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(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条件にある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:Nz3aygB60018名前は開発中のものです。
2008/05/12(月) 01:16:43ID:ikz1QGUi返答ありがとうございます。
おお、出来ました
お二人ともありがとうございました。
ではまたいじってきます^^
0019名前は開発中のものです。
2008/05/12(月) 01:30:34ID:RmZAj2l+三角形単位だとやっぱ辛いか
0020名前は開発中のものです。
2008/05/12(月) 02:07:25ID:TpSXp6LY三角形単位だと歪むね・・・。
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どう書き換えたらいいでしょうか。。書き換えていただけませんか?
0022名前は開発中のものです。
2008/05/12(月) 02:41:29ID:ikz1QGUi動かしたのですが、そしたら弾の出る場所がおかしくなりました。。
どうしたら前のように銃口の座標から撃てるでしょうか
0023名前は開発中のものです。
2008/05/12(月) 03:03:27ID:4cPaCS6eいいかげんにしろ。
「書き換えていただけませんか?」とか、失礼すぎ。人をツールのように扱うなよ。
あと、基本的なことが理解できてないようだから、
>>1の非公式サイトを読みながら、最低一ヶ月試行錯誤しろ。
今までの質問を解決する材料は、全て書いてあるし。
0024名前は開発中のものです。
2008/05/12(月) 09:26:48ID:RmZAj2l+やっぱり簡単にはいかないのかな
弾幕シューティングの背景にするには軽くないといけないし……
四角面を張れれば簡単なんだけどなぁ
もうちょっと研究してきますです
0025名前は開発中のものです。
2008/05/12(月) 15:43:35ID:ikz1QGUiすみません。。。以後頑張ってきます。。
0026名前は開発中のものです。
2008/05/12(月) 20:15:49ID:3BNN/6ibこいつアホだろ
0027名前は開発中のものです。
2008/05/12(月) 20:18:50ID:5kQyHDOM・・・何いってんの?
0028名前は開発中のものです。
2008/05/12(月) 20:57:52ID:IGlYgd9cGMもそれなりに知名度を上げてきたって事かねぇ、TonyuやZGE出し抜いてよくまぁ…
0029名前は開発中のものです。
2008/05/13(火) 00:13:26ID:jNkfDGaf特定のボタンを押すと、前オブジェクトの動作が止まって
メニューが表示され、メニュー画面操作のみ受け付けるような
動作をさせたいと考えているのですが
いまいち、簡単な方法が思いつきません。
何か良い方法はありませんでしょうか?
0030名前は開発中のものです。
2008/05/13(火) 00:14:04ID:jNkfDGaf「前」じゃなくて「全」の間違いでした…
0031名前は開発中のものです。
2008/05/13(火) 10:25:49ID:yM+gChpvポーズメニューみたいな感じなのかな。
それなら私が良く使う方法を一つ。
元のルーム(ゲーム部分)のルーム設定を「持続する」にしておいて、背景色を描画してないルーム(ポーズ部分)に移動する。
再描画されないのでメニューの後ろにだけウィンドウか何かを描画しておかないといけないけど。
元のルームに戻ればそのまま動作するのでそれっぽく見えるはず。
わかりにくくてゴメン。
0032名前は開発中のものです。
2008/05/14(水) 01:04:12ID:+oaQcg1Cif (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なるほどぉ、そんな方法が。。。
ありがとうございます。
0035名前は開発中のものです。
2008/05/14(水) 09:38:29ID:+oaQcg1Cfloor(point_direction(x,y,mouse_x,mouse_y)+22.5);
ここだと自分は思ってます。
ただ、どう文章をおけばいいのかわからなくて。。
0036名前は開発中のものです。
2008/05/14(水) 10:10:14ID:+oaQcg1Cif (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:jcqbfyhBfloor(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色々とすみません。。
ある程度ましになるまで見てきます。
003937
2008/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:a1mpKMyg0041名前は開発中のものです。
2008/05/16(金) 22:37:09ID:mTen8rcq0042名前は開発中のものです。
2008/05/17(土) 11:05:14ID:iuDmkXQZ0043名前は開発中のものです。
2008/05/17(土) 13:11:22ID:4t7O5zMmここのChapter14 ゲーム配布に売ってもかまわないと書いてあるが、これ本当?
0044名前は開発中のものです。
2008/05/17(土) 13:25:09ID:iuDmkXQZライセンス読む限りでは制作したゲームは使用素材の規定を守っている限り、配布方法の制限は一切ないみたい。
プロジェクトファイルは販売してはいけないみたいなこと書いてあるけど、exeで出力したファイルならいいと思うよ。
0045名前は開発中のものです。
2008/05/17(土) 13:30:23ID:4t7O5zMmなるほど。調べてくれてありがとう。
0046名前は開発中のものです。
2008/05/17(土) 16:19:00ID:mUIUdkzkしないようにしたいんですが、方法はないでしょうか?
壁自身のsolid属性を変えると、他のOBJが落っこちてしまうし・・・
どうすればいいでしょうか?
0047名前は開発中のものです。
2008/05/17(土) 20:20:00ID:iuDmkXQZ特定のタイミングでだけ別のオブジェクトに変更するとか……
駄目だこれくらいしか浮かばないにゃー
0048名前は開発中のものです。
2008/05/17(土) 20:37:37ID:WkeQkIH/キーイベントやステップイベントでsolidオブジェクトに対する処理をしているなら、
無効にしたいときのフラグをたてて、条件分岐で処理を振り分ければいいと思う。
衝突イベントのところを変えたいとなると、ちょっと難しいかな。
solidオブジェクトとの衝突イベントでは、双方のインスタンスがそのステップで移動していたとしても、
インスタンスの位置がステップ開始時の座標(xprevious, yprevious)に自動で戻されてしまうから。
壁を無効にしたいときには、衝突イベント内で移動し直さないといけないことになる。
・・・いろいろ書いたあとにリロードしなおした。>>47のほうがスマートにできるかもね・・・。まあ、参考になればorz
0049名前は開発中のものです。
2008/05/17(土) 22:25:09ID:mUIUdkzkレスありがとうございます。
「Stepイベント」とかではなく、「衝突イベント」を作って動作させています。
ということは、やるべき事はSolid云々を考えるのではなく
「Stepイベント」内で「衝突イベント」と同じことをさせないといけないということですね…
いろいろ試してはみたんですが、Stepイベント内で条件指定すると
「衝突イベント」のようにうまくいかず、めり込んでしまいます・・・
多分、条件指定の方法がいけないんだと思います…
「Stepイベント」内で「衝突イベント」とまったく同じ動作をさせる条件ってありますでしょうか?
005048
2008/05/18(日) 02:22:11ID:eCUFmfOE>「Stepイベント」内で「衝突イベント」とまったく同じ動作をさせる条件ってありますでしょうか?
instance_place(x,y,obj)
っていう関数が一番近いかな・・・。
この関数を実行しているインスタンスが(x,y)に置かれたとき、objと重なっている状態なら真を返す関数だよ。
これをif文の条件に使うといいかもしれない。
えっと質問とは別に、さっき考えた自分ならこうするかもっていう方法も書いておくよ。
solidの衝突イベントでは、>>48で書かれているとおり
>インスタンスの位置がステップ開始時の座標(xprevious, yprevious)に自動で戻されてしまう
っていうのがあるんだけど、これを逆手にとって、
壁をすり抜けさせたい場合のみに、すり抜けさせるオブジェクトの通常ステップイベントの最後で、
xprevious = x;
yprevious = y;
とする。
そして、衝突イベントのところで、通常とすり抜けの条件分岐させて、
すり抜けのときは何もしないようにする。
この方法が汎用的かどうか不明だから、わからなかったら聞き流して。
005146
2008/05/19(月) 06:37:21ID:lUKR9rqpなるほど!
衝突イベントについて、分かってきた感じです。
いろいろと試してみようかと思います。
ありがとうございました。
0052名前は開発中のものです。
2008/05/20(火) 00:44:21ID:34XojH21他にレジスト購入代行してくれるところってありませんかねぇ?
海外サイトのクレジット決済、日本のと違って、どこにどう入れればいいのかサッパリっすorz
0053名前は開発中のものです。
2008/05/20(火) 03:24:54ID:D4oicTQ30054名前は開発中のものです。
2008/05/20(火) 09:13:24ID:3IvwgtXZとちょっと聞いてみる。
■ このスレッドは過去ログ倉庫に格納されています