【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/
0670名前は開発中のものです。
2009/01/03(土) 11:35:14ID:oLIty3o+0671名前は開発中のものです。
2009/01/03(土) 13:09:48ID:3LsZl9GNよくわからんけど、自機が発した弾が発射元の自機の情報を得たいってこと?
自機弾の発射するイベントで、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ロードしたら、どうもリスト構造は保持されない?みたいなんですが
これ、どうにかする方法ってないでしょうか。。
セーブ時別個にリストファイル作って
ロード時呼び出させないとダメなのかな?
0673669
2009/01/03(土) 14:55:46ID:DeK5ZSwj丁寧な解説にサンプルまで用意して下さってありがとうございます
>ただし、上記のいずれの方法も、弾側の生成イベントが終わってから変数が設定されるので、
>弾側の生成イベント中でこれらの値を利用しようとするとエラーになる。
まさにこれで、解決方法がわからなかったので助かりました
これですっきりして進めそう&今後がかなり楽になりそうです
本当にありがとうございました
0674名前は開発中のものです。
2009/01/03(土) 18:33:34ID:zGDz8aqygame_saveの説明に詳しく書いてあるけど、Data structureやパーティクルの設定、
動的に作成したリソースなどはセーブされないので個別に保存する必要がある。
安直な方法としては、配列は保存されるから
セーブ前に配列にコピーしといてロード時に戻すとか。
ただ、たしかロードすると次のステップの先頭から開始されるので、
game_loadの後にコードを書いても実行されないという問題があった気がする。
だからgame_saveの前に何か変数を設定しておいて、saveの直後にクリアする。
で、ステップの先頭でその変数が設定されたままだったらloadされたと判断する、
みたいな小細工が必要だったかも。
0675名前は開発中のものです。
2009/01/03(土) 19:40:26ID:PewRp2L1いまいちfile_bin系の使用方法が分からないんだけど・・・
0676名前は開発中のものです。
2009/01/03(土) 20:37:48ID:0rv8QzLZGMでは、変数の型は数値か文字列かの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:PewRp2L1double オンリーでしたかどうもです
データを1バイト分で扱う必要がない以上
この辺の関数は自作したものを使ったほうがよさげですね
file mode も定数定義じゃなかったりこの辺は使うなってことなんだろうか・・・
0678672
2009/01/03(土) 23:20:24ID:ycNKPUB6詳しい解説有難うございます。
配列で作り直そうとしていたので、凄く助かりました。
その方法で作ってみることにします。
0679672
2009/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/Y0685名前は開発中のものです。
2009/01/08(木) 23:31:34ID:xiNZbAtmそう考えるとやっぱりGMは分かり易いんだろうか
0686名前は開発中のものです。
2009/01/08(木) 23:38:20ID:/gQ2mjV10687名前は開発中のものです。
2009/01/09(金) 07:42:45ID:JJE/kv3A0688名前は開発中のものです。
2009/01/09(金) 20:28:00ID:uRUtQIex使う関数や変な数が違うだけだ
0689名前は開発中のものです。
2009/01/09(金) 22:43:32ID:t/SSlAFW普通にスプライトを開いてオブジェクトに貼っても動かないんだけど(画像が
0690名前は開発中のものです。
2009/01/09(金) 23:08:55ID:XLTa+ag6アニメーションスピードを設定していないとかgif規格があってないとか
その辺じゃないかな
普通にやって動くものを、普通にやったら動きませんというのは
禅問答みたいで答えに困るな
0691名前は開発中のものです。
2009/01/10(土) 01:02:04ID:N7iHXgzTどの状態が「普通」なんだ
と流れるのがお約束
車もそうだ
普通って何だ
世の中がトラックだらけになったらトラックサイズが普通・一般的になるわけだ
じゃあ法的に「普通」になるのかってーと
そうでもない
じゃあ普通ってなんだ
って無限ループし、頭のスタックを使い果たして考えるのをやめてしまう
これがクラッシュである
0692名前は開発中のものです。
2009/01/16(金) 01:08:09ID:/Ycxfhniもう一つ、スプライトを半透明にするにはどこを弄ればいいのでしょうか。
5.3で、レジスト済です。
0693名前は開発中のものです。
2009/01/16(金) 01:39:44ID:55t9b+oA論理演算を学びましょう。
・「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:/Ycxfhni0695名前は開発中のものです。
2009/01/16(金) 12:22:33ID:GAxnBPVg任意の方向、例えば315度に向かせる場合に
近い回転方向で徐々にそちらの方へ向くといった動作をさせたいんですが
どの用に書けばうまくいくのでしょうか?
0696名前は開発中のものです。
2009/01/16(金) 18:15:06ID:UMDE1LJgの条件式で時計回り、反時計回りを考えればいいんじゃないか
0697名前は開発中のものです。
2009/01/16(金) 20:01:52ID:P13I2TEiまず差を求めて、-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); みたいに。
0698695
2009/01/16(金) 23:34:55ID:vJfRZqe6レスどうもです。
うまくいきました!
使う場面が結構多くなりそうなので助かりました。
ありがとうございました。
0699名前は開発中のものです。
2009/01/17(土) 06:20:17ID:6ZGpZB49アイテムメニュー云々がよく分からないから実際にどう組んでるかを見てみたい
0700名前は開発中のものです。
2009/01/17(土) 23:50:29ID:lm1Ycmz0・オーバーレイヤー
・スイッチ
のどれか。
前者は現在の画面に、更にレイヤーのようにアイテムサーフェイスを乗せてしまう。
後者は現在の画面から、アイテム面として別に作った面にジャンプさせ、選び終わったら戻す。
もちろん誰がどこに居たのかはちゃんと記録して読み込まないといけない
0701名前は開発中のものです。
2009/01/18(日) 06:27:40ID:cXdSGLfe0702名前は開発中のものです。
2009/01/18(日) 13:08:37ID:kBURO4x7デフォルトのバーのイメージファイルはどこにあるのでしょうか?
0703名前は開発中のものです。
2009/01/19(月) 00:05:56ID:+kjGHGVsPro版じゃないと使えないが、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メインは5.3レジストでやってるんですけどそっちでもできますかね。
0705689
2009/01/19(月) 16:35:57ID:FHt5Z4iN「普通」という言葉に説明が足りませんでしたね
普通と言うのは
「新規スプライト作成
↓
画像を開く
↓
オブジェクトでスプライトを開く
」
の手順でやりました。ということです
0706名前は開発中のものです。
2009/01/19(月) 16:53:14ID:XSLHBAAv0
とやったなら1000を足したとき
1000
となるようにしたいのですが
0
に1000を足すと
1000
みたいな感じになってしまうのです。
後ろに単位を表示したりするときめり込んだりしてとても困るので…
0707名前は開発中のものです。
2009/01/19(月) 17:06:57ID:7PwOXwXxSet Font のalign をright指定とか
draw_set_halign()で一時的に変更後、元に戻すとか
0708名前は開発中のものです。
2009/01/19(月) 17:11:47ID:XSLHBAAv素早い返答ありがとうございました
0709702
2009/01/19(月) 19:39:47ID:/FjgEPbDえーとその自作のロードバーをデフォルトの赤を青に変えただけのものにしたいのですが
デフォルトのバーから新しく作ろうと思うのですがそのデフォルトのバーのイメージファイルが見つからないので、
その場所を知りたいのです。それとも、もともとGMに組み込まれててファイルを取り出すのは無理なのでしょうか?
0710名前は開発中のものです。
2009/01/19(月) 19:47:57ID:VXCpWCmLあんたがどっちの質問者かわからないけど、とりあえずヘルプの該当箇所を
読んでどう思った?
>>705
アニメーションGIFだったら、スプライトの設定画面で画像を読み込んだ時に
フレームが複数できているはず。できていなかったら画像ファイルがおかしい。
できているなら「オブジェクトでスプライトを開く」とやらのやり方がおかしいか
あるいは見間違いだが、具体的に何をしたか示してくれないとそれ以上はわからん。
0711名前は開発中のものです。
2009/01/19(月) 20:33:03ID:ubuZMdKO無理です、自分で作りましょう
0712名前は開発中のものです。
2009/01/20(火) 02:02:00ID:415MQrfK組み込みの画像をパクるのはライセンスに抵触するかもしれんから
手持ちのバージョンのLICENSEちゃんと確認してな
あと、バーの部分だけならただのグラデかけた棒だから自作しても大したことないぞ
0713名前は開発中のものです。
2009/01/20(火) 17:17:01ID:PwgW2MP10714名前は開発中のものです。
2009/01/21(水) 23:50:15ID:9Ec60CXHGMだとどういう感じになるか試しに簡単に作ってみたけど
未レジストでもアイテムの装飾(+1強化するとか、あとから個別に属性付加とか)しなければ
Object単位の管理で割といけるっぽい。
アイテム装飾をやるならどうしてもインスタンスか、ばらけた配列を使わなければならないので
レジストして構造体を使ったほうがよさげだと思う
アイテムメニューと関係ないどRoomのPersistentを切り替えると
切り替え時のステップだけたまに動作が不安定になるね
0715名前は開発中のものです。
2009/01/22(木) 00:25:09ID:bughZtr5とりあえずターン制の戦闘システムから始めようかとおもっておりますが、
そもそもターンというのはどうやって表せばよいのでしょうか?
またhpを削ったり増やしたりする方法を教えてください。
初歩的なことで申し訳ないです。参考になるサイトとかあればご教授願います。
0716名前は開発中のものです。
2009/01/22(木) 00:43:59ID:egdmvXcF0717名前は開発中のものです。
2009/01/22(木) 01:21:53ID:6+qogCmD差し支えなければそのサンプルを提供してもらえないでしょうか…
レジストはしてあるので構造体についても教えて下さるとありがたいです
0718名前は開発中のものです。
2009/01/22(木) 01:30:11ID:v3lR0sWo>またhpを削ったり増やしたりする方法を教えてください
これはGMのコードの書き方が分かれば苦もないのでwikiでもhelpでも見るべし
全然プログラムの書き方が分からないというなら、C++やjavaだとかの入門書やサイトを見たほうがいいよ
ターン制というか戦闘システムとかは、作るゲームの設計図を自分でかけないと難しいと思うよ
例えばドラクエっぽいのを考えるとして、
画面上にキャラクターのHPとかMPとかを表示したいから
メニューを描画するオブジェクトはキャラクターステータスを管理するオブジェクトにアクセスできないといけないとか
この辺が面倒ならRPGツクールを使ったほうがいいんじゃないかと
0719名前は開発中のものです。
2009/01/22(木) 01:34:07ID:bughZtr50720名前は開発中のものです。
2009/01/22(木) 01:50:30ID:bughZtr5返信ありがとうございます。ツクールはとりあえず考えてません。
難しそうですがまあ今日インストールしたとこなので色々試してみようかと思います。
0721名前は開発中のものです。
2009/01/22(木) 02:42:37ID:v3lR0sWo>>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それぐらいカスれググ
さてここからは独り言
たぶん単純な双方向連結リスト(リンクリスト)だと思う
最近の言語だと配列として実装されてたりするのであまり耳にしないのかも
大まかな構造は配列と同じ
ただし隣り合った要素同士が互いにポインタを持ってるから
(末尾以外の要素の)削除や挿入にかかるコストが配列よりずっと低い
詳しくはwikipediaやデータ構造の本を読むをどうぞ
ついでにキューやスタックも似たような概念だからついでにどうぞ
以上の独り言は単なる独り言であって別にあんたのためじゃないんだからね
0725名前は開発中のものです。
2009/01/22(木) 23:06:37ID:egdmvXcF結婚してください
なるほどなー
配列でいいやと思ってたが改めます
RPGなどの所持品管理に良いんだろうか?
0726名前は開発中のものです。
2009/01/23(金) 00:56:04ID:YF0WjU+Dとりあえずうpっておきました
ttp://www.dotup.org/uploda/www.dotup.org24218.zip.html
要素の挿入削除がなければ(FFのような最後の一個を使ったとき空白ができるようなタイプ)
配列タイプのほうがいいし
その都度詰めて表示するやつ(不思議なダンジョンのトルネコのようなタイプ)はリストが向いていると思う
どちらがいいということもないような
0727名前は開発中のものです。
2009/01/23(金) 03:21:07ID:JG56DCPd俺とも結婚してください
0728名前は開発中のものです。
2009/01/23(金) 13:39:03ID:er9V4Ijxありがとうございます。
色々試行錯誤してみます
0729名前は開発中のものです。
2009/01/23(金) 14:10:29ID:XrOlLLRqGMLバリバリ使う人はそのままプログラム出来ちゃう気が。
0730名前は開発中のものです。
2009/01/23(金) 21:48:14ID:er9V4Ijxええと、
・現在の画面上にメニューを出せるようにしたい(後ろにプレイ画面が出るような)
・説明してくれている「詰めて表示するリストタイプ」にしたい
・アイテムごとに内部で定めた番号順に自動ソートできるようにしたい
(内部番号が4,2,8のアイテムをその順で拾ったらアイテム画面を開いたとき2,4,8の順で整理されている)
としたいのですがどのようにすればいいのでしょうか?
0731名前は開発中のものです。
2009/01/23(金) 23:49:09ID:YF0WjU+D・現在の画面上
メニュー表示がRoom切り替え方だったらbackground_create_from_screen()で
元の状態を複製。使えないって言われたから要レジストらしい
切り替えないタイプだったらそのまま画面上にメニューを描画。
アイテム関連はリストでアイテム種類ごとのインスタンスを保持すれば楽かも
other イベントかScriptsでソート関数をつくる。その例だと番号を比較すればおk
アイテム番号をキーに検索して、拾ったアイテムがリスト中にあって同一の状態ならアイテム個数を増やす
そうでなければ、インスタンスを新たに作り適切なリストの場所に挿入
とかかな
0732名前は開発中のものです。
2009/01/24(土) 15:39:35ID:RSxQwKZ0これは5.3ではできないんですね・・・
6yら7でやる必要があるんでしょうか。
0733名前は開発中のものです。
2009/01/24(土) 19:40:57ID:SbF+au3X5.3ではfont_alignという変数になってる。こういうこともあるから最初にバージョンを(ry
ちなみに文字列の幅を測る関数(string_width)もあるから
自分で計算すれば「できない」ってことはない。
0734名前は開発中のものです。
2009/01/25(日) 22:39:01ID:Ihe3tos+0735名前は開発中のものです。
2009/01/26(月) 00:55:11ID:rypvl5e0これは自分の場合だけど、たとえばシューティングゲームで、敵に攻撃パターンをランダムで選択させるときなどに使ってみてる。
ユーザーイベント側で攻撃パターンを記述したスクリプトを用意しておいて、
if (isAttackBegin) {
pattern = floor(random(5)); // 攻撃開始時にパターンを決める(userイベント0〜4のどれかを選択)
}
...
event_user(pattern);
等とすることで、攻撃パターンを選択させることが出来る。
自作スクリプトを使って、switch - case で分岐させても同様のことが出来るけど、
ユーザ定義イベントの方法は、それに比べてオブジェクト内で完結出来る点が有利、かな。
(自作スクリプトは、どのオブジェクトからも呼び出せてしまうため)
・・・うーん、もっといい例があるような気もするんで、参考にならないかもなぁ。
0736名前は開発中のものです。
2009/01/26(月) 01:14:42ID:RHbshgiW例えば、敵が何種類かいるとして、敵Aを倒すとお金を落とす、
敵Bは分裂して別の敵になる、敵Cは自爆して反撃を受ける……など
倒した時に敵の種類ごとに違った出来事が起こるとする。
こうした出来事をそれぞれの敵のユーザ定義イベント0番に書いておき、
敵を倒した時には一律でそいつのイベント0を呼び出すようにする。
言ってみれば「敵を倒したイベント」を新しく定義するということ。
こうするとすっきりした作りになるし、後から敵の種類を増やすのも簡単になる。
ある系統の敵はすべて同じ反応をする、というのも継承で自然に表現できるしね。
0737名前は開発中のものです。
2009/01/27(火) 16:56:40ID:pQHnQheZ配列だとメモリの確保が膨大になりませんか。
たとえば600コあるうちの1つが今求められているのに
配列全部のメモリが必要になりゃしませんか。
0738名前は開発中のものです。
2009/01/27(火) 17:42:16ID:7ENg20mLなりゃしませんぜ
何となく誤解や勘違いがありそう
アイテムを管理するのに配列を使うということ
アイテム自体はオブジェクトとして実装するのが普通だと思う
それにGMは元から画像関連でメモリを大量に使うから
たった600程度の配列を節約しても大して変わらないと思う
要素に入れるのはアイテムのID、性能、所持フラグ程度でしょう
これを配列やリスト無しで管理するとなると方法が思いつかない
0739名前は開発中のものです。
2009/01/27(火) 18:19:56ID:sD1xAdJPまず、アイテムの所持リストってのは、最低限、種類(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/UZvg0742名前は開発中のものです。
2009/01/27(火) 20:09:36ID:pQHnQheZっていうか、配列とは
一度にサイズぶんだけ一気に確保し、
それから参照していくものだと思っていたので
多次元配列だと100MB以上も食ってしまいかねない、
と危惧しました!
事情により、アイテムどころか様々な技など含めて5000コ、それを最悪でも16MBに収めたいので
0743名前は開発中のものです。
2009/01/27(火) 20:38:48ID:7ENg20mL配列に回すリソースが16MB以下ってことなら余裕で収まると思うよ
ざっと計算して1個あたり3000バイトかな
よほど長いアイテム名でもない限り100バイトもあれば十分
もしゲーム全体で16MBってことになると厳しいな
処理系で喰うメモリよりスプライトや効果音を減らす努力をした方が良いかも
>一度にサイズぶんだけ一気に確保しそれから参照していくもの
いや、まさにそうだよ
データとメモリ(サイズ)の関係について認識がおかしい気がする
多次元配列だからメモリを喰うなんてことはないし・・・
ってか自分でテストして確かめるのが良いと思う
適当に巨大な配列を作ってタスクマネージャで比較するだけでも大雑把なテストにはなるでしょ
0744名前は開発中のものです。
2009/01/28(水) 01:16:03ID:MXEjvXvx一次元配列でも管理できるといっておきながら
itembagも合わせたら三次元分も使ってるじゃないかwというつっこみは置いておいて
構造的にも役割的にもリストじゃないのに変数名になんとかlistを使わない方がよさげ
0745名前は開発中のものです。
2009/01/28(水) 04:15:12ID:DtItU4Jsその場でいい表現が思いつかなかったからlistって書いたけど、他に何かあるかな。
itemtable? itemdetail? itemdata? まぁ製作者自身が分かればいーんだ。
「所持リストなら」一次元配列でも十分管理できるって書いたつもりだったんだ。
「名称、説明、性能、所持数」を全て一つで管理するより、
不変のデータ「名称、説明、性能」を一つにまとめて、
所持数は別途に管理する方が構造上いいのではと思
そうか、使用するメモリの話か。
0746名前は開発中のものです。
2009/01/28(水) 05:02:50ID:oP92b7pR3000 * 3000 * 3000
0747名前は開発中のものです。
2009/01/28(水) 10:26:16ID:LWUNhc76変数名の後ろに[]をつけ加え、その間に添字(インデックス)を1個(1次元配列)
または、カンマ,で区切って2個(2次元配列)入れてください。
この添字を指定すると配列が自動的に作成されます。
配列の先頭番号は0です。大きい配列を使うとメモリを消費してしまうので気をつけてください。
添字にマイナスの値を使用してはいけません。
各配列で32,000個までのインデックスを使用でき、全体で1,000,000サイズの配列を管理できます。
0748名前は開発中のものです。
2009/01/29(木) 01:42:29ID:9p/g/bvgitem[]っていう配列に[個数][名称][説明][性能]の順で格納して
アイテムID*4 + a (a = 0 〜 3)で参照すればできるけど・・・
問題はメモリじゃなくて設計上よろしくない。
アイテムの内容をそのまま配列に記述して、さらに直接アイテムIDで参照していると
アイテムの種類を増減させたときそのアイテム以降のデータを全て直さなければならなくなるっていう
アイテムIDを個別に振るタイプでは同じ問題をはらんでいるけど
このやり方だと連番になっているので修正量が半端じゃない
0749名前は開発中のものです。
2009/01/30(金) 09:46:51ID:Dxz4sk1v名称とか性能とか全部含めて。
……何でそれを三乗するんだろ?
0750名前は開発中のものです。
2009/01/31(土) 01:05:21ID:/v1G/0Es1次元にアイテムに求められるもの全部入るとは限らない。
「表」なら、一次元で完結することはあまりない。
たいてい2次元必要だろ
名前だけが必要なら1次元で済むかもしれないが、
誰が何を持っているか、というような個人の情報を格納するとなると1次元では足りない。
複数次元なら、そのぶんかかるのは自明。
n次元 n乗
0751名前は開発中のものです。
2009/01/31(土) 02:25:37ID:rlXWUIoUアイテムの話なら、
必要な配列の要素の総数 = アイテムの個数 x アイテムのステータス
で済む話だし。
0752名前は開発中のものです。
2009/01/31(土) 04:49:01ID:Fymynsm1つまり、アイテム5000個の名称、説明、性能の表を記述するのに、
5000*3じゃなくて、5000の2乗だけ必要、ということ?
5000*4997が空白になるんだが、そういうことなのか?
0753名前は開発中のものです。
2009/01/31(土) 18:11:05ID:zdMDroAqアイテムと装備でわけるとかさ
GMの配列はサイズ宣言しなくていいんだし>>752みたいに考えなくていいだろ
>>747ってヘルプのやつだよな
これみると2次元までしか使えないんじゃないだろうか
0754名前は開発中のものです。
2009/01/31(土) 20:52:47ID:dFEgAXD40755名前は開発中のものです。
2009/01/31(土) 23:16:19ID:+Qm7r/E2このカクカク具合は嫌だな
0756名前は開発中のものです。
2009/02/01(日) 02:09:16ID:VioXBIy7次元で分けるとか、次元という言葉に拘っているみたいだけど、
そもそも次元というものを正確に理解していないんじゃなかろうか。
例えば>>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各変数を設定できるデータを100個ほど常時保持させ、装備入手に伴い空いている(数値が0である)データにその装備が持つ値を代入、
あとは増減をその内部で行い、装備が破壊や破棄された際に数値を0に戻す
などという方法でできるのでしょうか。
もっと簡単な方法があればご享受賜りたいです。
0759名前は開発中のものです。
2009/02/01(日) 12:39:25ID:0y6Ohlui同一人物でないんでない?
配列の中の配列を多次元配列と同一に扱ってるだけじゃないかな
これはグラフィクハンドル格納して使ったり便利だけど
アイテムなら素直にデータ構造でいいと思う
0760名前は開発中のものです。
2009/02/01(日) 17:38:16ID:lUYLBl6P>各変数を設定できるデータを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もしくは思い通りの順番にインスタンスを生成していく
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もっと正確に言えば、
Begin step イベント→ timeline の呼び出し → alarm イベント→...→ Normal step イベント ...
って感じみたいだ。
0767764
2009/02/04(水) 00:41:01ID:28umjKE8ありがとうございます。むしろ自分こそ自分でやれよと
いう感じですね、、アホな質問すいません…。
>618 >620あたりでこのスレにカキコしたんですが
なんでゲーム中でハングアップするのかわからないまま2ヶ月が過ぎました…
原因の最有力候補たるオブジェクト
(このオブジェクトがある時必ずエラーがおきる)を1から
作り直したのに、また同じようにハングアップしてしまいます。。
そろそろ個人で作るのが限界かもしれません…
自分がメッセアド晒したら連絡して原因を一緒に究明してやるぜ、、という
素敵なお方とかいませんか…。。
0768764
2009/02/04(水) 00:43:25ID:28umjKE8メッセでgmkファイル送るので、ということです。
0769名前は開発中のものです。
2009/02/04(水) 02:38:04ID:WYUwJI4p■ このスレッドは過去ログ倉庫に格納されています