【2D】ゲーム作成ツールGameMaker part3【マンセー】at GAMEDEV
【2D】ゲーム作成ツールGameMaker part3【マンセー】 - 暇つぶし2ch321:名前は開発中のものです。
08/10/11 18:30:28 J25bobba
画面全体を真っ暗にするにはどうすれば良いでしょうか?

322:名前は開発中のものです。
08/10/11 22:42:26 VYtC5Q29
>>321
それは画面を完全黒で塗りつぶすということ?

それとも、半透明の黒(変な表現だな)で暗闇を作りたいってこと?

どっちにしろ、レイヤーを変更して一番前に表示するようにしてみたら?

323:名前は開発中のものです。
08/10/12 19:20:19 0LPSWnKh
>>322
画面を完全に黒で塗りつぶしたいのです

324:名前は開発中のものです。
08/10/12 20:59:20 WCmVlsh4
draw_rectangleアクションで高さと幅をroomと同じにして色を黒にするといいんじゃない?

325:名前は開発中のものです。
08/10/12 23:04:23 0LPSWnKh
>>324
なるほど、ありがとうございます。盲点でした・・・。

326:325
08/10/12 23:27:26 0LPSWnKh
一応やり方は分かったのですがイマイチそれをどう実行すべきか分かりません。
draw_rectangle(x1,y1,x2,y2,false)の座標1(x1,y1)はルームの左上(0?)かと思いますが
座標2(x2,y2)はどう指定すれば良いのか悩んでおります。

(0,0,room_heigh,room_width,false)ではどうも違うようなのです。何が間違っているのでしょうか?

327:名前は開発中のものです。
08/10/13 01:58:15 AHWrAmb7
>>326
本体のバージョンは?

328:名前は開発中のものです。
08/10/13 01:59:44 KOVLXVwd
というかwidthとheightが逆なのでは

329:名前は開発中のものです。
08/10/13 03:38:00 RgqatT8r
>>326
>>328の言うとおり、widthは横、heightは縦。
(ついでにいうとheightのtも抜けてるが)

黒い長方形が一切見られないのなら:
1) drawイベントで実行している?
2) depthを一番小さくしてる?

330:名前は開発中のものです。
08/10/13 10:30:18 v588R7se
>>328
>>329
ありがとうございます。色々とスペルやら間違っていたようですね。
コリジョンイベントで実行していました。

本当にありがとうございます。

331:名前は開発中のものです。
08/10/17 21:27:46 dQ5aX5kq
GM6でグラディウス式の横シューティングゲームを作っているのですが、
弾オブジェクトの数の上限を自機と各オプションそれぞれに設けたいと
思っているのですが、どうすればいいのかさっぱり見当がつきません。
どうすれば良いのでしょうか?

332:名前は開発中のものです。
08/10/17 22:05:41 0ROIYotH
弾オブジェクトが出来た時にAに+1して消えた時にAから-1するってのはどうかな?
3発上限ならAが3以下の時だけ発射出来るようにするとか。

333:331
08/10/18 17:21:01 QonRt8Q9
なるほど、変数を使えばよかったんですね。
instance_number()を使うことしか頭に無かったので助かりました。
ありがとうございます。

334:名前は開発中のものです。
08/10/23 23:03:49 URptRMn4
公式・・・もう動かなくなってどのくらい起つのだろう。 早くバージョンアップしてほしい。

335:名前は開発中のものです。
08/10/25 07:24:32 YPdYk3/P
シンボルエンカウントのRPG的な物を作りたいのですが
以前に誰かが作ったサンプルなどありませんでしょうか?

336:名前は開発中のものです。
08/10/29 07:41:16 B8z2rdZk
GM6ですがroom1からroom2に移動した後、room2に移動する直前の状態のroom1に戻りたいのですが
どうすれば良いのでしょう?

普通に戻ってしまうとroom1の最初の状態に戻ってしまいます。
よろしくお願いします。

337:名前は開発中のものです。
08/10/29 08:29:55 vZOkTfmY
roomのsettingsタブにある、Persistentのチェックを入れるとできるはず。

338:名前は開発中のものです。
08/10/29 12:12:52 SJ76vo7y
なんか、変な事が起こったので報告。

原因は不明だけど突然GameMaker製のゲームだけ、やたら重くなるという現象が起きました(バージョンは5.3、6で確認)
他のゲームやアプリケーションは何も問題なかったのですが、GameMaker製のゲームにだけ異常が起こります。
60fpsのゲームが常に40fps以下になったり。

再起動で治りました。


339:名前は開発中のものです。
08/10/29 21:20:06 Jov+JTxt
Show &help on function and variable names

Show the origin and &bounding box in the sprite image

&Run games in secure mode, not executing programs
セキュアモードで実行する, プログラムを実行しない

これらの訳を手伝ってほしい

340:名前は開発中のものです。
08/10/29 23:19:05 CygkE/Te
>>339
翻訳作業されてる方かな
英語を訳すというより実際にどうなるのかを日本語で説明した方が初心者には有り難いかも
もちろん訳し方の好みがあると思うのであくまで私の意見ということで

スクリプト編集の際、エディタ下部に関数/変数の候補を表示する
スプライト編集の際、スプライトの原点と当たり判定を示す矩形を表示する

341:名前は開発中のものです。
08/10/29 23:23:51 CygkE/Te
解説サイトやwiki編集かと思って書いたけど
もしかしたらGMそのものを日本語化するのが目的なのかな
そうだったらこんな冗長な文面は適さないですよね
ということで私のレスは忘れて下さい

342:名前は開発中のものです。
08/10/29 23:29:37 /+O62xmv
訳してたら先に答えてくれてた人がいた・・・。
ということで、GMそのものを日本語化しているという前提でやってみましたしだいです。

>>339
Show &help on function and variable names
関数と変数名の候補を表示する

Show the origin and &bounding box in the sprite image
スプライトのプレビューに基点(origin)と境界枠(bounding box)を表示する

&Run games in secure mode, not executing programs
セキュアモードでゲームを実行し、外部プログラムを実行させない

こんな感じだろうか。
origin (スプライトの原点)や bounding box(当たり判定が実行される領域) の訳は
全体的に統一した方がよいと思う。

343:名前は開発中のものです。
08/10/30 20:15:39 I528xhb9
>>340
>>342
ありがとうございます。
言われている通りGMそのものを日本語化しております。

E-WordChanger を使っており、その辞書ファイルに記述しています。

ツールチップは1つ試してみましたが、1度成功したと思っていても
次に表示すると日本語されていませんね。
中にはソフトを使ってもclipできない文章もありますね。
そちらも翻訳表示できません。

うまく表示できている人は居られるのでしょうか?

344:名前は開発中のものです。
08/10/31 18:19:41 YzRs5LJ8
ちょいと困っています。

キャラとか画像が移動すると、ぶれるようなかすれるような感じでぼやけてしまいます。
移動させてもちゃんと写るようにするにはどうしたらいいですか?

room speedは30です。

345:名前は開発中のものです。
08/10/31 18:27:01 YzRs5LJ8
あと URLリンク(gamdev.org) はどこかに移転したんですか?

346:名前は開発中のものです。
08/10/31 19:54:07 oCQp1Dl8
>>344
原因は色々ありうるけど同じく色々と試してみたと思うので意外な罠を一つ
俺がハマったのはモニタのリフレッシュレート
うちの環境だと60hzなら普通に動くけど75hzだと掠れる
恐らく環境依存だしGMとは関係ない部分だから気づきにくい

347:336
08/10/31 21:53:02 EFPq/rMO
>>337
遅くなりましたがありがとうございます。
出来ました。

348:名前は開発中のものです。
08/10/31 22:53:49 YzRs5LJ8
>>346
モニタのリフレッシュレートとGMの設定とroom speedをそれぞれ60にしてみたけど、やっぱりブレれぅ・・・
液晶だからかな・・・

そしてUse synchronization avoid tearingって意味がわかんない?
エキサイト翻訳したら「同期が引き裂くのを避ける使用」って出る。
tearingを単体で調べても引き裂くとか猛烈とかな意味がでる。

同期するのを避ける?

349:名前は開発中のものです。
08/10/31 23:26:30 mSkOAagk
>>348
さすがに俺も液晶よ
上で書いたケースとは別件かな
もし他の方がGMで作った実行ファイルでも同様の症状が出るなら相性かもしれない
ドライバ、グラボ、モニタ、DiretXのバージョンなどなど

350:名前は開発中のものです。
08/11/01 00:14:21 cP7CN4r/
use synchronizationで「同期(シンクロ)を使用する」
avoid tearingで「破綻することを回避する」
tear=破ける,裂ける,破綻する

Use synchronization avoid tearingで「破綻を回避するための同期(シンクロ)を使用する(使用せよ)」または「同期を使用して破綻を回避する」

例文:
Synchronization - Avoiding Frame Tears=フレーム落ちを回避するための同期

351:名前は開発中のものです。
08/11/01 00:21:55 cP7CN4r/
シューティングゲームの作成では、PC処理速度を超える過剰負荷がかかった時に、
「コマ落ち(フレーム落ち)」させるか「処理落ち」させるか、
フレームレート,リフレッシュレートの同期処理に悩みますよね

352:名前は開発中のものです。
08/11/01 01:01:45 7HKnkTOG
>>348
ティアリングというのは、画像が横に動いているときに
画面の途中でちぎれたように上下がずれて見える現象。
それを避けるためにモニタの信号と同期をとるというのが設定の意味。
画像がぶれるというのとは関係ないと思う。

仮にビューを使っている場合、やりようによっては
更新タイミングの違いでぶれて見えることがあるけど
そういうことはない?

353:名前は開発中のものです。
08/11/01 22:42:10 spXHa3/O
こう・・・表記が変なのかなーと自分を疑ったり

ブレるというかぼやけるというか、ブラーが掛かるというかにじむというか・・・

左が普通で、右が動かしたときに見える感じ

URLリンク(rainbow2.sakuratan.com)

354:名前は開発中のものです。
08/11/01 23:05:00 8D1Uiupl
>>353
なるほど
スクリーンショットを撮って見ると輪郭パリパリで綺麗なのに
実際に動いてるのを肉眼で見てるとボヤけて見えるってことかな
モニタの応答速度が遅いのが原因、に1票



355:名前は開発中のものです。
08/11/02 00:23:31 UAtrgN40
このスクリーンショットが実際に動かしてる時に撮ったものなら応答速度ではないんですが
どうなんでしょう

356:名前は開発中のものです。
08/11/02 00:46:03 q7EnVYah
>>354
応答速度なのかな・・・
どこで調べたらわかるんだろ。

357:名前は開発中のものです。
08/11/02 01:10:29 q7EnVYah
SONY SDM-S75F っていうモニター使ってるけど、これがダメなんかな・・・

358:名前は開発中のものです。
08/11/02 07:11:53 Uttx017t
もう既にいろいろ試していると思うけど、とりあえず。
1)新しくテスト用のゲームを作ってみる
 問題が起こる最低限の環境のゲームを作ってみる。
 もし問題が起こらなければ、元のゲームのどこかに問題がある。
  元のゲームを放置して新しく作り直すもよし、元のゲームの問題点を探すのもよし。
 もし問題がまだ起こるのなら↓
2)他の環境で調べてみる。
 テスト用でもいいから作ったゲームを公開して、同じ現象が起こるかチェックしてもらう。
 それでも問題が起こるのなら、アルゴリズムに問題がある可能性大。
 もし問題が起こらないのなら、PCの環境のどこかに問題がある。(相性とか?)

359:名前は開発中のものです。
08/11/03 11:05:08 0rtuC+vp
アクションゲームで、下に落ちたら死亡(画面からはみ出たら死亡)にしたいのですが
画面の左右と上にはみでないようにするにはどうすればいいでしょうか。5.3です

360:名前は開発中のものです。
08/11/03 19:13:01 HnYJ+ws5
ルーム外イベント使わずに
if (y>room_height) instance_destroy
で出来るはず

361:名前は開発中のものです。
08/11/03 20:24:19 SR5b1R59
Gamemakerって大掛りなACTでGMLをふんだんに使ったサンプルとかないのかね?

勉強したいんだけど、リンク切ればかりで出来ない英語の勉強するほうが先になりそうな予感

362:名前は開発中のものです。
08/11/03 21:53:58 HnYJ+ws5
シューティングサンプル1945の全部gmlコード版があった気がする…

363:名前は開発中のものです。
08/11/03 22:24:41 uwgdwITo
>>361
日本語の資料はあまり多くないね
サンプルなら質も量も本家フォーラムが一番
URLリンク(gmc.yoyogames.com)
GMLなら↑のScripts[GML]
多少英語が読めてGMLを理解してる人なら宝の山だと思う
英語が読めなくてもGMLの理解があれば漁ってみる価値はある

