トップページ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/
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
ソース見なきゃわからん
0642名前は開発中のものです。2008/12/27(土) 21:58:58ID:mqdpfh1K
>>640
理解力が無いから俺の想像だけど
例えば変数1の時はAキーを押すとアクションが発生するけど、変数が2の時はAキーを押しても発生しないって事で良いかな?

もしそうならキーを押すイベントでIf an exprssion is trueを使えば良いと思う
0643名前は開発中のものです。2008/12/28(日) 01:10:46ID:lQUrTnBK
ついに登場!アクションゲームツクール
http://www.famitsu.com/blog/tkool/2008/09/post_52.html

アクションゲーム制作の決定版!Multimedia Fusion2 国内販売推進委員会
http://www7a.biglobe.ne.jp/~bp-827z/mmf2/
http://hp.vector.co.jp/authors/VA036419/game.html
0644名前は開発中のものです。2008/12/28(日) 05:48:32ID:1w+FYaO/
なんか使ってるうちにアクションは全部スクリプトで処理になるよね?
管理と編集が楽になるよね?
0645名前は開発中のものです。2008/12/28(日) 15:22:43ID:cZXYtdqt
あえてアイコン方式で記述する意味がないからなあ
コードがかけなくても作れるってのを謳い文句にしてるけど
制約の中アイコン記述を覚えてもしょうがないんだよな
0646名前は開発中のものです。2008/12/28(日) 17:21:40ID:LlMEzWDN
ただ、スクリプト記述するよりもアイコンの方が処理が早い罠w
0647名前は開発中のものです。2008/12/28(日) 19:00:32ID:fT956MDj
アクションゲームで左右キーを押すとキャラが左右に動くのですが
坂道などでは段差でカクカクしたりしてしまいます。
なめらかに動かすには当たり判定や動きをどう設定すればいいでしょう。
0648名前は開発中のものです。2008/12/28(日) 20:37:31ID:cZXYtdqt
>>646
Scriptsは呼び出し自体が重いから差が顕著に出るけど
piece of code だとほとんど変わらないような気がする

>>647
ピクセル単位で当たり判定を取っていたりしないかな
矩形や簡易図形で当たり判定を取るようにすればよくなるんじゃないかと

少し上にもあったけど、当たり判定処理がうまくいかないとかは
○○のエラーがでますというのと違って、プログラムは良くも悪くも書いた通りにしか動かないから
周辺の情報を出さないと条件式を見直せぐらいしか答えようがなくなってくるよ
0649名前は開発中のものです。2008/12/28(日) 21:00:33ID:fT956MDj
正確な当たり判定を取るとキャラクターの足が動くたびに判定がおかしくなるのでとりあえず大きさに合わせて四角にしています。
足場も同様ですが斜めの床を作る際斜めにすると三角でマスクしても微妙なドットのせいでかくかくしてしまうのです。
06506462008/12/28(日) 23:34:43ID:LlMEzWDN
>>648
昔、timeGetTime()を呼び出すDLLを作って実験してみたことがあったんだ。
今また試しにやってみたところ、変数の代入なら varアイコンを使うより piece of code の方が早かった。
が、instance_create() の呼び出しは、アイコンの方が早かった。

即効作ったソース。
ttp://www3.uploda.org/uporg1890827.zip.html

