トップページ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/
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、性能、所持フラグ程度でしょう
これを配列やリスト無しで管理するとなると方法が思いつかない
0739名前は開発中のものです。2009/01/27(火) 18:19:56ID:sD1xAdJP
>>737
まず、アイテムの所持リストってのは、最低限、種類(ID)とその所持数が分かればいい。
で、アイテムの種類(ID)から、アイテムの名前や性能とかを『別途に』取得する。

そういうわけで、所持リストなら一次元配列でも十分管理できる。
アイテムの所持数を管理するのに必要な要素は、種類と所持数の2つ。
種類をインデックス、所持数を値とすればいい。
名前は? 性能は? それは「詳細リスト」から取得すればいい

itembag[0] += 1;
// アイテムID 0 を1個拾った!!
// アイテムID 0って何だ? アイテム詳細リストを見てみる。
// ↓
itemlist[0, 0] = "ポーション"; // 0: 名称
itemlist[0, 1] = "HPを30回復"; // 1: 説明(アイテムを選択してるときとか、店で購入するときとか)
itemlist[0, 2] = 30; // 2: 性能(ゲーム内で実際に計算とかに使われる数値)
// ↓
// 拾っただけだから、いちいち説明はいらん。名前さえわかりゃいい。
// っつーわけで、itemlist[*,0]の値を取得する
// ↓
// ポーション を1個拾った!!

と、ざっと書いてみたがこんなもんだろうか。
レジスト版なら、配列ではなく>>703にあるMapとか使うのもあり。
0740名前は開発中のものです。2009/01/27(火) 18:29:16ID:sD1xAdJP
あー、*ってワイルドカードって意味があったんだっけ。
拾ったアイテムのIDって言いたかったんだ。

// っつーわけで、itemlist[アイテムID ,0]の値を取得する
// itemlist[0, 0] を拾った!!
// ポーション を拾った!!
0741名前は開発中のものです。2009/01/27(火) 18:48:52ID:vXU/UZvg
参照に使うだけやね
0742名前は開発中のものです。2009/01/27(火) 20:09:36ID:pQHnQheZ
なるほロケット


っていうか、配列とは
一度にサイズぶんだけ一気に確保し、
それから参照していくものだと思っていたので
多次元配列だと100MB以上も食ってしまいかねない、
と危惧しました!
事情により、アイテムどころか様々な技など含めて5000コ、それを最悪でも16MBに収めたいので
0743名前は開発中のものです。2009/01/27(火) 20:38:48ID:7ENg20mL
>>742
配列に回すリソースが16MB以下ってことなら余裕で収まると思うよ
ざっと計算して1個あたり3000バイトかな
よほど長いアイテム名でもない限り100バイトもあれば十分

もしゲーム全体で16MBってことになると厳しいな
処理系で喰うメモリよりスプライトや効果音を減らす努力をした方が良いかも

>一度にサイズぶんだけ一気に確保しそれから参照していくもの
いや、まさにそうだよ
データとメモリ(サイズ)の関係について認識がおかしい気がする
多次元配列だからメモリを喰うなんてことはないし・・・
ってか自分でテストして確かめるのが良いと思う
適当に巨大な配列を作ってタスクマネージャで比較するだけでも大雑把なテストにはなるでしょ
0744名前は開発中のものです。2009/01/28(水) 01:16:03ID:MXEjvXvx
>>739
一次元配列でも管理できるといっておきながら
itembagも合わせたら三次元分も使ってるじゃないかwというつっこみは置いておいて

構造的にも役割的にもリストじゃないのに変数名になんとかlistを使わない方がよさげ
0745名前は開発中のものです。2009/01/28(水) 04:15:12ID:DtItU4Js
>>744
その場でいい表現が思いつかなかったからlistって書いたけど、他に何かあるかな。
itemtable? itemdetail? itemdata? まぁ製作者自身が分かればいーんだ。

「所持リストなら」一次元配列でも十分管理できるって書いたつもりだったんだ。
「名称、説明、性能、所持数」を全て一つで管理するより、
不変のデータ「名称、説明、性能」を一つにまとめて、
所持数は別途に管理する方が構造上いいのではと思


そうか、使用するメモリの話か。
0746名前は開発中のものです。2009/01/28(水) 05:02:50ID:oP92b7pR
1次元3000バイトで3次元配列作ったら
3000 * 3000 * 3000
0747名前は開発中のものです。2009/01/28(水) 10:26:16ID:LWUNhc76
GMLでは、1次元配列、2次元配列を使用することが出来ます。
変数名の後ろに[]をつけ加え、その間に添字(インデックス)を1個(1次元配列)
または、カンマ,で区切って2個(2次元配列)入れてください。
この添字を指定すると配列が自動的に作成されます。
配列の先頭番号は0です。大きい配列を使うとメモリを消費してしまうので気をつけてください。
添字にマイナスの値を使用してはいけません。
各配列で32,000個までのインデックスを使用でき、全体で1,000,000サイズの配列を管理できます。
0748名前は開発中のものです。2009/01/29(木) 01:42:29ID:9p/g/bvg
二次元配列とか使ってるけど、一次元でやるとしたら
item[]っていう配列に[個数][名称][説明][性能]の順で格納して
アイテムID*4 + a (a = 0 〜 3)で参照すればできるけど・・・