かなり話題がそれるけどFlex&ActionScriptのサンプルも結構面白い
ECMAScript系の言語仕様、イベントドリブン、OOP(的である)、と共通点が多い
出来上がるのがFlashだからASに乗り換えるわけにはいかないけど御参考までに。

364:名前は開発中のものです。
08/11/03 23:43:47 SR5b1R59
>>362
検索中スルーしてたかもなんで、後で、探してみます。

>>363
本家フォーラム倦厭してたけど、チラ見しただけでも大量の投稿で、まさに宝の山っぽいです。
自分は英語あまり読めませんが(;´Д`)
Action Scriptのほうはちょっと気になってたんですが、そっちも後で見てみることにします。

御二方情報ありがとうです

365:名前は開発中のものです。
08/11/05 14:09:40 lQ1u3lWL
デフォルトの背景background0と動きのある第二の背景background1をルームの設定に用意したのですが
途中でこれらを切り替えるにはどうしたらいいのでしょうか?

366:名前は開発中のものです。
08/11/05 22:26:45 XjRGW3LY
>>365
ヘルプ見たら「background_○○」って関数が大量にあるので色々できると思うよ

単純に2つの背景を排他的に切り替えるだけなら
background_visible[0] = !background_visible[0];
background_visible[1] = !background_visible[1];
// visible when room starts の設定によって開始時に1つだけ表示させとく
// つまり片方にだけチェックをいれる

ほとんど同じ処理を分かりやすく書くと
if( background_visible[0] )
{
background_visible[0] = false;
background_visible[1] = true;
}
else
{
background_visible[0] = true;
background_visible[1] = false;
}

367:名前は開発中のものです。
08/11/05 22:31:36 XjRGW3LY
ごめんなさい修正
直接backgroundのインデックスを指定すれば良いみたい

if( background_index == 0 )
background_index = 1;
else
background_index = 0;

368:名前は開発中のものです。
08/11/05 23:58:10 lQ1u3lWL
えーと、試して見たのですが背景がかわらず動かしたキャラクターの残像が無限に描写される状態になってしまいました。

369:名前は開発中のものです。
08/11/06 00:01:14 XjRGW3LY
>>368
ただのサンプルだから書く場所にもよるよ
毎フレーム呼び出したらそういう状態になるかも
例えばglobal mouse left pressedあたりに書けば
マウス押すたびに切り替わるはず

370:名前は開発中のものです。
08/11/06 00:07:30 lQ1u3lWL
即レスありがとうございます
一応初めからマウスがクリックされた時というところでそれをやっているのですが…

371:名前は開発中のものです。
08/11/06 00:36:35 RiMAKIfy
>>367
GMLではarray[0]とarrayは同じものを指すから、それは単に
background_index[0] に一番最初に作ったbackground(id=0)と
2番目(id=1)を交互に割り当ててるだけ。
>366の方法が正解。

372:名前は開発中のものです。
08/11/06 01:04:58 eaSEHczR
キャラクター「A」と「B」が横一面で左に向かって競争していて、
「AがBを追い抜いたとき」と「BがAを追い抜いたとき」で別々に音を流したいのですがどうすればいいのでしょう。

上とは同じ内容で違う質問なんですが
試しにA.xがB.xの値の-1になった時~などという風にIf a variabels has a valueでやってみましたができませんでした。
これではだめなのでしょうか?

373:名前は開発中のものです。
08/11/06 07:42:34 LwQsPuS+
>>372
単純に
Aのx座標 < Bのx座標の時は音楽Bを流す、
Aのx座標 > Bのx座標の時は音楽Aを流す。
で良いんじゃないかな?

374:名前は開発中のものです。
08/11/06 09:00:15 5MtmmVSK
追い抜いたときってのを調べるには、1ステップ前の状態を記録しといた方がいいんじゃない?

例えば、

Stepに
 difference = Aのx座標 - Bのx座標;
を入れて、

Stepの最後の行かEnd Stepに
 prev_difference = difference;
を入れる。

そしてStep内で、
 prev_differenceとdifferenceをチェックする。

prev_difference(1フレーム前の差)とdifference(今現在の差)を見たとき、
マイナスからプラスになったり、プラスからマイナスになったりしたときが、
どちらかが追い抜いたとき、となる。どっちがどっちかはすぐわかるはず。

ちなみに2つ目の質問に答えると、ゲームに限らず、プログラムはそこに書かれているとおりに動く。
どういうことかというと、A.xがB.x-1になったときに音を再生する、
つまり、それが例え追い抜いたとしても後ろから近づいただけだとしても、座標軸でBがAの左にちょうど1離れたところにいる瞬間に音を鳴らす、という判定がかなりシビアな表現になる。

375:名前は開発中のものです。
08/11/06 12:01:46 5MtmmVSK
そうそう、この場合prev_differenceを初期化することを忘れずに。
Create eventで、prev_difference = 0;とでも書いておけば大丈夫。
これを書いておかないと、Step内でチェックしようとしたときに「prev_differenceって何なんだ?」というエラーを返されるはず。

376:名前は開発中のものです。
08/11/07 07:12:26 pXoTyMbW
そういやxpreviousってのがあった。
xpreviousってのはその名の通り、1フレーム前のxの値。
これを使えば>>374で書いたprev_differenceは要らなくなる。

この場合の使用例としては↓

if (A.xprevious - B.xprevious > 0 && A.x - B.x < 0)
{
// 1フレーム前でBが前(左)だったのが、今のフレームでAが前(左)になった、
// つまりAがBを追い抜いた瞬間
}
else if (A.xprevious - B.xprevious < 0 && A.x - B.x > 0)
{
// 1フレーム前でAが前(左)だったのが、今のフレームでBが前(左)になった、
// つまりBがAを追い抜いた瞬間
}

377:名前は開発中のものです。
08/11/07 07:28:10 pXoTyMbW
ちょっとした注意。
HelpのUsing Game MakerのEventsにも書いてあるけど、
ゲーム内の全てのアクションは↓の順に実行されていく。
・Begin step events
・Alarm events
・Keyboard, Key press, and Key release events
・Mouse events
・Normal step events
・(now all instances are set to their new positions)
・Collision events
・End step events
・Drawing events

ここで言いたいのは、stepイベントの後に全てのインスタンスの移動が行われるってこと。
だから>>376で書いたのは、End stepイベントにでも入れておくといいと思う。
……まぁ1フレームの差だけど。

378:名前は開発中のものです。
08/11/07 17:17:30 q2bnCqzi
不思議のダンジョンのようなターン性を採用したいのですがどのように作ればいいのでしょう?

379:名前は開発中のものです。
08/11/07 22:09:04 dk+hUO84
割り込む感じでスイマセン、質問です
非公式サイトから導入した日本語描画スクリプトですがフェード機能をつけるには
どうしたらいいですか?
drawアクションじゃないからalphaも使えないし……

380:名前は開発中のものです。
08/11/08 00:32:27 ralVUMsS
>>378
こんなので良ければ参考にして下さい
URLリンク(www1.axfc.net)

381:名前は開発中のものです。
08/11/08 01:05:10 YaFy+mMy
おお、ありがとうございます。
敵が複数いる場合でも同じ処理で大丈夫何でしょうか?

382:名前は開発中のものです。
08/11/08 01:17:10 tiFPEnIw
うーん。

敵が複数居る場合、固定値ではなく、数値を増やしていって
最後に行動したモンスター(キャラ)が変数を1に戻すとかどうかな?

383:名前は開発中のものです。
08/11/08 01:24:43 YaFy+mMy
敵の数がある程度減ったらランダムで数匹追加などもしたいのですが
減ったり増えたりした時の処理が難しそうでどうも…

384:名前は開発中のものです。
08/11/08 01:29:31 tiFPEnIw
global変数(A)に、現状の敵個数を記憶しておいて
敵が死ぬ時にglobal変数(A)を減らす。

ある程度の数値になったら敵を追加。
追加されたらglobal変数(A)が増えるようにしておく。

チェックするのはBegin stepでもEnd stepでもお好きな時にどうぞ?

385:名前は開発中のものです。
08/11/08 08:00:14 usFb+U0s
ダンジョンで思い出したけどダンジョン自動生成てのはやっぱり難しいもんなのかな。

386:名前は開発中のものです。
08/11/08 21:37:31 YaFy+mMy
>>384
遅れましたがありがとう
もう一つ質問したいのですが、「最初にランダムでどこか一方向に動く、動く前にもし行きたい方向に壁があれば残り三つからランダムでどこか一方向に、そこにも壁があれば~」という判断をさせたいのですがどういったアクションを組めばいいのでしょう?

387:名前は開発中のものです。
08/11/08 21:38:58 HeJ/3Xvw
URLリンク(amagame.blog12.fc2.com)
URLリンク(d.hatena.ne.jp)

これとか読んでみ。目から鱗な考え方だ

388:名前は開発中のものです。
08/11/08 21:51:38 tiFPEnIw
>>387
うっは、ブログの方のファイル落とそうとしてgamDEVという事に愕然とした!

誰かファイルもってないかなorz

389:名前は開発中のものです。
08/11/08 21:56:28 tiFPEnIw
>>386
まず処理したい系統を図式にして処理したい順番を考える。

質問の例だと、
1) 移動方向をランダムにチェック
 (壁があるかないか判断)
2) 壁がない?
 Y→移動
 N→1)に戻って処理しなおし

とするか、

1) 敵Aの周りの壁を総当たりチェック。
2) 移動できそうな場所を記憶。
3) その中からランダムに選択

とするか、が浮かぶ。
もちろん他にも良い手段はあると思う。

390:名前は開発中のものです。
08/11/08 22:45:40 YaFy+mMy
うーむなるほど
やはりそういうのにはGMLが必須なのでしょうか…

391:名前は開発中のものです。
08/11/08 22:52:26 tiFPEnIw
>>390
そっちのほうが楽ではあるけど、
処理の中に処理ってのは普通配置でもできるからガンバッ!

Control の Other にある、start/End block や else などをうまく組み合わせてみよう。

392:名前は開発中のものです。
08/11/09 14:58:27 XXK2SOj2
>>387
上の凄いな。考えもしなかった

393:名前は開発中のものです。
08/11/09 18:30:25 iQ0fQqMk
Access violation がでるなあ

execute piece of code だとエラー吐くのに
同じ内容をscripts に記述すると直るのは嫌らしい仕様だ

394:よこしま
08/11/09 20:36:08 +tEv1BfM
>>379
レジスト版の場合、以下の方法でフェードインできます。

1. mbtext_drawスクリプトの中でdraw_sprite_part()を呼び出している所が2カ所あるので、それらをdraw_sprite_part_ext()に書き換えます。

draw_sprite_part(..., pos_x, pos_y);

draw_sprite_part_ext(..., pos_x, pos_y, 1, 1, -1, global.my_text_alpha);

2. mbtext_draw()を呼び出す前に、global.my_text_alphaに0~1の値を代入します。

395:379
08/11/09 23:09:10 37vptB7Q
>>394
そうか…そこいじれば良かったのか…
ありがとうございます…
あと追加で質問なんですが…
文字を左から順番に出していくのに、いつもはstring_char_atなどを使っていたのですが、
mbtextの場合、文字列関数は使えないのでどうしたら良いでしょうか??

396:名前は開発中のものです。
08/11/09 23:25:02 UpE3UCrs
>>393
そんな「仕様」はないと思うけど
GM7だと、たまに何の変哲もないコードでエラーが出て
同じコード打ち直すとかコピペすると直るという現象が報告されてます

>>395
2バイト文字ならstring_copyで2文字取り出すとか
string_char_atでもう1文字くっつけるとか

397:名前は開発中のものです。
08/11/10 00:20:09 bX5vjmo9
>>396
そうなんですか・・・お騒がせしました
debuger が落ちる瞬間にアクセス違反が表示されていて
挿入方法で扱いが変わるみたいなのでそういうものかなと思ったんですけど違うみたいですね


398:名前は開発中のものです。
08/11/10 01:53:38 hROa89TY
ヘルスや変数などの数値を用意した0~9のスプライトで表示したいのですがどのようにすればいいんでしょうか

399:名前は開発中のものです。
08/11/10 02:40:36 l3rRgQmH
GM5ならdraw_text_sprite
GM6ならfont_add_sprite(要レジスト)してdraw_set_fontしてdraw_text
コード書けるなら文字列に変換して1文字ずつ切り出してdraw_sprite

400:名前は開発中のものです。
08/11/10 23:05:15 xqr6b0iA
>>398
まず数を文字列化して
for (i=1; i<=string_length(str); i+=1)
{

switch string_char_at(str, i)
{
case "0":
s = 0
break;
こんな感じで9まで行って、
draw_sprite_extとかでサブイメージをsに置き換えて表示する
*(1~9全部1つのスプライトにサブイメージとして入れておく)

401:名前は開発中のものです。
08/11/10 23:18:31 rXjUYemu
同じ敵がたくさん出てくるようにしたいのですが個別に体力を設定する方法はありますか?
ヘルスや変数を使うと敵全員共通のものとみなされてしまってどうも…

402:名前は開発中のものです。
08/11/10 23:23:09 PA4xWfUd
x=rundm(10)+1

403:名前は開発中のものです。
08/11/11 03:25:19 j6inckL9
>>401
例えばenemyってオブジェクトを作ったとして、
createイベントにhp = 100;ってコードを置いたとする。
drawイベント内で
health = hp;  ←ここ重要
そしてヘルスバーを描かせる。

こうすれば、個別にヘルスバーが減っていくはず。

healthってのは、全共通で使われる変数。ヘルスバーを描くためだけの仮の変数とでも意識しておくといいかも。
だからhealthって変数を、そのインスタンスが個別に持っている変数で上書きしてからバーを描く。

こんなイメージ
enemy (1匹目) // hpが50だとする
<draw event>
health = hp; // healthを50に設定
draw_healthbar (略) // ここでヘルスバーを描く(HP 50)

enemy (2匹目) // hpが30だとする
<draw event>
health = hp; // healthが50だったのが、30に上書きされる
draw_healthbar (略) // ここでヘルスバーを描く(HP 30)

404:名前は開発中のものです。
08/11/11 07:21:02 gKnNaknY
ありがとうございます
特に敵のヘルスバーを表示する必要はないのですがその時はdrawの部分を省けばいいのでしょうか

405:名前は開発中のものです。
08/11/11 08:14:23 eY/CDP8z
ならcreateでhp変数を設定すれば良いだけだと思う

globalじゃない限り普通の変数はそのオブジェクト内のみだから。

406:名前は開発中のものです。
08/11/11 22:50:05 cbXen0Dw
なるほど

407:名前は開発中のものです。
08/11/12 07:21:33 sHnxhObY
コリジョンで敵のhp減らすとかだとother.とか付けないと自分のhp減るから注意な

408:名前は開発中のものです。
08/11/12 16:13:15 4hbBOuzF
>>407
それは書き方にもよるけど……。
主人公が敵に攻撃したときと、敵が主人公の攻撃に当たったとき。
状況は同じだけど、どっちのイベントでHPを減らすようにしているのかで変わる。

409:名前は開発中のものです。
08/11/14 23:03:32 izAxC9WD
Scriptsで書いたコード中の変数も
呼び出したオブジェクトのローカル変数にされるのか・・・

ループ用変数が被りまくり\(^o^)/


410:名前は開発中のものです。
08/11/14 23:20:13 Bs1pE8FJ
そのためのvar宣言ですよ
var i
とかやると、iはスクリプト内でのみ有効になる

411:名前は開発中のものです。
08/11/14 23:40:22 izAxC9WD
うん、その作業をちまちまやってますw

この仕様ならargumentって要素があんまり意味ないような気がするんだけどなあ
せめてScriptsに隠蔽要素が欲しかった

412:名前は開発中のものです。
08/11/15 00:09:50 HG68xRSC



メーカーに勤めてないとなかなかわかりづらい豆知識
リフレッシュレート

よい子のみなちゃんは、60Hzと設定したら
モニタもそのとおりに60Hzでリフレッシュしていると思っているかもしれないが





否!!!!!!!!!!!!!!!!!!



60Hzで設定していても、モニタ側は59.944Hzや58.989Hzなど、
とにかく中途半端な数値でしかリフレッシュしないものがある。
モニタが粗悪品だったり、グラフィックボード(特にRADEON)が悪さをしていることが多い。

そしてこの場合、滑らかに移動しているように見えず、かなりカクカクして見える。
これを直すには、ビデオBIOSの更新やモニタのファームウェア更新しかないので
相当面倒だ。個人で直すことはまず出来ない。

413:名前は開発中のものです。
08/11/15 05:12:01 gZryKwbH
でも逆に言うと、Scriptsからローカル変数をいじれるんだよね。
今の仕様でいいと思うんだけどな。

414:名前は開発中のものです。
08/11/15 12:32:10 cZlHfE8C
今GM5.3Aでアクションゲームを作ろうとしているのですが、キャラクターの移動が良いように行われません。
(移動させるキーを押す→キャラクター移動→キーを放してもその場で静止せず、ずっと移動し続ける)
どのように行えばキーを放す際に静止するようにできるのでしょうか?初歩的な質問ですいません;

415:名前は開発中のものです。
08/11/15 13:05:07 cZlHfE8C
↑自己解決しました;



416:名前は開発中のものです。
08/11/15 14:24:35 PB/Zmvn5
「変数が○になったとき」や「変数が○以上になった時」ではなく
「変数Aに数値が加算されたとき」という条件を作るにはどのようにすればいいのでしょうか?

417:名前は開発中のものです。
08/11/15 15:00:10 gZryKwbH
加算されたとき
→1フレーム前の数値よりも今のフレームの数値が大きくなったとき
>>374-377と同じ考え方)

もしくは、その数値に加算したときに起こしたいアクションを置く(そのまんま)
(変数Aに加算した直後、起こしたいアクションを行う)

418:名前は開発中のものです。
08/11/15 15:22:11 cZlHfE8C
どうも414です。
ジャンプをさせようとしてジャンプは出来るようになったのですが、今度はキャラクターが地上にいる状態で動けなくなってしまいました。
(正確にはジャンプは出来るが横移動が全くできない状態)
どの様にすれば解決できるでしょうか?

419:名前は開発中のものです。
08/11/15 16:40:37 PB/Zmvn5
>>417
>>374~的なやり方で行くと
stepに
difference=LEVEL
difference<prev_differenceのときやりたい処理を行う
End stepに
prev_difference=difference
とこんな風でいいのでしょうか?

420:名前は開発中のものです。
08/11/15 18:04:15 gZryKwbH
>>419
パニくっているときは、とりあえず適当にいろいろ放り込んでしまいがち。
でも、それは全然解決にならない。詰まったときこそ落ち着こう。
「行き詰ったら原点に返れ」
詰まったらまず、何をしたいのかを明確にする。それから、したいことを分析しよう。


見たところ、レベルが上がったときに何かをしたいようだね。
まぁそれでできなくはないんだけど。……一つ問題を除けば。

この場合differenceは今のレベル、prev_differenceは1フレーム前のレベル。
difference<prev_differenceってのはどういう意味になるか。
今のレベルが1フレーム前のレベルより小さいとき、つまりレベルが下がったときになる。
何をしているのか分からないままとりあえず入れるんじゃなくて、何をやってるのかを考えて理解しよう。


ちなみにdifferenceってのは「差」のこと。
前の例では競争だったから、二人の差ということでdifferenceという単語を使っただけ。
prevってのは「前」を意味するpreviousの略。

differenceは使わずに、LEVELとprev_LEVELの2つだけでいい。
わかりづらかったら、いっそmae_LEVELと書いてしまうのもありだな。
自分がわからないプログラムは作らない。これ鉄則。

<Step>
LEVEL > mae_LEVEL    // 今のレベルが前のレベルより大きくなったとき

<End Step>
mae_LEVEL = LEVEL    // 「前のレベル」を今のレベルに更新する。

421:名前は開発中のものです。
08/11/15 18:04:49 gZryKwbH
>>418
地上にいる間ずっと、地面との接触が起きているのかもしれない。
でも>>414のことも考えると、歩かせるアクションの方にも問題があるのかもしれない。
どこかで「止める」アクションを使っていてそれが影響しているとか。
サンプルが非公式情報サイトかどこかになかったかな……。
サンプルを探してみるのもいいし、GMにexampleとして最初から入っているものがあったらそれを見てみるのもいい。

422:名前は開発中のものです。
08/11/15 18:08:02 PB/Zmvn5
>>420
なるほど…丁寧にありがとうございます

423:名前は開発中のものです。
08/11/15 18:39:46 cZlHfE8C
>>421
了解しました。
返答ありがとうございます

424:名前は開発中のものです。
08/11/16 10:34:59 aHkifR23
3桁の数値を獲得してそれぞれオリジナルのスプライトで表示したいのですが
百の位と十の位と一の位を獲得するにはどのようにしたらいいのでしょう。

425:名前は開発中のものです。
08/11/16 12:24:09 uIhvcRmv
>>424
>400あたり参照
計算で出したいなら、一の位は10で割った余り、すなわち number mod 10
十の位は10で割ってから一の位をとればいいから (number div 10) mod 10
同じ考えで百の位は (number div 100) mod 10

426:名前は開発中のものです。
08/11/16 14:19:08 aHkifR23
>>425
簡単に作ることができました!ありがとうございます

427:名前は開発中のものです。
08/11/16 17:29:30 HhlndW4R
アクションゲームで、敵AのCreateに変数hp(体力)を設定して、主人公の攻撃が当たった時にhpを減らすよう設定しました。
その敵Aを数体設置してテストプレイを始め一体を倒したところちょっと経ってから「UNKNOWN variable hp」のようなエラーが出てしまうようになりました。
変数操作も消滅もモンスター内でselfで行っているのですが何か間違っているのでしょうか…

428:名前は開発中のものです。
08/11/16 18:48:04 l0hPwkQ6
>>427
エラーメッセージでどのオブジェクトのどのイベントの
どのアクションってところまで教えてくれるんだから、まずはそこを見るべし。
そのエラーになる要因はいくつも考えられるけど、それだけの情報じゃ絞りこめん。

> 一体を倒したところちょっと経ってから
その倒したところで何をしてるの? 例えば他のオブジェクトにchangeしたりしてない?

429:名前は開発中のものです。
08/11/16 18:56:22 HhlndW4R
>>428
ステップで「hpが0以下になったら消滅(死亡)」と言うのを設定しているんですがそれが変数を見失ってるみたいです。

倒したあとは自分がその辺を動き回っているだけでオブジェクト変更などは行っていないはずです

430:名前は開発中のものです。
08/11/16 19:27:32 OWHuy+Yr
良ければうp

431:名前は開発中のものです。
08/11/17 02:32:01 TD8Ccrf3
Createイベントで変数を初期化してるのにエラーが出るって場合は
イベント自体実行されていないことが考えられる。よくある例としては
・Parentのイベントで変数を定義してるけど、子オブジェクトで継承イベントを呼んでない
・change the instanceでインスタンスを変更するときにイベントを実行していない

また、instance.variable のようにドット付きで変数を参照している場合には
instanceの方が存在してないという可能性もある。
削除されたインスタンスを参照していたり、deactivateされていたりなど。

ただ、話を聞くかぎりではどちらにも当てはまらないみたいだから
原因は他のところにあると思う。
やっぱり実際のオブジェクト情報を見ないと特定は難しいかな。

432:名前は開発中のものです。
08/11/17 05:45:22 GSdqregN
まあいいとこ、

それらのインスタンスで「共有」してる形になっているので
ある一体が消えると変数も消えてしまってる

ってとこじゃないの
インスタンスABCDEで一つの変数を見ていて
インスタンスAが消えたと同時に変数も消え
BCDEが参照できなくなっていると

433:名前は開発中のものです。
08/11/17 10:24:12 JkLZj++k
>主人公の攻撃が当たった時にhpを減らすよう設定
>ステップで「hpが0以下になったら消滅(死亡)」

この辺の実行される順番に問題があると予想してみる。

もしそうだったら、「hpが0以下になったら消滅(死亡)」を、ステップじゃなくコリジョンイベントで実行したら直る、……かもしれない。

434:名前は開発中のものです。
08/11/17 16:16:23 7QGWWpc1
マウスの動きに合わせて動くオブジェクトを作りたいのですがどうすれば良いでしょうか?
stepでマウスの座標に移動させてしまうと、
そのオブジェクトがマウス以外の要因(敵との接触など)で移動した場合も、すぐにマウスの座標に戻ってしまいます。

説明が下手ですみませんが、よろしくお願いします。

435:名前は開発中のものです。
08/11/17 18:01:40 JkLZj++k
>マウスの動きに合わせて動くオブジェクトを作りたい
これがやりたいことなら、
>そのオブジェクトがマウス以外の要因(敵との接触など)で移動した場合も、すぐにマウスの座標に戻る
これは正しい動作ってことになるよね。マウスの動きに合わせて動いてるんだから。

どういうときにどういう動作をさせたいのか。
やりたいことをもう少し詳しく具体的に考えて。

436:名前は開発中のものです。
08/11/17 20:03:59 qkRbLFEU
>>434
つまり一定速度でマウスに向かわせたいってこと??
もしそうならpoint_directionを使うといいと思う

437:名前は開発中のものです。
08/11/17 21:34:27 7QGWWpc1
説明が下手で申し訳ありません。

>>435,>>436
そうです、それが正しい動作なのです。
ですが私が目指しているのは「マウスの座標に移動する」のではなく「マウスの動きにあわせる」なのです。
例えばマウスを右に動かしたらオブジェクトも右に、マウスの移動量だけ動く。という事がしたいのです。

438:名前は開発中のものです。
08/11/17 22:07:33 PQNNdjbn
>>437
移動する前にマウス座標と移動したあとのマウス座標を比較するとかで対応とか無理ですか?

439:名前は開発中のものです。
08/11/17 22:08:05 PQNNdjbn
移動する前と後の座標を比較 ですね。誤字申し訳ない。

440:名前は開発中のものです。
08/11/17 22:38:22 7QGWWpc1
>>438,>>439
ありがとうございます。
何となくやり方は分かりましたがそれをコードで表すにはどうすべきか迷っております。
ちなみにGM6です。

441:名前は開発中のものです。
08/11/17 23:26:43 qkRbLFEU
うーん、まだやりたいことがよく分からないけど…
つまり初めはマウスと同じ位置にインスタンスがあって、で何かによってズラされると
マウスに平行して動くってこと??
もしそうなら例えば
ステップイベントでx、y、をマウス座標+global.pos_x,global.pos_yてして
変数の値をコントロールするとか…

442:名前は開発中のものです。
08/11/17 23:39:43 PQNNdjbn
>>440

>>441
のように、マウス座標取得してウンヌン。
>>420あたりの感じでできますか?

自分もいまいち理解しきれてませんが、
マウスを転がすところがした方向にインスタンスを移動させたいって事だと思います。
この場合、マウスポインタが画面外に出た場合や
さらに移動させようとしてマウスを元に戻した場合など変になりませんか?


純粋にマウスが移動したピクセス値だけを取得する関数ってありましたっけ?

443:名前は開発中のものです。
08/11/17 23:46:34 TD8Ccrf3
考え方としては>374の方が近いんじゃないかな
毎回mouse_x, mouse_yの値を覚えといて
x += mouse_x - (前回の値) とかすればよろし

444:名前は開発中のものです。
08/11/18 00:19:10 0wQt7vmy
基本的に、ピログラムってのは原始的なもの。

高度な、「以前の値から勝手に加減して現在位置を割り出す」なんてことはできない。


たいていが

まずマウスの位置をプログラマが取得
更にマウスの位置をプログラマで取得、
その差を自分ではじき出して移動量とする

そんな感じで書かないといけない

一個の関数でポンってできるようなものはあまりない。

445:440
08/11/18 06:04:44 MofBkydO
>>441-444
ありがとうございます。前回の値を覚えさせておく事で何とか私の思っている通りに出来ました。

マウス座標 - 前回のマウス座標 + 前回のオブジェクト座標 に移動させる事で出来ました。
本当にありがとうございました。

446:名前は開発中のものです。
08/11/19 15:26:02 DeAHgIn+
ジョイスティックって設定項目あったっけ?

見当たらんのだけど

447:名前は開発中のものです。
08/11/19 18:07:19 4za16kRK
以前ダンジョンゲームのターン制についての質問をした者です
ターン制に関してはぎこちないながらも何とか完成したのですが、
毎回周囲のマスが開いているか確認→空いているところにランダムに移動だと挙動不審というか妙な動きになってしまいます。
主人公が近くにいるときは追って動く、一本道では後戻りせずなるべくまっすぐ進む、といった動きをさせたいのですが
どのようにアクションを組めばいいのでしょうか。

448:名前は開発中のものです。
08/11/19 18:19:51 ratnEFy2
>>446
設定項目?
GMのヘルプの
The Game Maker Language (GML)
→User Interaction
→The Joystick
にあるやつじゃなくて?

キーコンフィグしたいってことなら、
グローバル変数でも作ってjoystick_check_buttonを使うといいと思う。

>>447
ターン制の動きができた、と。
んで、状況に応じて動きを制限してやりたい、と?
>主人公が近くにいるときは追って動く
>一本道では後戻りせずなるべくまっすぐ進む
やりたいことちゃんとわかってるじゃないか。

>主人公が近くにいるときは
>>追って動く

>一本道では
>>後戻りせずなるべくまっすぐ進む

こう分けて、もう少し考えてみ?

449:名前は開発中のものです。
08/11/19 18:31:18 ratnEFy2
一本道のとき、そのキャラの周囲に通れるマスはいくつある?
後戻りってのは、前回いたマスに行くことだよね?

450:名前は開発中のものです。
08/11/19 19:05:35 9SobK3CI
>>446
ジョイスティックイベントを探してるんだったら、Mouseの中にある。

451:名前は開発中のものです。
08/11/20 02:15:20 oldAvKXc
斜め入力できる???

例えば
top
right

の順だと斜め入力にならない

452:名前は開発中のものです。
08/11/20 02:43:38 JLC+2EzT
キー操作で斜め移動する時と同じ原理で、たとえばupで y -= 4、
rightで x += 4 とすれば結果的に斜めに動くことになるけど。

speedとdirection使ってるとか、斜めの時だけ移動量変えたいとかだったら
joystick系の関数を使って判定するコードを書く必要がある。

453:名前は開発中のものです。
08/11/20 14:33:23 xqi/6PvR
ある範囲(ゲーム中に移動する)以外を黒で塗りつぶしたいのですがどうすれば良いのでしょうか?

454:名前は開発中のものです。
08/11/20 15:13:08 gtPmWcjx
そこだけ抜いたスプライトをビューにくっつけたりすればいいんじゃないか?

455:名前は開発中のものです。
08/11/20 18:09:38 /1Y7KoVd
原始的に、黒い長方形を4つ描くってのもある。

456:名前は開発中のものです。
08/11/20 18:19:17 fSCzA9A7
むしろ画面サイズの黒い長方形の上にすべてを描画する。

457:名前は開発中のものです。
08/11/20 19:40:56 xqi/6PvR
>>454
移動できません

>>455
ありがとうございます。
それも考えたのですが記述が長くなりそうで・・・
「その範囲以外」という指定は出来ないのでしょうか?

458:名前は開発中のものです。
08/11/20 20:57:48 JLC+2EzT
>>457
「その範囲外」というのなら、黒く塗り潰したサーフェイスの
真ん中をくり抜いてかぶせるという方法があるけど、
どう見ても>454-455の方が簡単だわな。

「移動できません」って意味がわからないけど、
画面の2倍サイズのスプライトの真ん中に穴あけて
穴がちょうどいい位置にくるように動かせばいい。
そんな大きいスプライト、リソースがもったいないというならその通りだが。
「記述が長くなりそう」ってのも、たった4行だべ?
四隅の座標を計算して変数に入れとけば何てことない。

459:名前は開発中のものです。
08/11/20 21:35:24 xqi/6PvR
>>458
ありがとうございます。
確かに見たところ>>455のが最も楽そうですので四つ四角形を作ってみます。


続けて質問で申し訳ありません。
sleepを使うと全てが停止してしまうのですが一つのオブジェクトのみを停止させるにはどうすれば良いのでしょうか?

460:名前は開発中のものです。
08/11/21 06:23:48 8FHkjqBp
room
→backgroundsタブ
にある、Draw background colorのチェックボックスをオンにして、
その下の Color: のボックスをクリックして黒を選択する。

こうすれば、背景色が黒になる。

チェックボックスをオフにすると黒く見えるが、
それは黒ではなく何も塗られていないという状態なので、
上のやり方でいいから一度でも何か色で塗っておくべき。

一つのオブジェクトのみを停止となると、
with (object)
{

}
を使うといい。
移動を停止させたいとなると、
{}の間にspeed = 0;を入れればいいかな。

もしその後でまた動きを再開させたいのだったら、
deactiveやactiveを使うとか、その辺のアルゴリズムはまた考えなきゃいけない。

461:459
08/11/21 06:58:26 sjxyegPf
>>460
ありがとうございます。
その方法は便利ですね。ですが>>459で言う停止、というのはそのオブジェクト自体の働きの事です。
Createで1120ms停止してから移動開始、等です

462:名前は開発中のものです。
08/11/21 09:04:25 8FHkjqBp
だったら「停止」とは逆に、「動いていいときだけ動く」とすればいい。
例えばステップイベントで動かしているのなら、
if (ugoku == true)
{
   // ここにアクション
}
として、動かしたくないときはugokuをfalseにする。

わかっていると思うけど、msはミリセカンド。
秒でやりたいのならdatetime関数を使うのも手だけど、
そこまで拘らないのなら、フレーム数を数えるという方法もある。

例えば、
<Create>
ugoku = false;
taiki = 0;

<Step>
if (ugoku == true)
{
   //アクション
}
else
{
  taiki += 1;
  if (taiki >= 300)
  {ugoku = true;}
}

と書くと、インスタンスが作られてから300フレーム(5秒後(60fps時))にアクションをするようになる。
原理が分かれば応用もできるはず。

463:名前は開発中のものです。
08/11/21 14:36:04 sjxyegPf
>>462
ありがとうございます。
なるほど、それは応用性が高くて便利ですね。助かりました。

464:名前は開発中のものです。
08/11/21 20:07:21 Aa2c/Y3P
>>Createで1120ms停止してから移動開始、等です
普通にアラームを使えばいいんじゃ…?

465:名前は開発中のものです。
08/11/21 22:09:17 sjxyegPf
>>464
アラームってms単位なのでしょうか?
使ってみた所なんかちょっと違うような・・・

466:名前は開発中のものです。
08/11/21 22:25:03 Aa2c/Y3P
>>465
アラームは指定のステップ数が来たらイベントを行うのでms単位ではなく
ステップ単位です
何かmsにしなきゃいけない理由でもあったら別だけど基本的な時間をコントロールしたいなら
アラームが一番簡単で分かりやすい方法だから…

467:名前は開発中のものです。
08/11/22 05:30:20 ih+yuern
>>465
どうしても秒を使いたいのなら、
最初に一度current_timeを使って現在の時刻を取得しておいて、
毎回current_timeを使って、最初に取得しておいた時間から何ミリ秒経過したかを調べる方法がある。

秒単位に拘るのなら↑のやり方があるけど、どう考えてもアラームの方が楽。

468:465
08/11/22 14:23:55 Lvyzb+s5
>>466
ありがとうございます。
説明しにくいのですがどうしても秒単位じゃないとダメなのです。

>>467
ありがとうございます。
試しに使ってみます。

469:名前は開発中のものです。
08/11/22 19:42:07 q+lYsPmJ
秒からステップ数への換算なんて 秒×room_speed だけで済むし
(1120msなら 1.12*room_speed)
どちらにしても1ステップ未満の分解能は得られないけどね。
それとも、ゲームが処理落ちしてても実時間に
同期させて動かしたいってことなのかな?

470:名前は開発中のものです。
08/11/22 21:30:13 clFoYfTe
>>469
本人ではないけど恐らく後者じゃないかな
あえて実時間でフレーム非同期処理っていうとネットワーク関連かも
何れにせよ解決したっぽいので何よりだ

471:名前は開発中のものです。
08/11/22 21:53:58 lm1qIDqX
spriteの矢印の絵をマウスの座標に向けたいんですが、
(イメージとしては見下ろし視点での戦車の砲台)
やり方がわからないです。6.0のサンプルはあったのですが
低スペックなのでGameMaker6.0以降は起動できませんでした・・・。
なのでバージョンは5.3Aです。GMLはサンプルなどを参考にして使う程度で
多少は理解できるのですが書けません。
どなたかご教授お願いします。
お手数でなければ5.3AのサンプルをUPしていただきたいです。
よろしくお願いします

472:名前は開発中のものです。
08/11/22 22:10:27 lm1qIDqX
ログちゃんと読めてなかった…
自己解決しました 失礼しました

473:名前は開発中のものです。
08/11/24 13:04:13 xHi4CDCd
GMLでマウスポインタ自体を動かす事は出来ないのでしょうか?
よろしくお願いします。

474:名前は開発中のものです。
08/11/24 15:27:27 oGsKQE88
window_mouse_setとかdisplay_mouse_setとか

475:名前は開発中のものです。
08/11/24 21:01:38 xHi4CDCd
ありがとうございます

476:名前は開発中のものです。
08/11/26 22:59:16 8dk2lxXH
飛び道具を発射して壁以外の何かに当たった時アクションを起こすというふうにしたいのですが
コリジョンで特定のオブジェクトでなく「何かに当たった時」という設定はできますか?
今は敵一つ一つに「飛び道具に当たった時アクション」の設定をしているですがどうにも敵の種類が多いので…

477:名前は開発中のものです。
08/11/27 00:33:24 N2ZEFTBa
>>476
まさにそういう用途のためにあるのがParentと継承のシステム。

適当なオブジェクトを作ってobj_enemyとでも名付ける。
すべての敵オブジェクトでParentをobj_enemyに設定する。
(たしかAdvanced Modeを有効にしないとParentが出てこないので注意)
後はobj_enemyとのCollisionイベントを作れば終わり。

478:名前は開発中のものです。
08/11/27 06:17:21 98IVXa5Q
Parentは、オブジェクトをグループ化させることができる便利な継承システム。

例えばマ○オに出てくる亀。

緑の亀はひたすら歩く。崖で落ちる。
赤の亀は崖で引き返す。
羽の亀は飛び跳ねる。

全ての亀において、踏みつけると甲羅になる
という共通点を持つ。このように何か共通点がある場合、parentが非常に役に立つ。

noko_green
├ noko_red
└ noko_pata

↑のようにparent設定をして、(noko_redでparentをnoko_green、noko_pataでparentをnoko_greenに設定する)
noko_redで崖判別を、noko_pataで飛び跳ねるように設定すればいい。
共通点の「踏みつけると甲羅になる」というアクションを親オブジェクトのnoko_greenから引き継がせることができるため、何度も同じ記述をする必要がなくなる。

479:名前は開発中のものです。
08/11/27 06:18:17 98IVXa5Q
また、ゲーム内で使用しないダミーオブジェクトを作るというのも効果的。

noko_dummy(踏みつけると甲羅になる ゲーム内では使わない)
├ noko_green(移動:遅)
├ noko_red(移動:速 崖で引き返す)
└ noko_pata(跳ねる)

このとき、踏みつけると甲羅になるアクションは、noko_green、noko_red、noko_pataの全てに引き継がせることができる。
このように、共通な部分は全てダミーに置いておき、それぞれのオブジェクトで何が違うのかということだけを考えていけばいい。

480:名前は開発中のものです。
08/11/27 06:19:32 98IVXa5Q
親オブジェクトもまた親を持つことができる。
これを使って、

enemy
├ kuri
├ noko_dummy
│ ├ noko_green
│ ├ noko_red
│ └ noko_pata
└ bros_dummy
  ├ bros_hammer
  ├ bros_boomerang
  └ bros_fire

として、enemyとのCollisionイベントを作ることで、
いちいち緑亀にぶつかったとき、赤亀にぶつかったとき……等と何度も同じ事を繰り返す必要がなくなり、
「敵に接触したとき」とまとめることができる。

481:名前は開発中のものです。
08/11/27 06:26:01 98IVXa5Q
Parent関連で必ずと言っていい程同じような質問が来るようだからざっとまとめてみた。
次スレ以降のテンプレにでも入れておくと便利かと思って。修正改変等あればどうぞ。

482:名前は開発中のものです。
08/11/27 07:58:38 YVwu6GrP
なるほど、親はそういうときに使うのですか
ありがとうございました!

483:名前は開発中のものです。
08/11/27 08:16:46 98IVXa5Q
>>476
「敵が飛び道具に当たったとき」ではなく「飛び道具が壁以外の何かに当たったとき」らしいので
この場合は>>477で書かれている通り、飛び道具のコリジョン相手を「敵」に一纏めにするだけで済む。

以下は「敵が飛び道具に当たったとき」の考え方。よければ参考に。


飛び道具が数種類(ブーメラン、矢、ナイフ)あるとして、敵も数種類あるとする。
このとき、>>480の考え方を2回使う。

enemy
├ enemy1
├ enemy2
└ enemy3

として全ての敵を一纏めにして、さらに

weapon
├ boomerang
├ arrow
└ knife

として、全ての飛び道具を一纏めにする。
enemyもweaponも、中身は空っぽのオブジェクトで構わない。

そしてオブジェクトenemyで、オブジェクトweaponとのCollisionイベントを作ればいい。
こうすることで、「全ての敵において、何か飛び道具に当たったとき」とすることができる。


基本的に、似たものは一纏めにすると便利&効率的&構造上スマート。

484:名前は開発中のものです。
08/11/27 21:51:29 IFIhMc/y
ボスなどを作るときにパーツごとに分けてあるのですが、曲がる時とかパーツの動きを本体にあわせようと
例えば本体のステップで
with (obj_boss1_part)
{
direction = other.direction;
image_angle = direction;
}
などとするのですが、曲がるときにパーツの方がプルプルと震えるようになってしまいます。
多分角度がプラスマイナスしてるからだと思いますが何か解決策ありませんか?

485:484
08/11/27 22:01:43 IFIhMc/y
自己解決しました
本当失礼しました…

486:名前は開発中のものです。
08/11/28 11:52:47 PgkhIyzB
Parentの存在に目から鱗、今まで知らなかったわ

やってみて気付いたけど親と子で同じアクション入れると無視されるんだね

例えば、親:クリエイト時に変数aに1を代入、子:クリエイト時にbに2を代入とすると
aが存在しないってエラーになる。

487:名前は開発中のものです。
08/11/28 13:37:01 rNzKqzWh
>>486
親クラスのアクションを丸ごと使いまわす場合でも明示的なオーバーライドが必要だったはず
GMの場合はCallInheritedEventとかそんな名前のアクション(正式名称はヘルプで確認)
何も意識せずオブジェクト指向っぽくなるのがGMLの巧い所だけど
徹底してOOPL的な書き方しようとすると逆に分かりにくかったりしますね

488:名前は開発中のものです。
08/11/28 17:05:23 23J9ij0M
ジャンプするボタン(ここではZキーとします)を押している時間の長さでジャンプする高さを変えたいのですがどうすれば良いのでしょう?

Zキーを押している間、変数「jmp」に1ずつ足していき・・・といった感じでやってみたのですが
ジャンプする条件に地面の上にいる事が入っていて、ジャンプはZキーを押した瞬間に行われるので意味がありません。

489:名前は開発中のものです。
08/11/28 21:07:21 bzoft8au
>>488
押す(pressKeyDown)とパワーを貯めて(経過時間で数値を増加)
離す(pressKeyUp)とジャンプ処理

でどうですか?

490:名前は開発中のものです。
08/11/28 22:28:28 8vGbtbAk


スープーメイリオブロ(英語は発音大事)みたいにしたいなら、
単純に押してる間だけスプライトを移動させていけばいいだろ

491:名前は開発中のものです。
08/11/28 22:38:55 Ib5prIDh
>>486
親のイベントにあって子のイベントに無い物は、自動で子に引き継がれる。
子と同じイベントにある親のアクションを引き継がせる場合、
その起こしたいイベントの中でCall Parent Eventアクション(GML: event_inherited())を使う。

というわけで、>>486の例だと子のクリエイトのbに2を代入した前でも後でもいいから
親のイベントを呼んでやると、子もa=1を持つようになる。


>>488
ボタンを押した時にジャンプの高さを全て決めるのではなく、
ボタンを押してジャンプさせ、ボタンを離した時に、押してからの長さによって「ジャンプの上昇を止めて落下させる」という考え方がどっかで使われていたと思う。

492:名前は開発中のものです。
08/11/28 22:56:55 23J9ij0M
>>491
ありがとうございます。
その方法は考えてませんでした。物凄く助かります。

493:名前は開発中のものです。
08/11/28 23:26:08 x//721CN
範囲内ゼンブのオブジェクトに影響を及ぼすものはどうつくればいいのでしょう?
for(i=0;i<120;i+=1)
{col_body =collision_circle(self.x,self.y-120,i,all,true,true)}
with(col_body)

とすればうまいこと行くかなとおもったのですが一番最初に範囲に入ってきた物が効果を重ねて受けてしまうようでうまくいきません。

配列を使えばいいというのはなんとなくわかるんですがfor(i=0;i<instance_count;i+=1)
col_body[i] =collision_circle(self.x,self.y-120,120,all,true,true)
with(col_body[i])

とするとUnknown variable col_body or array index out of bounds
が出てきます……。根本的に書き方が違うのでしょうか?

494:名前は開発中のものです。
08/11/28 23:45:40 GUH2YmoS
考え方を逆にして、全部のオブジェクトに対して「自分が範囲内にいるか」調べさせてみよう。
with (all) { // すべてのインスタンスをループ
 if (collision_circle(other.x, other.y-120, 120, self, true, true) { // もし範囲内にいたら
  // 何かする
 }
}

with文の中ではselfとotherの役割が入れ替わることに注意。

495:名前は開発中のものです。
08/11/28 23:51:13 GUH2YmoS
ってnotmeをtrueにしちゃダメだな。ついでにselfよりidを使った方が安全かもしれない。
ということで2行目は
if (collision_circle(other.x, other.y-120, 120, id, true, false)) {
という感じで。
よく考えたら distance_to_point(other.x, other.y-120)<120 とかでも済むわけだけど。

496:名前は開発中のものです。
08/11/29 00:21:19 IHR7UfyX
>>495
うっほおおお!!!!!
ありがとうございます!!かれこれ一週間ぐらい悩んでたのでスッキリしました!
こんな簡単にいくものだとは……。悔しいですね……;ω;

497:名前は開発中のものです。
08/11/29 00:23:52 cPQXEOUA
>>493
GMのヘルプ
>The Game Maker Language (GML)
>GML Language Overview
>With constructions
の一番下にある例がまさにそれだな。

with (all)
{
if (distance_to_object(other) < 50) instance_destroy();
}

498:名前は開発中のものです。
08/11/29 01:08:40 IHR7UfyX
497さんもありがとうございます。いやあ新しい扉が開いたって感じです!

499:名前は開発中のものです。
08/11/30 11:51:36 oUNmDB7a
配列の例えばparts[i]というのがあるとして、
このiの値を取るにはどうしたらよいでしょうか?

500:名前は開発中のものです。
08/11/30 17:50:24 8ZPTNF4x
>>499
例)partsという配列のi番目の要素を得る方法

parts[4] = 16;
parts[5] = 25;
i = 4;

hoge = parts[5]; // この時点で変数hogeには25という値が代入される
hoge = parts[i]; // この時点で変数hogeには16という値が代入される

i = 5;
hoge = parts[i]; // この時点で変数hogeには25という値が代入される

「iの値を取る」の意味が分からん
上の例で言うと、どういうケースでどの値を取得したいんだろう
配列の基本的な使い方が分からないのか
それとも要素からインデックス値を取得する方法かな

501:名前は開発中のものです。
08/11/30 20:57:30 ICPzjhiz
i の値を取得するという意味なら

単に i を使えばいいだけ。 i に代入されれば、i が取得したい値そのものなんだから

何も難しいことない

502:名前は開発中のものです。
08/11/30 21:02:36 ICPzjhiz
i さんに、「あなたはどの値を持っていますか?」なんて聞くようなプログラムなど要るはずがない。
i さんは、関数の中に入れば自分の持ってる値を提出するしかないからだ。

例えば i さんが 5 の値を持っていて
printf(%d, i);
のような仕事(関数)に従事したとする

なら、printfによって 5 という値が勝手に取り出されるだけ

特に今何を持っているのかを教えてもらう必要はない。


503:名前は開発中のものです。
08/11/30 21:38:09 q/jrPCNZ
この場合、[i]というのは hoge という配列変数の何番目かという事を示している。

i=5だとするならば、hogeという配列の6番目という事をしめしている。
この書き方がされるまえには必ず、i には何らかの数値が代入されている。

よって、上記の氏たちのような返答でしか答えることができない。

というかjavaでもVBでもCでも何でいいので、プログラムのサイト調べておいで。

504:499
08/11/30 23:24:15 oUNmDB7a
えーと…説明不足でした。スイマセン
まずボスを作っていてまず本体となるobj_baseと両手足となるobj_partsがあります。
そしてもう一つobj_controllerがあります。
コントローラーでinst=instance_create(x,y,obj_base)とします、そしてinst.…=…と各変数を定義していきます。
そしてfor(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。
パーツは両手足4つありそれぞれスプライトや描画位置が違うのでパーツのステップで
もしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決めるためにiの値を取りたいのです
長々と失礼しました。

505:名前は開発中のものです。
08/11/30 23:54:17 UwyYLNW7
やはり悩む必要ねえと思うが

506:名前は開発中のものです。
08/12/01 00:08:59 RRq5dBO9
for(i=0;i<4;i+=1)inst.parts[i]=obj_parts
の意味が分からん。どういうつもりでそれを書いているのか。
それだと、parts[0]~parts[3] まで、obj_parts が代入されるよ。
4つのオブジェクトを配列で管理しようとしているのかもしれないが、
結局右手をあらわす番号、左手をあらわす番号などは自分で決めるもの。
配列を使うのは、ループ使って処理しやすくするためなのだろう?
なら、こうなるはずだ。

for(i=0;i<4;i+=1) {
if (inst.parts[i] == 右手パーツ) {
//右手パーツの処理
} else if (inst.parts[i] == 左手パーツ) {
//左手パーツの処理
}
...
}

if ~ else if ~ の文は冗長でよろしくないが、switch文を使うとスマートに書ける。

507:名前は開発中のものです。
08/12/01 00:21:52 LiWv5v7d
> for(i=0;i<4;i+=1)inst.parts[i]=obj_partsとしました。
これだとすべてインスタンスじゃなくてオブジェクト(obj_parts)への参照になってしまって
区別がつかないと思うけど。inst作った時と同じやり方で
for(i=0;i<4;i+=1) inst.parts[i] = instance_create(x, y, obj_parts)
とかすればいいと思うがどうか。

で、obj_parts自身のイベントの中で、自分が何番目のパーツなのか知りたいってことだよね?
上のやり方で各インスタンスを作った後でiを教えてやればいい。
for(i=0;i<4;i+=1) {
 inst.parts[i] = instance_create(x, y, obj_parts);
 inst.parts[i].number = i;
}

番号に頼らずに、右手・左手・右足・左足それぞれ別オブジェクトにしてしまう手もあるけどね。
上で出てきたParentの考え方を使えばすっきりまとまるはず。

508:名前は開発中のものです。
08/12/01 00:25:03 QQgG8mIq
for(i=0;i<4;i+=1)inst.parts[i]=obj_parts

4まで数えるので、
inst_parts[0] = obj_parts
inst_parts[1] = obj_parts
inst_parts[2] = obj_parts
inst_parts[3] = obj_parts
inst_parts[4] = obj_parts

obj_partsが右手だったら、5要素全部に右手を代入していることになっている

509:名前は開発中のものです。
08/12/01 02:36:53 dWziD4by
でも結局パーツごとに処理変数(スプライトとか位置とか)が違うんだったら

辺に端折らずに、それぞれ別個の変数で管理するほうが楽なんじゃない?
基本オブジェクト(胴体)の位置からそれぞれの位置を割り出して
HPなどの共有する値は共有するようにglobalすれば良いだろうし。

510:名前は開発中のものです。
08/12/01 04:46:27 Ekx4hYib
もしかして、こうしたいんじゃなかろうか。

for(i=0;i<4;i+=1)
{
inst.parts[i] = instance_create(x, y, obj_parts);
inst.parts[i].number = i;
}

こうすることで、
「パーツのステップでもしbase.parts[i]のiが0なら位置はどこどこ、1ならどこどこと決める」
という動作ができる。
このとき、参照するのはiじゃなくnumberな。

511:名前は開発中のものです。
08/12/01 05:08:55 Ekx4hYib
obj_partsが作られたとき、inst.parts[i]にインスタンスIDが代入される。
パーツのステップで、obj_partsが作られたときに代入したinst.parts[i]のiの値を使って位置を決めたい。
(と解釈した)

……ってことは、それぞれのパーツから見て、iって変わらないよね?
つまり、右手はいつも右手ってこと。
だったら、作ったときにそのiの値をそのパーツに持たせればいい。

というわけで、パーツが作られたとき、そのときのiの値をnumberという名前の変数としてパーツに持たせてみたのが>>510
これで、パーツのステップでnumberを使って位置を決めることで、「iを使って位置を決める」というのと同じ動作ができる。



……ところで、base.parts[i]て何。inst.parts[i]ならまだ分かるが。

512:名前は開発中のものです。
08/12/01 11:26:32 Ekx4hYib
ってあるぇ? 今よく見てみたら>>507にあるじゃん。
しかも、よく読んでなかったのにnumberって変数の名前まで一致(意図してません)。
もう少し読もうな、俺。('A`)