06516462008/12/29(月) 00:02:49ID:gdKazmBS
ああ、忘れてた。
>>650 の受信pass : gamemaker
スレ汚しごめんなさい。
0652名前は開発中のものです。2008/12/29(月) 01:21:50ID:PIejyGZB
床のコリジョンを作っていますが
今の段階だと床に当たった時に起きるアクションと空中にある床に頭から接触したとき、
壁に横から接触したときのアクションが同じになってしまいます。
コリジョンを方向によってわける方法を教えてください
0653名前は開発中のものです。2008/12/29(月) 03:11:36ID:p4VZEUac
vspeed > 0 && y < other.y+18
ってんでどうかな
これは上からね
06546452008/12/29(月) 13:44:03ID:T1r41zQH
>>650
404・・・自分でも確かめられることなのでやってみた
repeat loop 20000 回でinstance_create()をGMのcurrent_timeで比較してみた
確かにアイコンの方が早いみたいですね。平均20msぐらい差が出ました
一応環境
XP SP3
Celeron M 1.3 GHz
GMのcurrent_timeの精度もあるので相対比較という感じです
0655濱田2008/12/29(月) 20:51:48ID:hLjua+tb
日本語訳の手に入れ方が分かりません。どうすればいいでしょうか?
0656名前は開発中のものです。2008/12/29(月) 21:44:28ID:quafeWvW
みんな買ってんの?
PROだとエフェクト楽しいのかな
0657名前は開発中のものです。2008/12/30(火) 02:43:25ID:Q8ag+4iF
やっぱり起動時のロゴ消えるのは大きいよな
俺も課金しようか悩んでる
0658名前は開発中のものです。2008/12/30(火) 13:00:28ID:u3BsZPuH
無料でプロ手に入れる方法なんていくらでも…
0659名前は開発中のものです。2008/12/30(火) 14:57:33ID:Q8ag+4iF
偽善とかそんなんじゃなく純粋に割れ厨は氏ね
0660名前は開発中のものです。2008/12/30(火) 19:05:51ID:21if5Swa
質問でもないのにageてる程度の奴だからな
0661名前は開発中のものです。2008/12/30(火) 20:10:04ID:8yR978O1
色々調べてみたのですが
5.3のレジストは6よりやれることが少ないんですね。
日本語パッチがあるからこっちで作り始めてしまったのですが・・・
0662名前は開発中のものです。2009/01/01(木) 09:23:17ID:jS882HBI
5.3Aと7は起動するのに6は何故か起動できない(エラーも起きずクリックしても何も起きない)
vistaには対応してないのかな…
0663名前は開発中のものです。2009/01/01(木) 10:46:03ID:Pq+98cZJ
どうせ日本語ヘルプばっか見ることになるから7でおk
0664名前は開発中のものです。2009/01/01(木) 11:38:55ID:5u1JBYki
上の方すいません、バージョン7でも日本語ヘルプが見れるのでしょうか?初心者なのでよく知らないのですが。
0665名前は開発中のものです。2009/01/01(木) 12:39:45ID:V+gx/at8
>>664
上の方じゃないけど

5.3→6: 言語仕様や名前が一部変更になった
6→7: 機能が追加されただけで関数・プロパティの名称は同じ

なので、7を使うにしてもver6の日本語ヘルプを見ることが多い
ver7の英語ヘルプを読むのは新しく追加された機能を使う時くらい

ちなみに今でも5.3が使われる理由は
・特定の環境では6以降より動作が軽い
・未レジストでも日本語が表示できる
0666名前は開発中のものです。2009/01/01(木) 13:32:58ID:jS882HBI
5.3レジストでも3Dゲームは作れますか?
0667名前は開発中のものです。2009/01/01(木) 13:55:53ID:Pq+98cZJ
>>664
>>665が全部説明してくれた、thx

Scriptsは製作中は便利だから使うとして
最終的にはpiece of codeにするのがいいのか
0668名前は開発中のものです。2009/01/01(木) 17:20:51ID:KI4xLbpe
Scriptsをどうするかはゲームや状況によりけり。重くならなければそのまま使って問題ないよ
最後にScripts部分をpiece of code に置き換えるとかは
GMでマクロが使えないからバグが増えるのでやっちゃらめぇ

Scriptsのように実態を伴わないで関数だけ使いたいならObjectをクラスのように扱って
event_perform_object()で目的のイベント関数だけ動かせば
管理しにくいけどScriptsよりは早くなる
0669名前は開発中のものです。2009/01/03(土) 05:35:49ID:DeK5ZSwj
二人同時以上もので、複数のプレイヤー(オブジェクト)から
同一のinstance_create使うときってどうしてますか?
例えばSTGで各自機からの固有の情報を参照する弾を生成する場合
1プレイヤーのみならglobalや、インスタンス参照したりしてできるのですが
複数プレイヤー同時となると、どうすれば良い方法になるのかわからないです

{
nnn = instance_create(100,100,ball);
nnn.speed = 8;
}

これも上手くいかなかったのでプレイヤー1とプレイヤー2でglobal変数を1個ずつ用意して
弾側でそれを参照してif文でわけています