問題はメモリじゃなくて設計上よろしくない。
アイテムの内容をそのまま配列に記述して、さらに直接アイテムIDで参照していると
アイテムの種類を増減させたときそのアイテム以降のデータを全て直さなければならなくなるっていう
アイテムIDを個別に振るタイプでは同じ問題をはらんでいるけど
このやり方だと連番になっているので修正量が半端じゃない
0749名前は開発中のものです。2009/01/30(金) 09:46:51ID:Dxz4sk1v
1個あたり3000バイトって、アイテム1個あたり3000バイトってことだよな?
名称とか性能とか全部含めて。

……何でそれを三乗するんだろ?
0750名前は開発中のものです。2009/01/31(土) 01:05:21ID:/v1G/0Es
次元だろ
1次元にアイテムに求められるもの全部入るとは限らない。

「表」なら、一次元で完結することはあまりない。
たいてい2次元必要だろ

名前だけが必要なら1次元で済むかもしれないが、
誰が何を持っているか、というような個人の情報を格納するとなると1次元では足りない。

複数次元なら、そのぶんかかるのは自明。
n次元 n乗
0751名前は開発中のものです。2009/01/31(土) 02:25:37ID:rlXWUIoU
3次元配列だろうが、各次元の要素数をそろえる必要はないだろうに。
アイテムの話なら、
必要な配列の要素の総数 = アイテムの個数 x アイテムのステータス
で済む話だし。
0752名前は開発中のものです。2009/01/31(土) 04:49:01ID:Fymynsm1
>>746,>>750
つまり、アイテム5000個の名称、説明、性能の表を記述するのに、
5000*3じゃなくて、5000の2乗だけ必要、ということ?
5000*4997が空白になるんだが、そういうことなのか?
0753名前は開発中のものです。2009/01/31(土) 18:11:05ID:zdMDroAq
管理のしやすさ、検索のしやすさで2次元ぐらいでわけときゃいんじゃね
アイテムと装備でわけるとかさ
GMの配列はサイズ宣言しなくていいんだし>>752みたいに考えなくていいだろ
>>747ってヘルプのやつだよな
これみると2次元までしか使えないんじゃないだろうか
0754名前は開発中のものです。2009/01/31(土) 20:52:47ID:dFEgAXD4
いや普通に「アイテムの数×ステータス数」で十分でしょ?
0755名前は開発中のものです。2009/01/31(土) 23:16:19ID:+Qm7r/E2
ver7 だけど、背景をタイルで描くとRoomエディット画面がすごく重くなるなあ
このカクカク具合は嫌だな
0756名前は開発中のものです。2009/02/01(日) 02:09:16ID:VioXBIy7
>>753
次元で分けるとか、次元という言葉に拘っているみたいだけど、
そもそも次元というものを正確に理解していないんじゃなかろうか。

例えば>>739がitembagとitemlistを合わせたら三次元だという発言があったが、あれはどう見ても二次元だ。

   アイテム0 アイテム1 アイテム2 ……
名称
説明
性能
個数

↑の表の最下段、個数の行を切り離して個数の行をitembag、残りの表をitemlistと呼んでいるだけ。
このときの表の軸は(アイテムID、ステータスの種類)の2本。だから二次元。
切り離した行を見ると、軸は(アイテムID)の1本。これは一次元。
この二つをあわせたとしても、同じ軸が一本あるために、単純に数字の上での計算「一次元+二次元=三次元」の様にはならない。
「要素が増えた→次元が増えた」ではない。
もし仮に三次元になるのなら、>>744の発言からみて(アイテムID、ステータスの種類、個数)という表現になるな。
それがどういう意味か、わかるだろうか。例えば、同じアイテムIDなのに違う個数を持つ等。

ちなみに、本来アイテムのデータを管理するのに、↑にあるような表を書くと思うのだが。
次元で分けたがっているようだが、試しに好きなアイテムを5つくらい、
どう管理するかを一度excelか何かで表を作ってみたらどうか。
0757名前は開発中のものです。2009/02/01(日) 02:16:41ID:VioXBIy7
……まさか、アイテムをオブジェクトと見なし、オブジェクトごと管理する、とか?
もしそうだとしても、そうするよりは表を作るほうがいいかと。
その方が共通の項目(名称、説明など)で管理できる。
0758名前は開発中のものです。2009/02/01(日) 10:46:25ID:KYsF1WeA
RPGで各装備に変動するレベル(補正)や耐久値などをつけたいのですが
各変数を設定できるデータを100個ほど常時保持させ、装備入手に伴い空いている(数値が0である)データにその装備が持つ値を代入、
あとは増減をその内部で行い、装備が破壊や破棄された際に数値を0に戻す
などという方法でできるのでしょうか。
もっと簡単な方法があればご享受賜りたいです。
0759名前は開発中のものです。2009/02/01(日) 12:39:25ID:0y6Ohlui
>>756
同一人物でないんでない?