513:499
08/12/01 13:30:41 WFVB4NOy
なるほど…
ではやっぱり配列の[]内の値をとるシンプルな関数などはないんですね…
やっぱり509氏の言うようにそれぞれ個別の変数を持たせた方がよさそうですね
皆さんいろいろな意見ありがとうございました

514:名前は開発中のものです。
08/12/01 21:04:50 LiWv5v7d
>>513
やりたいことはわかったけど、「配列の[]内の値をとる」なんて自分用語は
やっぱり誰にも通じないぞ。「配列の要素から添字を調べる」とか
もっと簡単に「検索する」とか言うんだ。

配列の検索自体は難しいことじゃない(ループして調べるだけ)。
そういうスクリプトは簡単に書けるし、ds_listなら関数一発でできる。
ただ、君のやりたいこと実現するのに検索なんて必要ない、
もっと簡単に済む方法がいくらでもあるってだけのこと。

515:名前は開発中のものです。
08/12/01 21:39:31 hPo6+q3F
指定したサウンドでなく「今鳴っているサウンド」を停止する方法はありますか?

516:503
08/12/01 22:44:50 dWziD4by
>>513
だーかーらー

i を使ってるのはfor文の中でしょ?
でfor文は繰り返す処理する処理で{}の中身を通して処理し、
最後に i++ で i に「+1」するんだ。