何か良い方法があればご教授お願いします
0670名前は開発中のものです。2009/01/03(土) 11:35:14ID:oLIty3o+
そういう時こそ配列を使うといいよ
0671名前は開発中のものです。2009/01/03(土) 13:09:48ID:3LsZl9GN
>>669
よくわからんけど、自機が発した弾が発射元の自機の情報を得たいってこと?

自機弾の発射するイベントで、instance_create()が返す弾のインスタンスIDが使えるから、
{
bullet = instance_create(x,y,objBullet);
bullet.status1 = status1; // bulletインスタンスにstatus1変数を用意し、値に自機の情報である status1 を代入。
bullet.status2 = status2;
...
}
とやって、自機インスタンスのステータスを弾のインスタンスに設定したりするのもいいし、
上記と同様の箇所で
{
bullet = instance_create(x,y,objBullet);
bullet.myShipID = id; // id は自機のインスタンスID
}
とやって、自機インスタンスのIDを、弾側のインスタンスの変数に教えてあげるもの手。
弾側で自機のインスタンスIDが分かってれば、ステータスを参照するのが可能になる。

ただし、上記のいずれの方法も、弾側の生成イベントが終わってから変数が設定されるので、
弾側の生成イベント中でこれらの値を利用しようとするとエラーになる。
これを解決するには、弾の自機情報を元に行う初期化をユーザーイベント(下記例では0番)に記述し、
変数設定後にユーザーイベントを呼び出す方法がある。
{
bullet = instance_create(x,y,objBullet);
...(bulletインスタンスの変数に発射もとの自機の情報を設定する)
with(bullet) {
event_user(0); // 生成した弾に、ユーザーイベント0番を呼び出す
}
}
実装サンプル : ttp://www.mediafire.com/download.php?jhyy1yju1mt
0672名前は開発中のものです。2009/01/03(土) 14:38:31ID:ycNKPUB6
save gameのアイコンで保存したデータを
ロードしたら、どうもリスト構造は保持されない?みたいなんですが
これ、どうにかする方法ってないでしょうか。。

セーブ時別個にリストファイル作って
ロード時呼び出させないとダメなのかな?
06736692009/01/03(土) 14:55:46ID:DeK5ZSwj
>>671
丁寧な解説にサンプルまで用意して下さってありがとうございます

>ただし、上記のいずれの方法も、弾側の生成イベントが終わってから変数が設定されるので、
>弾側の生成イベント中でこれらの値を利用しようとするとエラーになる。

まさにこれで、解決方法がわからなかったので助かりました
これですっきりして進めそう&今後がかなり楽になりそうです
本当にありがとうございました
0674名前は開発中のものです。2009/01/03(土) 18:33:34ID:zGDz8aqy
>>672
game_saveの説明に詳しく書いてあるけど、Data structureやパーティクルの設定、
動的に作成したリソースなどはセーブされないので個別に保存する必要がある。
安直な方法としては、配列は保存されるから
セーブ前に配列にコピーしといてロード時に戻すとか。

ただ、たしかロードすると次のステップの先頭から開始されるので、
game_loadの後にコードを書いても実行されないという問題があった気がする。
だからgame_saveの前に何か変数を設定しておいて、saveの直後にクリアする。
で、ステップの先頭でその変数が設定されたままだったらloadされたと判断する、
みたいな小細工が必要だったかも。
0675名前は開発中のものです。2009/01/03(土) 19:40:26ID:PewRp2L1
GMで変数のサイズや型を調べる方法ってないの?
いまいちfile_bin系の使用方法が分からないんだけど・・・
0676名前は開発中のものです。2009/01/03(土) 20:37:48ID:0rv8QzLZ
>>675
GMでは、変数の型は数値か文字列かの2種類。
数値は倍精度実数型(52bitまでなら普通の整数として扱える)、文字は文字列型。
DLL に渡すときには、C言語で言うと、数値はdouble型、文字列型はchar配列の先頭ポインタとなる。

一方、file_bin系の読み書きは 1バイトずつしか出来ない。
2バイト、4バイトの数値を扱うなら、それなりのGMLコードを記述しないといけない。
特に書き込み時は、数値の下位8bit(1バイト)しか書き込まれないので注意が必要。

バイナリファイルに数値変数であるvalueの2バイト分を書き込むサンプル(リトルエンディアン方式)。