配列の中の配列を多次元配列と同一に扱ってるだけじゃないかな
これはグラフィクハンドル格納して使ったり便利だけど
アイテムなら素直にデータ構造でいいと思う
0760名前は開発中のものです。2009/02/01(日) 17:38:16ID:lUYLBl6P
>>758
>各変数を設定できるデータを100個ほど常時保持
データがインスタンスidで、100個保持っていうのがidを保持する配列100要素分だというのなら
できると思うよ

レベルや耐久値とかをもったオブジェクトのpersistent属性インスタンスを
アイテム種類ごとに生成するのが一番楽
0761名前は開発中のものです。2009/02/02(月) 09:06:58ID:JsXKtbu0



とりあえず言えることは


ゲームに限らず、配列をマスターできない奴はダメだということ。
必然的にポインタもわからないことになるからな



物理で言う、質量とエネルギーの関係に似ている。
[見え方が違うから別物]として捉えていたら永遠に理解できない
0762名前は開発中のものです。2009/02/02(月) 23:39:28ID:X4zxDIqi
同じオブジェクトの複数のインスタンスを重ねて表示する時に、
重ねる順番を思い通りにすることってできないでしょうかね?
0763名前は開発中のものです。2009/02/03(火) 00:11:12ID:H3sg+kjO
個々のdepth をかえる
もしくは思い通りの順番にインスタンスを生成していく
0764名前は開発中のものです。2009/02/03(火) 22:36:47ID:vsV0s/4n
すいません、タイムラインによるイベントって
どのタイミングで起こるかご存知の方おられますか?
0765名前は開発中のものです。2009/02/03(火) 23:02:40ID:b4FG0ycn
デバッグメッセージ突っ込んでみりゃわかるんじゃね?
とか言うとお前がやれと言われそうなのでやってみたら
Begin stepとStepの間だった

Timeline内で描画したいとかいう質問だったら追加料金いただく
0766名前は開発中のものです。2009/02/03(火) 23:27:42ID:KjRNw6lQ
確認者その2。
もっと正確に言えば、
Begin step イベント→ timeline の呼び出し → alarm イベント→...→ Normal step イベント ...
って感じみたいだ。
07677642009/02/04(水) 00:41:01ID:28umjKE8
>>765 >>766
ありがとうございます。むしろ自分こそ自分でやれよと
いう感じですね、、アホな質問すいません…。


>618 >620あたりでこのスレにカキコしたんですが
なんでゲーム中でハングアップするのかわからないまま2ヶ月が過ぎました…

原因の最有力候補たるオブジェクト
(このオブジェクトがある時必ずエラーがおきる)を1から
作り直したのに、また同じようにハングアップしてしまいます。。

そろそろ個人で作るのが限界かもしれません…

自分がメッセアド晒したら連絡して原因を一緒に究明してやるぜ、、という
素敵なお方とかいませんか…。。
07687642009/02/04(水) 00:43:25ID:28umjKE8
すいません、言葉足らずかも。。
メッセでgmkファイル送るので、ということです。
0769名前は開発中のものです。2009/02/04(水) 02:38:04ID:WYUwJI4p
世間にはな、Uploaderというものがあるのだよ。
0770名前は開発中のものです。2009/02/08(日) 08:03:23ID:stZQzW20
わからないところが出てきたからここに来て質問する、ってのは別にいいんだけど、
ただただ問題投下するだけだと……。
例えば、数レス前で話してたことに関してまた質問が来るとかって阿呆みたいだろ?
質問するなとは絶対言わん。けど、とりあえずスレ内を読むとかはして欲しいよね。

で、何が言いたいのかというとだな。
>>116>>188>>211とかで、ファイルへのURLを載せて『こんなのを作っているけどこんなエラーが出る。どうしたものか』系な発言があるよね。
つまり、スレ内を読んでいれば、『メッセアドを晒して……』なんてことをせずに、
『アップローダーを使って作ってるゲームを公開し、助言を貰う』っていう選択肢が見つかるはずなんだ。

Q&Aが殆どのこのスレだが、そのQ&Aから得るものもある。
他にも、このスレ内で紹介されたダンジョン自動生成のアルゴリズムとかは凄く興味深かった。
今作ってるゲームとは一切関係がないのが残念だが、SRPGを作るときがあったら参考にするかもしれない。

自分には関係ないと思わずに、とりあえず読んでみようよ。な?
0771名前は開発中のものです。2009/02/08(日) 09:24:36ID:VSHKfWuS
秘匿したいとか、馴れ合いたいとか、びっちり組み合って作っていきたいのなら他所でやった方がいいよ
サイトで募るとか手はあるはず、2chで開発仲間募集しても閑古鳥
■ このスレッドは過去ログ倉庫に格納されています