for(i=0;i<4;i+=1){中身} は、i の値が4になるまで繰り返す文 なんだ。
ここまではOK?

なので、 i の値はその処理内の実行回数の値である。
i は、そのときの値である。

i にどの数値が代入されてるか調べるには、単に i を見ればいい。

ということだから、プログラムの基本中の基本であり、どっかの解説サイトを見てこいと言ったんだ!!

517:名前は開発中のものです。
08/12/01 23:04:58 VAhzR6SY
>>516
おちつけwfor文がどうとかではなくて
定数定義とか列挙子みたいなことをやりたいんでしょ。たぶん
GMLで使えないけど


518:名前は開発中のものです。
08/12/02 02:15:33 cOR4nM2X
i の値を取得するのは非常に簡単だから
Hello world レベルだから
実際、Hello world で使ってる関数の中身を数文字変えるだけ。


だから、そんなことで悩む事自体がおかしいのだ。
おかしいので、「そんなこと悩むわけがない、別のことを言いたいのではないか」
と思うし、実際文そのままの意味で取れば「そんなもん、幼稚園児でも出来るぞ」になるわけだ

言い回しがおかしいと答えも出ない

519:名前は開発中のものです。
08/12/02 02:21:18 cOR4nM2X

なんつうのかな
箱にオモチャを入れました