{
fileid = file_bin_open(filename, 1);// 1 は書き込みモード

file_bin_write_byte(fileid, value);
value = value >> 8;
file_bin_write_byte(fileid, value);
file_bin_close(fileid);
}
0677名前は開発中のものです。2009/01/03(土) 21:56:58ID:PewRp2L1
>>676
double オンリーでしたかどうもです

データを1バイト分で扱う必要がない以上
この辺の関数は自作したものを使ったほうがよさげですね
file mode も定数定義じゃなかったりこの辺は使うなってことなんだろうか・・・
06786722009/01/03(土) 23:20:24ID:ycNKPUB6
>674
詳しい解説有難うございます。
配列で作り直そうとしていたので、凄く助かりました。

その方法で作ってみることにします。
06796722009/01/04(日) 02:27:45ID:dtYqEfVG
正常に動作しました!!
改めて助言ありがとうございました。。

以前どなたかが言われていましたが、
配列サイズ取得できないのってかなり面倒ですねこれ。
0680名前は開発中のものです。2009/01/04(日) 11:43:45ID:UuaWwAF/
普通は配列サイズ決めてから容量確保して、それを超えたらエラー処理ってするから
配列サイズなんて問題にならないけどなあ

GMの配列サイズに気を使わなくてもいいようで
実はちゃんと気にしないと駄目な仕様が面倒な気がする
0681名前は開発中のものです。2009/01/07(水) 23:44:20ID:2vM9o/wg
垣根の垣根の曲がり角
子ヌコだ 子ヌコだ モフいヌコ
モフろうか モフろうよ
ヌコさん ぴいぷう ふにゃふにゃり
0682名前は開発中のものです。2009/01/07(水) 23:55:02ID:2vM9o/wg
プログラミングレベルが一歩進むと、動的確保が必要になってくる

特に家庭用
0683名前は開発中のものです。2009/01/08(木) 17:07:55ID:L4Sbt73m


ランダムが偏るんですけど

どうにかなりゃせんですか。


俺たちがランダムだ!とキメさせたいのに
起動一発目が
ほぼそれなので
ランダムのランダムが活きないの
ですが。
0684名前は開発中のものです。2009/01/08(木) 17:54:17ID:+zF/ao/Y
種はどうしてるの?
0685名前は開発中のものです。2009/01/08(木) 23:31:34ID:xiNZbAtm
gamemaker慣れると他の言語でゲーム作り難いね
そう考えるとやっぱりGMは分かり易いんだろうか
0686名前は開発中のものです。2009/01/08(木) 23:38:20ID:/gQ2mjV1
最初に慣れ親しんだ言語が使いやすいのなんて当然だろ。
0687名前は開発中のものです。2009/01/09(金) 07:42:45ID:JJE/kv3A
GMで作ったゲームを他の言語で再現してみるといい
0688名前は開発中のものです。2009/01/09(金) 20:28:00ID:uRUtQIex
考え方は同じ