箱の中身を知る方法ないですか

と聞かれたようなものだ。


開けて見りゃいいじゃねえかよ

箱(変数) を関数に渡す、関数で使うようにプログラムすれば
関数は勝手に箱開けて中身を使う。

それで知ることができる


非常に単純なことだから、悩むなんて誰も思わない。
Cだったら、printfなどの、数字や文字を画面に表示する関数で使って、「見る」だけでいいからだ。

520:名前は開発中のものです。
08/12/02 10:40:55 xezqMnLO
流されかかってる>>515を拾ってみる。
とりあえず思いついた方法2つ。どちらもGMを使う。

1)全音停止
sound_stop_all()
↑を使えば全部止めることが出来る。
全部止めれば、「今鳴っているサウンド」を停止することができる。

2)確認→停止
sound_isplaying(index)
↑を使って、再生されているかどうかの確認が出来る。
これを使って戻り値がtrueならsound_stop(index)で止める、という方法。
チェックしたいサウンド分だけループさせることで、「今鳴っているサウンド」をピンポイントで停止させる。

521:520
08/12/02 11:00:03 xezqMnLO
>>520
誤)GM
正)GML
orz

522:名前は開発中のものです。
08/12/02 14:41:52 xRaNmqQG
GMのヤバいところは、ほっておくとサウンドデバイスが増え続けること

ffdshowなどの、1デバイス1デコーダーのデコーダーで見るとわかるが、

音楽鳴るたびにデコーダが増える。
20曲鳴らせば20個のデコーダが用意され、デバイスを閉じても消えないことすらある。



523:名前は開発中のものです。
08/12/02 17:06:18 We5UmkXJ
ゼルダみたいなゲーム作りたいんだけど
お金表示やお金を作ることってできるんですか?(ゼルダで言うルピーみたいな

524:名前は開発中のものです。
08/12/02 17:25:34 Ujq+dWEg
すごく初歩だと思うが質問させてください。

グラディウスみたいなのを想像してもらえればわかりやすいと思うけど、
自機の移動がうまくいかない。
上下左右それぞれ押したときにその方向に一定の速度を与え、
離したときにその方向の速度を0にしているんだが、
たまに引っかかったように動かなくなることがある。
急に逆方向のボタン(上と下、右と左)を押すとなることが多い。
ちなみに座標を移動させる場合も同じように引っかかる。

どうやったらもっとスムーズに動くんだろう?

525:名前は開発中のものです。
08/12/02 20:58:31 taOqiXBl
>>523
変数使えば簡単にできるけど
初心者だったらscoreを流用するのがお手軽でおすすめ。

>>524
GMについてくるサンプルか公式のチュートリアルに
1945っていうシューティングがあるから、見て真似してみれば?

キーを下げた時(key press)と上げた時(key release)で制御してると
複数のキーの上げと下げが干渉してそんな不具合が起きやすい。
単に押している間(keyboard)だけ座標を増減させるようにすればすっきりする。

526:名前は開発中のものです。
08/12/02 20:59:02 UFWpQr+3
>>523
できます。

お金とか敵とかリンクとかはすべて「オブジェクト」という個体表示で考えます。

敵に当たるとダメージの部分を、
お金に触れると(お金が画面から消え)お金単位が増える。

と置き換えます。
どの言語を使っても考え方は同じになります。

527:名前は開発中のものです。
08/12/02 21:45:08 We5UmkXJ
>>525>>526
ありがとうございます。スコア使ってみますね

528:名前は開発中のものです。
08/12/02 22:23:17 uu7fmr/m
なんか条件式がおかしいと思ったら
xprevious と ypreviousは >>377
>・(now all instances are set to their new positions)
これ以降じゃないと値が保障されないのか。ぬかったわ

529:名前は開発中のものです。
08/12/02 22:42:03 ATORRfCZ
シミュレーションゲームの練習をしているのですが
範囲の求め方が分かりません。
自分のやり方だと先ず、プレイヤーを選択すると
移動範囲が出るようにはしたのですが、
この出し方がinstance_create(x,y,object)
で出しているのですがこの方法だと
どうすれば障害物の処理が出来るのかが分かりません;
もう一回一から作ったほうがいいのでしょうか・・・
説明が下手で申し訳ありません;

530:名前は開発中のものです。
08/12/02 23:10:09 uu7fmr/m
自分もシュミレーション作ってるよ
ゲームにもよるけど障害物の処理ってのは避けて通るとかそういうことかな
具体的な状況がよく分からないかも

どこまで移動できるかだけでいいなら
プレイヤーに移動力のような値を持たせて
平地なら-1 砂地なら-2とかやって移動力がゼロ以上なら指定した場所までいけるとかできるけど


531:名前は開発中のものです。
08/12/02 23:15:43 ATORRfCZ
>>530
仰るとおりです。
障害物をよけて通れるようにしたいのです。

ネットとかで調べるとそのようなやり方を良く見かけるのですが、
如何せんどう組み込めばいいのか分からず;
もう少しヒントを頂けると嬉しいです。
厚かましくてすみません;

532:名前は開発中のものです。
08/12/02 23:21:00 uu7fmr/m
どういうゲームなのか教えて欲しいかも
たとえばFEやタクティクスのようにターン制なのか
ポピュラスのようにリアルタイムな感じなのか
マップの構造によっても変わってくるし


ていうかシュミレーション・・・これは恥ずかしい誤字だった///

533:名前は開発中のものです。
08/12/02 23:24:40 ATORRfCZ
FE目指してます。
もう少し粘ってみます。

534:名前は開発中のものです。
08/12/03 00:07:38 5ByG7lYo
例えば、開始時の移動力が10あるとして
     5
     1 6
    4☆2 7 (星の位置がキャラクターだとして)
     3
☆を起点として1、2、3、4を調べ、座標とかかるコストを配列に保存する。
1に起点を移し周囲4マスを調べ、座標とそれまでにかかったコストを保存する。
すでに調べた座標は基本的に記録しないが
1→6 と 2→6のような経路が被る場合、移動コストが軽いほうを保存する。

移動コストが10より小さいものがなくなるまでこの作業を繰り返して
終わったら配列に保存された座標のところを移動範囲として表示すればいいような気がする
FEだったらこんな感じかな

535:名前は開発中のものです。
08/12/03 02:03:59 r0U2/w9u


通れないマップチップは、「通れまへんフラグ」を設定しておく
自分と敵との最短経路を弾き出し、その間に「通れまへん」があれば分岐



536:524
08/12/03 17:54:24 XBsb6U76
>>525
ありがとう、助かりました。

537:名前は開発中のものです。
08/12/04 19:42:54 COm9ODRQ
FEならSRC使うべきだろ常識的に考えて…

538:名前は開発中のものです。
08/12/04 19:51:06 wis04ySw
質問多くてすみません・・・
ゼルダでアイテム画面とかに移動する。というのはRPGのフィールドの位置保存
を使えばできると思ったんだけど、装備した元の位置の主人公のオブジェクト変更
ってできるんですか?


539:名前は開発中のものです。
08/12/04 20:23:54 BFQV7gOy
>>538
「元の位置の」ってのが何指してるのかどうしたいのかわからないけど

主人公の表示アイテムを変える方法としては、

1)アイテムに固有IDを割り振っておく
2)装備してるアイテムIDの画像を表示する