使う関数や変な数が違うだけだ
0689名前は開発中のものです。2009/01/09(金) 22:43:32ID:t/SSlAFW
GIFアニメって使えるんですか?
普通にスプライトを開いてオブジェクトに貼っても動かないんだけど(画像が
0690名前は開発中のものです。2009/01/09(金) 23:08:55ID:XLTa+ag6
7で試したけど動いたよ
アニメーションスピードを設定していないとかgif規格があってないとか
その辺じゃないかな

普通にやって動くものを、普通にやったら動きませんというのは
禅問答みたいで答えに困るな
0691名前は開発中のものです。2009/01/10(土) 01:02:04ID:N7iHXgzT
ていうか「普通」って何だ

どの状態が「普通」なんだ


と流れるのがお約束

車もそうだ
普通って何だ
世の中がトラックだらけになったらトラックサイズが普通・一般的になるわけだ
じゃあ法的に「普通」になるのかってーと
そうでもない

じゃあ普通ってなんだ
って無限ループし、頭のスタックを使い果たして考えるのをやめてしまう

これがクラッシュである
0692名前は開発中のものです。2009/01/16(金) 01:08:09ID:/Ycxfhni
変数で、「Aが10か20のとき」とか「5〜15のとき」にアクションを実行したりするようにするにはifの部分をどのようにすればいいのでしょうか?
もう一つ、スプライトを半透明にするにはどこを弄ればいいのでしょうか。

5.3で、レジスト済です。
0693名前は開発中のものです。2009/01/16(金) 01:39:44ID:55t9b+oA
>>692
論理演算を学びましょう。
・「Aが10か20のとき」
Aが10のとき:A==10
Aが20のとき:A==20
ですので、この二つの条件を「または(OR)」で結べばよいのです。
この、「または」を表す記号は ||(←¥キーをシフトを押しながら入力すると出る文字を二つ)です。
したがって、
if ((A==10) || (A==20)) {
...
}
となります。
・「5〜15」のとき
これは、Aが5以上で「かつ(AND)」、Aが15以下である、と考えます。
この、「かつ」で結ぶ記号は、&& です。
したがって、
if ((A >= 5) && (A <= 15)) {
...
}
となります。この、AND(&&)とOR(||)は基本ですのでよく覚えておきましょう。

オブジェクトに設定したスプライトを半透明にしたければ、
ローカル変数 image_alpha を設定しましょう。
0.0(完全透過)〜1.0(透過無し)の間で指定します。
0694名前は開発中のものです。2009/01/16(金) 07:13:19ID:/Ycxfhni
なるほど、ありがとうございました。
0695名前は開発中のものです。2009/01/16(金) 12:22:33ID:GAxnBPVg
キャラの向いている方向が90度として
任意の方向、例えば315度に向かせる場合に
近い回転方向で徐々にそちらの方へ向くといった動作をさせたいんですが
どの用に書けばうまくいくのでしょうか?
0696名前は開発中のものです。2009/01/16(金) 18:15:06ID:UMDE1LJg
単純に、次の方向 > (現在の方向 + 180度) mod 360
の条件式で時計回り、反時計回りを考えればいいんじゃないか
0697名前は開発中のものです。2009/01/16(金) 20:01:52ID:P13I2TEi
単に大小関係で比較すると、0-360度をまたぐところでうまくいかないよ。
まず差を求めて、-180〜180の間になるよう変換してから符号で判定すればいい。

diff = 相手の向き - 自分の向き;
while (diff < -180) diff += 360;
while (diff > 180) diff -= 360; // この2行は diff=(diff+360+180)mod 360-180 でも可
if (diff < 0) 右に回る else 左に回る;

あと、回転速度が一定だと相手の方を向いた時に
ブルブル震えるって問題が起きがちだから、
目標との差が十分小さい時には回転角度を制限した方がいいかも。
image_angle += sign(diff) * min(abs(diff), 10); みたいに。
06986952009/01/16(金) 23:34:55ID:vJfRZqe6
>>696-697
レスどうもです。
うまくいきました!

使う場面が結構多くなりそうなので助かりました。
ありがとうございました。
0699名前は開発中のものです。2009/01/17(土) 06:20:17ID:6ZGpZB49
RPGとかアイテムを使うアクションゲームとかのgmdやgmkないかなぁ
アイテムメニュー云々がよく分からないから実際にどう組んでるかを見てみたい
0700名前は開発中のものです。2009/01/17(土) 23:50:29ID:lm1Ycmz0
アイテム画面を出したいということなら、

・オーバーレイヤー
・スイッチ

のどれか。

前者は現在の画面に、更にレイヤーのようにアイテムサーフェイスを乗せてしまう。

後者は現在の画面から、アイテム面として別に作った面にジャンプさせ、選び終わったら戻す。

もちろん誰がどこに居たのかはちゃんと記録して読み込まないといけない
0701名前は開発中のものです。2009/01/18(日) 06:27:40ID:cXdSGLfe
ああいや、メニュー表示でなく内部のアイテム用変数とかの管理が知りたいのです
0702名前は開発中のものです。2009/01/18(日) 13:08:37ID:kBURO4x7
自作のロード中のバーをデフォルトの赤を青に変えたいだけなのですが、
デフォルトのバーのイメージファイルはどこにあるのでしょうか?
0703名前は開発中のものです。2009/01/19(月) 00:05:56ID:+kjGHGVs
>>699
Pro版じゃないと使えないが、Mapsを使うといいと思う。
keyがアイテムの種類でvalueがその所持数。

Help
>The Game Maker Language (GML)
>Data Structures
>Maps
を参照。

>>702
Global Game Settings
>Loadingタブ
>Own loading progress bar
0704名前は開発中のものです。2009/01/19(月) 00:54:48ID:vVWIhOkW
>>703
メインは5.3レジストでやってるんですけどそっちでもできますかね。
07056892009/01/19(月) 16:35:57ID:FHt5Z4iN
えーと前に質問したものです
「普通」という言葉に説明が足りませんでしたね
普通と言うのは
「新規スプライト作成
    ↓
 画像を開く
    ↓
 オブジェクトでスプライトを開く
                」
の手順でやりました。ということです
0706名前は開発中のものです。2009/01/19(月) 16:53:14ID:XSLHBAAv
変数を描写する際に数字の末端を基準にするにはどのようにすればいいのでしょう。
    0
とやったなら1000を足したとき
 1000
となるようにしたいのですが

   0
に1000を足すと
   1000
みたいな感じになってしまうのです。
後ろに単位を表示したりするときめり込んだりしてとても困るので…
0707名前は開発中のものです。2009/01/19(月) 17:06:57ID:7PwOXwXx
>>706
Set Font のalign をright指定とか
draw_set_halign()で一時的に変更後、元に戻すとか
0708名前は開発中のものです。2009/01/19(月) 17:11:47ID:XSLHBAAv
やってみます
素早い返答ありがとうございました
07097022009/01/19(月) 19:39:47ID:/FjgEPbD
>>703
えーとその自作のロードバーをデフォルトの赤を青に変えただけのものにしたいのですが
デフォルトのバーから新しく作ろうと思うのですがそのデフォルトのバーのイメージファイルが見つからないので、
その場所を知りたいのです。それとも、もともとGMに組み込まれててファイルを取り出すのは無理なのでしょうか?
0710名前は開発中のものです。2009/01/19(月) 19:47:57ID:VXCpWCmL
>>704
あんたがどっちの質問者かわからないけど、とりあえずヘルプの該当箇所を
読んでどう思った?

>>705
アニメーションGIFだったら、スプライトの設定画面で画像を読み込んだ時に
フレームが複数できているはず。できていなかったら画像ファイルがおかしい。
できているなら「オブジェクトでスプライトを開く」とやらのやり方がおかしいか
あるいは見間違いだが、具体的に何をしたか示してくれないとそれ以上はわからん。
0711名前は開発中のものです。2009/01/19(月) 20:33:03ID:ubuZMdKO
>>709
無理です、自分で作りましょう
0712名前は開発中のものです。2009/01/20(火) 02:02:00ID:415MQrfK
つPrntScrn
組み込みの画像をパクるのはライセンスに抵触するかもしれんから
手持ちのバージョンのLICENSEちゃんと確認してな
あと、バーの部分だけならただのグラデかけた棒だから自作しても大したことないぞ
0713名前は開発中のものです。2009/01/20(火) 17:17:01ID:PwgW2MP1
GMの関数は使いやすいね
0714名前は開発中のものです。2009/01/21(水) 23:50:15ID:9Ec60CXH
ちょっと上でアイテムメニューとか言ってたんで
GMだとどういう感じになるか試しに簡単に作ってみたけど
未レジストでもアイテムの装飾(+1強化するとか、あとから個別に属性付加とか)しなければ
Object単位の管理で割といけるっぽい。
アイテム装飾をやるならどうしてもインスタンスか、ばらけた配列を使わなければならないので
レジストして構造体を使ったほうがよさげだと思う

アイテムメニューと関係ないどRoomのPersistentを切り替えると
切り替え時のステップだけたまに動作が不安定になるね

0715名前は開発中のものです。2009/01/22(木) 00:25:09ID:bughZtr5
rpg作ろうかと思っている者です。
とりあえずターン制の戦闘システムから始めようかとおもっておりますが、
そもそもターンというのはどうやって表せばよいのでしょうか?
またhpを削ったり増やしたりする方法を教えてください。
初歩的なことで申し訳ないです。参考になるサイトとかあればご教授願います。
0716名前は開発中のものです。2009/01/22(木) 00:43:59ID:egdmvXcF
構造体使えたのか
0717名前は開発中のものです。2009/01/22(木) 01:21:53ID:6+qogCmD
>>714
差し支えなければそのサンプルを提供してもらえないでしょうか…

レジストはしてあるので構造体についても教えて下さるとありがたいです
0718名前は開発中のものです。2009/01/22(木) 01:30:11ID:v3lR0sWo
>>715
>またhpを削ったり増やしたりする方法を教えてください
これはGMのコードの書き方が分かれば苦もないのでwikiでもhelpでも見るべし
全然プログラムの書き方が分からないというなら、C++やjavaだとかの入門書やサイトを見たほうがいいよ

ターン制というか戦闘システムとかは、作るゲームの設計図を自分でかけないと難しいと思うよ
例えばドラクエっぽいのを考えるとして、
画面上にキャラクターのHPとかMPとかを表示したいから
メニューを描画するオブジェクトはキャラクターステータスを管理するオブジェクトにアクセスできないといけないとか
この辺が面倒ならRPGツクールを使ったほうがいいんじゃないかと
0719名前は開発中のものです。2009/01/22(木) 01:34:07ID:bughZtr5
上に書いたものです。一応hp増減する方法はわかりますた。
0720名前は開発中のものです。2009/01/22(木) 01:50:30ID:bughZtr5
>718
返信ありがとうございます。ツクールはとりあえず考えてません。
難しそうですがまあ今日インストールしたとこなので色々試してみようかと思います。
0721名前は開発中のものです。2009/01/22(木) 02:42:37ID:v3lR0sWo
>>716
>>717
構造体の発言はなったことにorz
あるものとばかり思ってたら今確認したらなかった・・・dll側で対処のも今一ですからね

ソースは7.0の未レジスト版でもよければ明日内役っぽいのを書いてうpします
0722名前は開発中のものです。2009/01/22(木) 02:45:15ID:v3lR0sWo
×内役
○内訳
なんだよ内役ってorz
0723名前は開発中のものです。2009/01/22(木) 18:46:49ID:egdmvXcF
構造体ないか

リスト構造ってのがよくわからない
0724名前は開発中のものです。2009/01/22(木) 21:31:41ID:5F5IMtdt
>>723
それぐらいカスれググ

さてここからは独り言
たぶん単純な双方向連結リスト(リンクリスト)だと思う
最近の言語だと配列として実装されてたりするのであまり耳にしないのかも

大まかな構造は配列と同じ
ただし隣り合った要素同士が互いにポインタを持ってるから
(末尾以外の要素の)削除や挿入にかかるコストが配列よりずっと低い
詳しくはwikipediaやデータ構造の本を読むをどうぞ
ついでにキューやスタックも似たような概念だからついでにどうぞ

以上の独り言は単なる独り言であって別にあんたのためじゃないんだからね
0725名前は開発中のものです。2009/01/22(木) 23:06:37ID:egdmvXcF
>>724
結婚してください

なるほどなー
配列でいいやと思ってたが改めます
RPGなどの所持品管理に良いんだろうか?
0726名前は開発中のものです。2009/01/23(金) 00:56:04ID:YF0WjU+D
>>717
とりあえずうpっておきました
ttp://www.dotup.org/uploda/www.dotup.org24218.zip.html

要素の挿入削除がなければ(FFのような最後の一個を使ったとき空白ができるようなタイプ)
配列タイプのほうがいいし
その都度詰めて表示するやつ(不思議なダンジョンのトルネコのようなタイプ)はリストが向いていると思う
どちらがいいということもないような
0727名前は開発中のものです。2009/01/23(金) 03:21:07ID:JG56DCPd
>>724
俺とも結婚してください
0728名前は開発中のものです。2009/01/23(金) 13:39:03ID:er9V4Ijx
>>726
ありがとうございます。
色々試行錯誤してみます
0729名前は開発中のものです。2009/01/23(金) 14:10:29ID:XrOlLLRq
GameMakerって要はクラス(構造体)設計をGUIでできるってツールなんだよなぁ。
GMLバリバリ使う人はそのままプログラム出来ちゃう気が。
0730名前は開発中のものです。2009/01/23(金) 21:48:14ID:er9V4Ijx
>>726
ええと、
・現在の画面上にメニューを出せるようにしたい(後ろにプレイ画面が出るような)
・説明してくれている「詰めて表示するリストタイプ」にしたい
・アイテムごとに内部で定めた番号順に自動ソートできるようにしたい
 (内部番号が4,2,8のアイテムをその順で拾ったらアイテム画面を開いたとき2,4,8の順で整理されている)
としたいのですがどのようにすればいいのでしょうか?
0731名前は開発中のものです。2009/01/23(金) 23:49:09ID:YF0WjU+D
>>730
・現在の画面上
メニュー表示がRoom切り替え方だったらbackground_create_from_screen()で
元の状態を複製。使えないって言われたから要レジストらしい
切り替えないタイプだったらそのまま画面上にメニューを描画。

アイテム関連はリストでアイテム種類ごとのインスタンスを保持すれば楽かも
other イベントかScriptsでソート関数をつくる。その例だと番号を比較すればおk
アイテム番号をキーに検索して、拾ったアイテムがリスト中にあって同一の状態ならアイテム個数を増やす
そうでなければ、インスタンスを新たに作り適切なリストの場所に挿入
とかかな
0732名前は開発中のものです。2009/01/24(土) 15:39:35ID:RSxQwKZ0
>>707
これは5.3ではできないんですね・・・
6yら7でやる必要があるんでしょうか。
0733名前は開発中のものです。2009/01/24(土) 19:40:57ID:SbF+au3X
>>732
5.3ではfont_alignという変数になってる。こういうこともあるから最初にバージョンを(ry
ちなみに文字列の幅を測る関数(string_width)もあるから
自分で計算すれば「できない」ってことはない。
0734名前は開発中のものです。2009/01/25(日) 22:39:01ID:Ihe3tos+
ユーザ定義というのはどのような時にどう使うのでしょう?
0735名前は開発中のものです。2009/01/26(月) 00:55:11ID:rypvl5e0
>>734
これは自分の場合だけど、たとえばシューティングゲームで、敵に攻撃パターンをランダムで選択させるときなどに使ってみてる。

ユーザーイベント側で攻撃パターンを記述したスクリプトを用意しておいて、
if (isAttackBegin) {
pattern = floor(random(5)); // 攻撃開始時にパターンを決める(userイベント0〜4のどれかを選択)
}
...
event_user(pattern);
等とすることで、攻撃パターンを選択させることが出来る。

自作スクリプトを使って、switch - case で分岐させても同様のことが出来るけど、
ユーザ定義イベントの方法は、それに比べてオブジェクト内で完結出来る点が有利、かな。
(自作スクリプトは、どのオブジェクトからも呼び出せてしまうため)

・・・うーん、もっといい例があるような気もするんで、参考にならないかもなぁ。
0736名前は開発中のものです。2009/01/26(月) 01:14:42ID:RHbshgiW
ユーザ定義イベントが威力を発揮するのは、上で説明してるParentと組み合わせたとき。

例えば、敵が何種類かいるとして、敵Aを倒すとお金を落とす、
敵Bは分裂して別の敵になる、敵Cは自爆して反撃を受ける……など
倒した時に敵の種類ごとに違った出来事が起こるとする。

こうした出来事をそれぞれの敵のユーザ定義イベント0番に書いておき、
敵を倒した時には一律でそいつのイベント0を呼び出すようにする。
言ってみれば「敵を倒したイベント」を新しく定義するということ。
こうするとすっきりした作りになるし、後から敵の種類を増やすのも簡単になる。
ある系統の敵はすべて同じ反応をする、というのも継承で自然に表現できるしね。
0737名前は開発中のものです。2009/01/27(火) 16:56:40ID:pQHnQheZ
アイテムってものは通常、配列で実現するものなのですか?
配列だとメモリの確保が膨大になりませんか。

たとえば600コあるうちの1つが今求められているのに
配列全部のメモリが必要になりゃしませんか。
0738名前は開発中のものです。2009/01/27(火) 17:42:16ID:7ENg20mL
>>737
なりゃしませんぜ
何となく誤解や勘違いがありそう
アイテムを管理するのに配列を使うということ
アイテム自体はオブジェクトとして実装するのが普通だと思う

それにGMは元から画像関連でメモリを大量に使うから
たった600程度の配列を節約しても大して変わらないと思う
要素に入れるのはアイテムのID、性能、所持フラグ程度でしょう
これを配列やリスト無しで管理するとなると方法が思いつかない
■ このスレッドは過去ログ倉庫に格納されています