で、いけるんじゃないかな。
もともと表示するのはIDのアイテムで、アイテムが変わったら画像もチェンジする

アイテムごとに画像を用意しなくちゃいけないのは、そもそも当然のことだしね。

540:名前は開発中のものです。
08/12/04 20:32:17 hYQrGj00
はじめまして。
GM初級者です。
早速質問ですが、
複数のインスタンスから
一番別のオブジェクトに近いインスタンスを取得したいのですが、
どうすればいいでしょうか。


541:名前は開発中のものです。
08/12/04 21:33:34 BvmV+/Fo
>>540
質問がややこしくて読み間違えてるかもしれんが
恐らくinstance_nearest(x,y,obj)を探してるんだと思う

例えば、objMikata、objTeki、の2種類のオブジェクトがあるとして
objMikataのインスタンスが9個ある(insMikata1~insMikata9)
同じくobjTekiのインスタンスが9個ある(insTeki1~insTeki9)
この時、3番目の味方から最も近い敵は

nearestTeki = instance_nearest(insMikata3.x, insMikata3.y, objTeki);
こんな感じで求められる
詳しい説明や似たような関数はヘルプ参照

542:540
08/12/04 22:08:30 hYQrGj00
>>541
それです!
ありがとうございました。

543:名前は開発中のものです。
08/12/05 17:53:46 X+fPv7FO
>>539
助かりました。
ありがとうございます!

544:名前は開発中のものです。
08/12/06 17:02:27 DxqncoX6
また問題が出ました。
何度も何度もすみません。
敵が全滅したり
味方が全滅したりすると
変数の参照先がなくなり
エラーになります。
解決策はないでしょうか?


545:名前は開発中のものです。
08/12/06 17:49:42 6jDgYk9y
参照するまえに、存在するか確認する。
存在するなら参照する。しなかったら何もしなくていい。
instance_exists(obj)を使えば存在するかどうかが、
instance_number(obj)を使えば個数がわかる。


546:544
08/12/06 18:50:41 DxqncoX6
ありがとうございます。

547:名前は開発中のものです。
08/12/06 19:09:11 uswEIGEy
ターン制を自分なりに頑張ってみたのですが、
完成したと思ったらやっぱり色々とおかしかったのでアドバイスをいただきたい次第です


まず敵を用意して、生成時にglobal.bに+1する。

global.aを用意して、1の時主人公が行動できる→何か行動したらa=2にする
a=2になったとき敵達のターンになり、何か行動したら一体につきglobal.bを-1する。
global.b=0になったときa=1にして、現在ルームにいる敵の数をbに代入する


これで作ってみたのですが時々何故かbが0より少なくなったり敵が挙動不審な動きになってしまいます。


その辺りはまだ許容範囲だとしてもう一つ、
・主人公が敵に囲まれているときに相手達のターンになり、敵が攻撃してくる
の際一斉に殴りかかってくるような有様になってしまいます。

そこで現在いるモンスターに何か順番に番号を与えて、たとえば敵Aに1、Bに2、Cに3、Dに4…という具合に。
「global.Nを用意して、主人公が行動、つまりa=2になったらNを1にする
N=1のときAが行動し、bから-1してN=2にする→N=2になったのでBが行動し、bから-1してN=3にする→
N=3のときCが…~→b=0になったらa=0、N=0にする」

こうすればおそらく順番に行動してくれると思うのですが
(b-=1のタイミングは攻撃や移動などのアニメーション終了時なのでちゃんと順に動くはず)
「現在いる敵に何か順番に『番号』を与える」「Nの値と等しい『番号』を持つ敵が行動し始める」
という処理をどう行えばいいのか分かりません。
敵の数は死んだり新しく出現したりでa=2になるごとに変動してしまうので初めから固定で番号を与えることはできません。


長文かつ分かりにくい文章だと思いますがどうすればよいか分かる方ご教授願います…

548:名前は開発中のものです。
08/12/06 21:06:12 eG4vVrw2
一般には待ち行列とかキューとか言われる構造を使うと思う。
1. 主人公とすべての敵のインスタンスIDをキューに入れる
2. キューからインスタンスを一つ取り出し、そのインスタンスに行動させる
3. 行動が終わったら2に戻る。キューが空になっていたら1に戻って最初から

具体的にどう実装するかだけど、まずコントローラオブジェクトを一つ用意して
次のように処理させる。
(ds_queue使ってもいいけど、レジストしてないかもしれないので配列で実装してみた)
・Createイベントで以下の変数を用意
global.current_id = noone; // 現在行動しているインスタンスのID(nooneなら誰もいない)
queue_size = 0; // キューの中身の要素数
queue_pos = 0; // キューの何番目まで処理したか
・Stepイベントで次のように処理
if (!instance_exists(global.current_id)) { // 行動しているインスタンスがいない場合
 if (queue_pos >= queue_size) { // キューが空だったら……
  queue[0] = obj_player.id; // 先頭に主人公のIDを入れ……
  queue_size = 1;
  with (obj_enemy) { // 他のすべての敵もキューに入れる
   other.queue[other.queue_size] = id;
   other.queue_size += 1;
  }
  queue_pos = 0;
 }
 // キューから一つ取り出して行動を開始させる
 global.current_id = queue[queue_pos];
 queue_pos += 1;
}

主人公と敵のインスタンスは
・global.current_id == id だったら自分が行動する
・行動が終わったらglobal.current_idをnooneに戻す
とすればいい。

549:名前は開発中のものです。
08/12/06 21:34:34 uswEIGEy
ありがとうございます
ちょっと難しそうですが頑張ってみます。

550:名前は開発中のものです。
08/12/06 21:44:15 Gr9J9Ja2
やはり548氏が説明されてるキューが一般的だと思う
あえて別の方法を挙げると
ターン情報をグローバル変数ではなく各ユニットに持たせるようなやり方

ユニットは配列に格納しておきそれぞれにターン値を設定する
unitList[0].turn = 15; // ターン値の初期値
unitList[0].speed = 7; // 素早さ
毎ターンごとに全ユニットのturnプロパティに素早さパラメータを加算
unitList[0].turn = 15 + unitList[0].speed;
turnの値が100以上になったユニットがいれば彼のアクティブターン
いなければ素早さ加算を繰り返す

魔法や呪文で素早さやターン順が変わるゲームではこの方法も分かりやすいかもしれない

551:名前は開発中のものです。
08/12/06 22:33:58 uswEIGEy
>>548
stepの部分を入れてみたところ色々なところが構文エラーになってしまったのがどうしてでしょうか…
obj.enemyなどの部分はちゃんとオブジェクト名に直しました(そこは関係なかったみたいですが)。

552:名前は開発中のものです。
08/12/07 01:43:46 Hva4nw+k
すみません、{などの位置を正したら直ったみたいです。

>>548の場合私が設定したglobal.aやbなどは無くても大丈夫なのでしょうか?

553:名前は開発中のものです。
08/12/07 15:34:40 BlF8unb/
また問題が...
自分のオブジェクトと敵のオブジェクトの間に
壁オブジェクトがあったら弾を打たず、
無かったら撃つという風にしたいのですが・・・
回答はしたいときで構いません。
よろしくお願いします。

554:名前は開発中のものです。
08/12/07 16:47:56 iNdKCD5t
>>553
ヘルプでcollision_line関数を調べてみましょう・・・

555:553
08/12/07 18:01:29 BlF8unb/
またまたありがとうございます

556:名前は開発中のものです。
08/12/10 20:08:22 Pwqi4CyR
URLリンク(www2.uploda.org)
今こんなゲームを作っています
クリックしたとこに緑のやつが移動
近くに赤いやつがいたら勝手に撃つ
左上はレーダー

ですが、
なぜか赤いやつの処理だけが遅いのです。
緑のほうが、数も処理数も多いはずです。
赤が一匹だけでもかくかくになってしまいます。
見ていただけたらうれしいです。

557:名前は開発中のものです。
08/12/10 20:09:11 Pwqi4CyR
連レスorz
パスは fedora8 です

558:名前は開発中のものです。
08/12/10 20:27:44 edz1Bxdl
緑の奴にinstance_exists(object3)があるから
もし赤い奴がなければこれ以降が無視されるので軽い
衝突判定だとか索敵を毎ステップやると当然重くなるよ

あと他の人に見てもらうならコメントか何かはつけるべし


559:名前は開発中のものです。
08/12/10 20:56:57 nqQ/Z5/R
ルームのスピードはそのまま(30fps)で特定のキャラクターのスプライトを10fpsでアニメーションさせる、というようなことは可能でしょうか?

560:名前は開発中のものです。
08/12/10 22:32:55 eRvJFMy9
>>559
image_speed アニメーションの速度
image_index アニメーションの何コマ目を表示しようとしてるか
image_number アニメーションの長さ(総コマ数)

ヘルプの同じページに3つとも例文付きで載ってます
徐々にアニメーションを早くしたり、特定のコマで停止したり
状況に応じて動的にアニメーション速度を変更できます

561:名前は開発中のものです。
08/12/11 08:01:09 0wlARFf+
ステップの処理速度を早くしたいのですが
ルームのfpsを高くするだけで効果はあるのでしょうか?

562:名前は開発中のものです。
08/12/11 08:47:48 BGyF9xSS
>>561
ステップの処理速度を早くしたい、というのは、
動作が重いのを何とかしたい、ということだろうか。

基本的に、効率が悪いと重くなる。
処理速度を上げたいのなら、効率を上げるのが一番いい方法。

例えばマ○オで、そのステージ全体の処理を全て実行するのは無駄が多すぎるのがわかるだろうか。
見えない部分、画面からあまりにも離れた場所の処理を省くことで、効率も処理速度も大きく変わる。

同じ要領で、毎ステップ実行しなきゃいけないことなのかどうかを考えながら、
無駄な部分を出来る限り省いてみるといいと思う。


563:561
08/12/11 09:52:59 uFLRyYUD
説明不足でした。すみません
キャラAが行動し終わったらすぐキャラBが行動し、Bが行動し終わったらキャラCがすぐ行動し…
という動作をあくまでも順番通りに、かつほぼ瞬時に行いたいのですがどうも若干遅延したり最初に動くキャラと最後に動くキャラで行動終了に差が出来たりしてしまうのです。
これはfpsを高くすることで若干でも解消できるのでしょうか。

564:名前は開発中のものです。
08/12/11 14:11:51 BGyF9xSS
何だかどうしてもfpsを上げたいようだね。
それに、解消できるかどうかは、試してみればわかるようなことだと思うが……。
理論的には目立たなくなるだろうけど、でも「目立たなくすること」が最終目的じゃないはず。
「あくまでも順番通りに、かつほぼ瞬時に行いたい」
本来なら、これをどうやったら実行できるかと考えるべき。
うまくいかないのなら、何故ズレが生じるのかと原因を考えるべき。

ABCとキャラが三人いるとしても、ABCの順に処理されるとは限らない。
もしかしたらGMは、BCAの順に処理してるかもしれない。
もしそうだったら、
  1フレーム目
  B:「Aが未処理」
  C:「Bが未処理」
  A:処理
  2フレーム目
  B:処理(Aが処理済)
  C:処理(Bが処理済)
という感じに、1フレーム目にAが処理され、2フレーム目にBCが処理されることになる。
これが多分遅延される原理だと思う。

他のオブジェクトに順番を覚えさせ、
そのオブジェクトがABC全員を操作するのがいいんじゃないかと。
例えば、Zってのを作って、ABC自身は何もせず、ZがAを処理してBを処理して……と。
順番を扱うときには配列等を使うのもあり。

565:名前は開発中のものです。
08/12/11 16:37:49 nF6qn38V
結論から言えばfpsを変えても解消できないだな
1フレーム毎にオブジェクトが全部更新されるから、何の差か知らないけれど
ある経過時間での差は変わらないよ

キャラA、B、Cが別々に動いてそれぞれの行動開始までの時間がばらつくというのなら
最初のフレームで行動決定処理(AI部分)をやって次のフレームで行動開始ってすれば
揃っているように見えるけど・・・ゲームによりけりかもね

566:名前は開発中のものです。
08/12/11 18:43:18 0wlARFf+
なるほど、ありがとうございます
一応>>548を参考にして形だけは出来たのですが先述の通り遅延が生じたり
敵の数が多くなると処理が遅くなって(主人公の動ける順番が回ってくるのが遅くなって)
一歩動くと次動くまでに若干待たされ動作が快適とは言えないような状態になってしまうのです

解消する方法は無いでしょうか…

567:名前は開発中のものです。
08/12/11 19:45:07 nF6qn38V
ゲームの設計かキューの使い方、どちらかが間違っているような気がする

スペックにもよるけどインスタンス5~600体ぐらいなら
上記のキュー設計で処理落ちすることはあんまりないと思うんだけどなあ
主人公サイドはキューに詰め込まなくてもいいとか細かいことはあるけど

568:名前は開発中のものです。
08/12/11 20:57:24 0wlARFf+
処理落ちというか主人公が動いたときに一斉に行動するのではなく敵がちょっと遅れて動くんです。
敵の数が多ければ多いほど番号が最後に割り振られてる敵?の動きがかなり遅れています。

569:名前は開発中のものです。
08/12/11 20:59:36 5W34XGsl
>>568
1)情報を小出しにしない。
2)仕様はなるべく提示
3)表現したい目的を言う

570:名前は開発中のものです。
08/12/11 21:22:53 YYSIE6Pp
もともと>547で敵が全部一斉に動くのがイヤだというから>548のキュー案が出てきたわけで
「順番に動く」と「一斉に動く」は両立しないんだけど、結局どうしたいの?

>566で言ってる主人公が待たされるのを解消したいと言うのなら
行動完了するまで待たないで、行動開始してから数ステップ経過したら
次のキャラに行動を始めさせるという手がある。
キャラ数に応じて間隔を変えるようにすれば>568の問題もばっちり。
もちろん、複数のキャラがある程度並行して動けるように設計しとかないといけない。

571:名前は開発中のものです。
08/12/11 22:19:17 0wlARFf+
「一斉に動く」というのは視覚的な物で>>570さんのおっしゃる「ある程度並行して動く」というのが正しい表現ですね。すみません。

今は>>548さんの案でシステムを組んで、
主人公:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」
敵:「global.current_id = idで行動できる状態になる」「移動、攻撃など何かを行ったらglobal.current_id = noone」(同じ)
でそれぞれ動くようにしています。

敵が1体の時でも主人公が動く→敵が動くの過程で「視覚的に」同時には動かず、
・主人公が動く→動き終わる(行きたいマスに行く)と敵がすぐ動く
の流れになりどうも不自然になってしまいます。
敵の数が多くなればなるほどそれが連鎖して
・主人公動く→動き終わると敵Aが動く→Aが動き終わるとBが動く…
となり少しずつ遅延されていってしまいます。

以前の
global.a=1で主人公のターン
global.a=2で敵のターン
主人公行動でa=2に
敵のクリエイト時にglobal.b+=1
global.bの最大値をglobal.cに記録
敵が行動するとglobal.b-=1
global.b=0になった時にa=1に戻し、cをbに代入
だと視覚的でなく実際に「主人公と敵全員が一斉に動いた」のですが
これでは順番に動くというのが全く無視されるため廃止しました。

自分の希望としては
・(視覚的にでもいいので)全員が同時に動く。
・順番に攻撃したりするために(内部処理の面だけでもいいので)順番に行動しているようにする。
の二つが同時に満たされるといいのですがいい方法は無いでしょうか。
何度も申し訳ありません


572:名前は開発中のものです。
08/12/11 22:41:52 YYSIE6Pp
普通のターン制ゲームでも、敵がたくさんいたら全員が攻撃し終わるまで待たされるだろ?
と書こうとしたけど、でも全員が歩き終わるのを待ったりはしないよな?と思ったのでちょっと考えてみた。

シレンなり何なり君が参考にしてるゲームで自分と敵の動きをじっくり観察すればわかるはずだけど、
その手のゲームでは1ターンが実際には複数のフェーズから成り立っている。
(1) 自分が行動する(歩く、攻撃する、道具を使うなど)
(2) 敵が歩く(全員同時に)
(3) 敵が攻撃する(一体ずつ順番に)
自分が歩いた時には(1)と(2)が同時に起こるけど、それ以外の行動をとると(1)が終わってから(2)が起こる。
誰も攻撃行動をとらなければ、主人公は立ち止まることなくスムーズに歩き続けられるわけだ。

この辺を踏まえて、歩くのとその他の行動を分けて別々に実行させるようにしたらどうかな。
ただ、敵はあくまで1ターンに「歩く」と「攻撃する」のどちらか片方しかしないと思うので、
どちらの行動をとるかは(2)より前(ひいては主人公が歩き始める時)に決めておく必要がある。
まとめるとこんな感じかな。
・主人公が行動決定したら、その他のキャラ全員がどう行動するか決定。変数にでも覚えておく
・主人公の攻撃行動、終わるまで待つ(攻撃しない場合はすぐ次に進む)
・歩く予定のキャラ全員を同時に歩かせる。全員の行動が終わるまで待つ
・攻撃予定のキャラに、キューを使って順番に攻撃行動を行わせる
・全員行動し終わったら最初に戻る

573:名前は開発中のものです。
08/12/12 00:41:26 YwPJgrfp
攻撃はなるべく隣接したときや一直線上にきたときに行いたいので
行動前に決定するのはちょっと自分の技能じゃ辛いかなぁと…

主人公が行動する→敵:主人公の行動と同時に、攻撃範囲内に主人公がいなければ移動や特殊行動、いる場合は一旦待機
→移動するべき敵が全員移動し終わったら攻撃準備している敵のフェイズに入る→キューを使って順番に攻撃処理→主人公が動ける状態に戻す

として

変数aを用意→a=1の時主人公行動可能状態→主人公行動時にa=2→a=2になったら敵の行動開始(a=2になった際敵の数をbに記録)→
・攻撃範囲内に主人公がいない敵:移動や特殊行動をし、b-=1
・攻撃範囲内に主人公がいる敵:キューを利用して順番に攻撃。何らかの変数等をON状態にしてその敵だけキューに対応させる?>攻撃したらb-=1
b=0になったらa=1に戻して再び主人公行動可能状態に

とこんな感じでいいのでしょうか?
攻撃をする敵に関するキューをどう組めばいいやらよく分からないのですが…

574:名前は開発中のものです。
08/12/12 01:37:09 AbV0Ta9O
攻撃範囲にいたらキューに追加
フェーズが変わったら一個取り出してと処理していけば問題ないんじゃないか

根本的に a が 0,1,2,4 とかビットフラグで管理したいのかもしれないけど
慣れていないならきちんと名前をつけて真偽値でやるべき
フェーズ管理についても同様。変数の状態で管理するのではなく
主人公行動、敵の行動、敵の攻撃 etc とそれぞれフラグ管理するべき

bの意味が果てしなくないように見える

575:名前は開発中のものです。
08/12/12 14:22:36 UTYwgiXi
オブジェクトの親やマスクを途中で変えたいのですがどうやればいいのでしょうか?

576:名前は開発中のものです。
08/12/12 19:19:55 b5nKeRJC
親を変えるのは不可能だけど
マスクはmask_indexに再代入すればできるはず

577:名前は開発中のものです。
08/12/12 21:00:29 6TlHc+FT
すみません
gmkはgmdに変換できないでしょうか

578:名前は開発中のものです。
08/12/12 22:10:49 Vplk2GsR
>>575
object_set_parentで親を変えることはできるが、インスタンスではなく
オブジェクト自体(設計図)に作用するから期待するような結果にはならない。
親を変えたいって質問はたまに見るけど、そういう時はたいてい設計が間違ってるべ。

>>577
LGMでGM7→6に変換できるらしいけど、使ったことないから本当かどうかはわからん。
URLリンク(www.ismavatar.com)
って、gmdってことはさらに6→5に落とさないといけないのか。
互換性ない機能も多いからほとんど無理じゃないかな?

579:名前は開発中のものです。
08/12/12 22:16:46 agcPaJTz
GMで5ボタンマウス等のサイドボタン使う事はできませんか?

580:名前は開発中のものです。
08/12/12 22:59:50 AbV0Ta9O
Help見る限り無理っぽそうだけど

もしデバッグでサイドボタン押したときのmouse_buttonの値が0~3以外だったら
その値を割り当てればいいし、キーコンフィグっぽくするなら
global.mb_side_one |= mouse_bottun
とかすればできそうではあるけど対応していないような気もする

581:名前は開発中のものです。
08/12/12 23:36:54 agcPaJTz
>>580
レスありがとう
デバッグでGM5.3とLGMで確認したところ無反応でした

582:577
08/12/13 00:38:49 K75p9U8G
>>578
ありがとうございます
LGMですね
やってみます

583:582
08/12/13 14:58:29 K75p9U8G
LGMでGM6.1A用に変換しました
URLリンク(www2.uploda.org)
PASSは GT
このobject3の変数 "near"がおかしいです
クリックでobject0を近づけると
ちゃんとスクリプトやCreateイベントで定義してあるのに
Unknown variable near で
エラーになります
バグでしょうか?

584:名前は開発中のものです。
08/12/13 16:00:12 682sG2h4
多分ここだろ。
with (ebul){
move_towards_point((near).x,(near).y,2)
}
with文内の変数は呼び出し元(この場合object3)の変数の意味にならないよ。
ちゃんと other. をつけてやらんと。(詳しくはヘルプ参照)

以下のように修正したらエラーは出なくなったぞ。仕様かどうか分からんが。
move_towards_point((other.near).x,(other.near).y,2)

つーか、こんなことでツール側のバグとか疑うなよ・・・。自分のバグじゃないかw

585:583
08/12/13 16:21:59 K75p9U8G
>>584
wwww
そうでしたね
修正します

586:名前は開発中のものです。
08/12/14 22:59:58 VLzMeB5w
>>585
>wwww
とか
>バグでしょうか?
言い出す前に、テメーの無能を疑えよな

587:名前は開発中のものです。
08/12/15 14:09:14 VQe5+xHL
>>586には同意としても
なんとなく高圧的な人増えたな。嫌味っぽく言ってもなんもならんのに

588:名前は開発中のものです。
08/12/15 18:09:05 6p1v9SNR
質問する側もちょっとは考えろという事でしょう

589:名前は開発中のものです。
08/12/16 11:54:03 Pj6nrR98
RPG的なものを作っているのですが、手に入れたアイテムをアイテム欄などで取得順に表示したり
カーソルが合わさっているとき使用するとそのアイテムの効果が現れたりするにはどうすればいいのでしょうか。
アイテム自体は全部完成しており、アイテム名のスプライトやシステム上の番号等は割り振ってあります。5.3です

590:名前は開発中のものです。
08/12/16 12:21:24 KxWOE/yV
オブジェクト(例えば、主人公のオブジェクトとか)に取得したアイテムを管理する配列を用意して、
取得したアイテム番号を代入していく感じにすればイイのでは?

get_item[0] = 取得したアイテム番号
[]内は取得するに従い数値を上げていけばよい。
配列の長さを調べる術はないので、自分で管理しないといけない。

もしくは、データ構造で map が使えるなら、それを使ってもよい。
たとえば、キーネームをアイテム名、値に所持数とやると管理しやすい。
ただし、mapはキーネームでソートされてしまうんで、取得順となると工夫しないといけないね。

アイテムメニューのシステムは面倒だが地道にやるしかないのでは。
カーソルの操作処理とかも、いちいちオブジェクトを用意してやらないといけない。

アイテム効果を発動させるには、
メニュー欄に表示されるアイテムオブジェクトに、
使用するときのキー入力イベント(mouseクリックボタン等)を持たせて、
そのイベント内で、
・アイテム効果発動
・アイテム消費
の処理を記述していく感じかな。

概念的なことしか書いてないが、参考になれば。

591:名前は開発中のものです。
08/12/17 08:18:19 BlN9VESD
アイテムAを取った時にグローバル変数に1をプラスして、アイテムAの変数にグローバル変数+1を代入。
アイテムを使用した時はグローバル変数から1マイナスする。

ってな感じでどうかな?

592:名前は開発中のものです。
08/12/18 00:08:00 A6CnLTdh
instance_id[] のインデックス使えないかなと思ったけど
これ自体キューになってるんだね。そりゃそうか


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch