トップページ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/
0325名前は開発中のものです。2008/10/12(日) 23:04:23ID:0LPSWnKh
>>324
なるほど、ありがとうございます。盲点でした・・・。
03263252008/10/12(日) 23:27:26ID:0LPSWnKh
一応やり方は分かったのですがイマイチそれをどう実行すべきか分かりません。
draw_rectangle(x1,y1,x2,y2,false)の座標1(x1,y1)はルームの左上(0?)かと思いますが
座標2(x2,y2)はどう指定すれば良いのか悩んでおります。

(0,0,room_heigh,room_width,false)ではどうも違うようなのです。何が間違っているのでしょうか?
0327名前は開発中のものです。2008/10/13(月) 01:58:15ID:AHWrAmb7
>>326
本体のバージョンは?
0328名前は開発中のものです。2008/10/13(月) 01:59:44ID:KOVLXVwd
というかwidthとheightが逆なのでは
0329名前は開発中のものです。2008/10/13(月) 03:38:00ID:RgqatT8r
>>326
>>328の言うとおり、widthは横、heightは縦。
(ついでにいうとheightのtも抜けてるが)

黒い長方形が一切見られないのなら:
1) drawイベントで実行している?
2) depthを一番小さくしてる?
0330名前は開発中のものです。2008/10/13(月) 10:30:18ID:v588R7se
>>328
>>329
ありがとうございます。色々とスペルやら間違っていたようですね。
コリジョンイベントで実行していました。

本当にありがとうございます。
0331名前は開発中のものです。2008/10/17(金) 21:27:46ID:dQ5aX5kq
GM6でグラディウス式の横シューティングゲームを作っているのですが、
弾オブジェクトの数の上限を自機と各オプションそれぞれに設けたいと
思っているのですが、どうすればいいのかさっぱり見当がつきません。
どうすれば良いのでしょうか?
0332名前は開発中のものです。2008/10/17(金) 22:05:41ID:0ROIYotH
弾オブジェクトが出来た時にAに+1して消えた時にAから-1するってのはどうかな?
3発上限ならAが3以下の時だけ発射出来るようにするとか。
03333312008/10/18(土) 17:21:01ID:QonRt8Q9
なるほど、変数を使えばよかったんですね。
instance_number()を使うことしか頭に無かったので助かりました。
ありがとうございます。
0334名前は開発中のものです。2008/10/23(木) 23:03:49ID:URptRMn4
公式・・・もう動かなくなってどのくらい起つのだろう。 早くバージョンアップしてほしい。
0335名前は開発中のものです。2008/10/25(土) 07:24:32ID:YPdYk3/P
シンボルエンカウントのRPG的な物を作りたいのですが
以前に誰かが作ったサンプルなどありませんでしょうか?
0336名前は開発中のものです。2008/10/29(水) 07:41:16ID:B8z2rdZk
GM6ですがroom1からroom2に移動した後、room2に移動する直前の状態のroom1に戻りたいのですが
どうすれば良いのでしょう?

普通に戻ってしまうとroom1の最初の状態に戻ってしまいます。
よろしくお願いします。
0337名前は開発中のものです。2008/10/29(水) 08:29:55ID:vZOkTfmY
roomのsettingsタブにある、Persistentのチェックを入れるとできるはず。
0338名前は開発中のものです。2008/10/29(水) 12:12:52ID:SJ76vo7y
なんか、変な事が起こったので報告。

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

再起動で治りました。
0339名前は開発中のものです。2008/10/29(水) 21:20:06ID: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
セキュアモードで実行する, プログラムを実行しない

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

スクリプト編集の際、エディタ下部に関数/変数の候補を表示する
スプライト編集の際、スプライトの原点と当たり判定を示す矩形を表示する
0341名前は開発中のものです。2008/10/29(水) 23:23:51ID:CygkE/Te
解説サイトやwiki編集かと思って書いたけど
もしかしたらGMそのものを日本語化するのが目的なのかな
そうだったらこんな冗長な文面は適さないですよね
ということで私のレスは忘れて下さい
0342名前は開発中のものです。2008/10/29(水) 23:29:37ID:/+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(当たり判定が実行される領域) の訳は
全体的に統一した方がよいと思う。
0343名前は開発中のものです。2008/10/30(木) 20:15:39ID:I528xhb9
>>340
>>342
ありがとうございます。
言われている通りGMそのものを日本語化しております。

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

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

うまく表示できている人は居られるのでしょうか?
0344名前は開発中のものです。2008/10/31(金) 18:19:41ID:YzRs5LJ8
ちょいと困っています。

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

room speedは30です。
0345名前は開発中のものです。2008/10/31(金) 18:27:01ID:YzRs5LJ8
あと http://gamdev.org/w/?GameMaker はどこかに移転したんですか?
0346名前は開発中のものです。2008/10/31(金) 19:54:07ID:oCQp1Dl8
>>344
原因は色々ありうるけど同じく色々と試してみたと思うので意外な罠を一つ
俺がハマったのはモニタのリフレッシュレート
うちの環境だと60hzなら普通に動くけど75hzだと掠れる
恐らく環境依存だしGMとは関係ない部分だから気づきにくい
03473362008/10/31(金) 21:53:02ID:EFPq/rMO
>>337
遅くなりましたがありがとうございます。
出来ました。
0348名前は開発中のものです。2008/10/31(金) 22:53:49ID:YzRs5LJ8
>>346
モニタのリフレッシュレートとGMの設定とroom speedをそれぞれ60にしてみたけど、やっぱりブレれぅ・・・
液晶だからかな・・・

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

同期するのを避ける?
0349名前は開発中のものです。2008/10/31(金) 23:26:30ID:mSkOAagk
>>348
さすがに俺も液晶よ
上で書いたケースとは別件かな
もし他の方がGMで作った実行ファイルでも同様の症状が出るなら相性かもしれない
ドライバ、グラボ、モニタ、DiretXのバージョンなどなど
0350名前は開発中のものです。2008/11/01(土) 00:14:21ID:cP7CN4r/
use synchronizationで「同期(シンクロ)を使用する」
avoid tearingで「破綻することを回避する」
tear=破ける,裂ける,破綻する

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

例文:
Synchronization - Avoiding Frame Tears=フレーム落ちを回避するための同期
0351名前は開発中のものです。2008/11/01(土) 00:21:55ID:cP7CN4r/
シューティングゲームの作成では、PC処理速度を超える過剰負荷がかかった時に、
「コマ落ち(フレーム落ち)」させるか「処理落ち」させるか、
フレームレート,リフレッシュレートの同期処理に悩みますよね
0352名前は開発中のものです。2008/11/01(土) 01:01:45ID:7HKnkTOG
>>348
ティアリングというのは、画像が横に動いているときに
画面の途中でちぎれたように上下がずれて見える現象。
それを避けるためにモニタの信号と同期をとるというのが設定の意味。
画像がぶれるというのとは関係ないと思う。

仮にビューを使っている場合、やりようによっては
更新タイミングの違いでぶれて見えることがあるけど
そういうことはない?
0353名前は開発中のものです。2008/11/01(土) 22:42:10ID:spXHa3/O
こう・・・表記が変なのかなーと自分を疑ったり

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

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

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

0355名前は開発中のものです。2008/11/02(日) 00:23:31ID:UAtrgN40
このスクリーンショットが実際に動かしてる時に撮ったものなら応答速度ではないんですが
どうなんでしょう
0356名前は開発中のものです。2008/11/02(日) 00:46:03ID:q7EnVYah
>>354
応答速度なのかな・・・
どこで調べたらわかるんだろ。
0357名前は開発中のものです。2008/11/02(日) 01:10:29ID:q7EnVYah
SONY SDM-S75F っていうモニター使ってるけど、これがダメなんかな・・・
0358名前は開発中のものです。2008/11/02(日) 07:11:53ID:Uttx017t
もう既にいろいろ試していると思うけど、とりあえず。
1)新しくテスト用のゲームを作ってみる
 問題が起こる最低限の環境のゲームを作ってみる。
 もし問題が起こらなければ、元のゲームのどこかに問題がある。
  元のゲームを放置して新しく作り直すもよし、元のゲームの問題点を探すのもよし。
 もし問題がまだ起こるのなら↓
2)他の環境で調べてみる。
 テスト用でもいいから作ったゲームを公開して、同じ現象が起こるかチェックしてもらう。
 それでも問題が起こるのなら、アルゴリズムに問題がある可能性大。
 もし問題が起こらないのなら、PCの環境のどこかに問題がある。(相性とか?)
0359名前は開発中のものです。2008/11/03(月) 11:05:08ID:0rtuC+vp
アクションゲームで、下に落ちたら死亡(画面からはみ出たら死亡)にしたいのですが
画面の左右と上にはみでないようにするにはどうすればいいでしょうか。5.3です
0360名前は開発中のものです。2008/11/03(月) 19:13:01ID:HnYJ+ws5
ルーム外イベント使わずに
if (y>room_height) instance_destroy
で出来るはず
0361名前は開発中のものです。2008/11/03(月) 20:24:19ID:SR5b1R59
Gamemakerって大掛りなACTでGMLをふんだんに使ったサンプルとかないのかね?

勉強したいんだけど、リンク切ればかりで出来ない英語の勉強するほうが先になりそうな予感
0362名前は開発中のものです。2008/11/03(月) 21:53:58ID:HnYJ+ws5
シューティングサンプル1945の全部gmlコード版があった気がする…
0363名前は開発中のものです。2008/11/03(月) 22:24:41ID:uwgdwITo
>>361
日本語の資料はあまり多くないね
サンプルなら質も量も本家フォーラムが一番
ttp://gmc.yoyogames.com/lofiversion/index.php/
GMLなら↑のScripts[GML]
多少英語が読めてGMLを理解してる人なら宝の山だと思う
英語が読めなくてもGMLの理解があれば漁ってみる価値はある

かなり話題がそれるけどFlex&ActionScriptのサンプルも結構面白い
ECMAScript系の言語仕様、イベントドリブン、OOP(的である)、と共通点が多い
出来上がるのがFlashだからASに乗り換えるわけにはいかないけど御参考までに。
0364名前は開発中のものです。2008/11/03(月) 23:43:47ID:SR5b1R59
>>362
検索中スルーしてたかもなんで、後で、探してみます。

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

御二方情報ありがとうです
0365名前は開発中のものです。2008/11/05(水) 14:09:40ID:lQ1u3lWL
デフォルトの背景background0と動きのある第二の背景background1をルームの設定に用意したのですが
途中でこれらを切り替えるにはどうしたらいいのでしょうか?
0366名前は開発中のものです。2008/11/05(水) 22:26:45ID: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;
}
0367名前は開発中のものです。2008/11/05(水) 22:31:36ID:XjRGW3LY
ごめんなさい修正
直接backgroundのインデックスを指定すれば良いみたい

if( background_index == 0 )
background_index = 1;
else
background_index = 0;
0368名前は開発中のものです。2008/11/05(水) 23:58:10ID:lQ1u3lWL
えーと、試して見たのですが背景がかわらず動かしたキャラクターの残像が無限に描写される状態になってしまいました。
0369名前は開発中のものです。2008/11/06(木) 00:01:14ID:XjRGW3LY
>>368
ただのサンプルだから書く場所にもよるよ
毎フレーム呼び出したらそういう状態になるかも
例えばglobal mouse left pressedあたりに書けば
マウス押すたびに切り替わるはず
0370名前は開発中のものです。2008/11/06(木) 00:07:30ID:lQ1u3lWL
即レスありがとうございます
一応初めからマウスがクリックされた時というところでそれをやっているのですが…
0371名前は開発中のものです。2008/11/06(木) 00:36:35ID:RiMAKIfy
>>367
GMLではarray[0]とarrayは同じものを指すから、それは単に
background_index[0] に一番最初に作ったbackground(id=0)と
2番目(id=1)を交互に割り当ててるだけ。
>366の方法が正解。
0372名前は開発中のものです。2008/11/06(木) 01:04:58ID:eaSEHczR
キャラクター「A」と「B」が横一面で左に向かって競争していて、
「AがBを追い抜いたとき」と「BがAを追い抜いたとき」で別々に音を流したいのですがどうすればいいのでしょう。

上とは同じ内容で違う質問なんですが
試しにA.xがB.xの値の-1になった時〜などという風にIf a variabels has a valueでやってみましたができませんでした。
これではだめなのでしょうか?
0373名前は開発中のものです。2008/11/06(木) 07:42:34ID:LwQsPuS+
>>372
単純に
Aのx座標 < Bのx座標の時は音楽Bを流す、
Aのx座標 > Bのx座標の時は音楽Aを流す。
で良いんじゃないかな?
0374名前は開発中のものです。2008/11/06(木) 09:00:15ID: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離れたところにいる瞬間に音を鳴らす、という判定がかなりシビアな表現になる。
0375名前は開発中のものです。2008/11/06(木) 12:01:46ID:5MtmmVSK
そうそう、この場合prev_differenceを初期化することを忘れずに。
Create eventで、prev_difference = 0;とでも書いておけば大丈夫。
これを書いておかないと、Step内でチェックしようとしたときに「prev_differenceって何なんだ?」というエラーを返されるはず。
0376名前は開発中のものです。2008/11/07(金) 07:12:26ID: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を追い抜いた瞬間
}
0377名前は開発中のものです。2008/11/07(金) 07:28:10ID: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フレームの差だけど。
0378名前は開発中のものです。2008/11/07(金) 17:17:30ID:q2bnCqzi
不思議のダンジョンのようなターン性を採用したいのですがどのように作ればいいのでしょう?
0379名前は開発中のものです。2008/11/07(金) 22:09:04ID:dk+hUO84
割り込む感じでスイマセン、質問です
非公式サイトから導入した日本語描画スクリプトですがフェード機能をつけるには
どうしたらいいですか?
drawアクションじゃないからalphaも使えないし……
0380名前は開発中のものです。2008/11/08(土) 00:32:27ID:ralVUMsS
>>378
こんなので良ければ参考にして下さい
http://www1.axfc.net/uploader/File/so/13426.zip
0381名前は開発中のものです。2008/11/08(土) 01:05:10ID:YaFy+mMy
おお、ありがとうございます。
敵が複数いる場合でも同じ処理で大丈夫何でしょうか?
0382名前は開発中のものです。2008/11/08(土) 01:17:10ID:tiFPEnIw
うーん。

敵が複数居る場合、固定値ではなく、数値を増やしていって
最後に行動したモンスター(キャラ)が変数を1に戻すとかどうかな?
0383名前は開発中のものです。2008/11/08(土) 01:24:43ID:YaFy+mMy
敵の数がある程度減ったらランダムで数匹追加などもしたいのですが
減ったり増えたりした時の処理が難しそうでどうも…
0384名前は開発中のものです。2008/11/08(土) 01:29:31ID:tiFPEnIw
global変数(A)に、現状の敵個数を記憶しておいて
敵が死ぬ時にglobal変数(A)を減らす。

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

チェックするのはBegin stepでもEnd stepでもお好きな時にどうぞ?
0385名前は開発中のものです。2008/11/08(土) 08:00:14ID:usFb+U0s
ダンジョンで思い出したけどダンジョン自動生成てのはやっぱり難しいもんなのかな。
0386名前は開発中のものです。2008/11/08(土) 21:37:31ID:YaFy+mMy
>>384
遅れましたがありがとう
もう一つ質問したいのですが、「最初にランダムでどこか一方向に動く、動く前にもし行きたい方向に壁があれば残り三つからランダムでどこか一方向に、そこにも壁があれば〜」という判断をさせたいのですがどういったアクションを組めばいいのでしょう?
0387名前は開発中のものです。2008/11/08(土) 21:38:58ID:HeJ/3Xvw
ttp://amagame.blog12.fc2.com/blog-entry-1989.html
ttp://d.hatena.ne.jp/Gemma/20070816

これとか読んでみ。目から鱗な考え方だ
0388名前は開発中のものです。2008/11/08(土) 21:51:38ID:tiFPEnIw
>>387
うっは、ブログの方のファイル落とそうとしてgamDEVという事に愕然とした!

誰かファイルもってないかなorz
0389名前は開発中のものです。2008/11/08(土) 21:56:28ID:tiFPEnIw
>>386
まず処理したい系統を図式にして処理したい順番を考える。

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

とするか、

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

とするか、が浮かぶ。
もちろん他にも良い手段はあると思う。
0390名前は開発中のものです。2008/11/08(土) 22:45:40ID:YaFy+mMy
うーむなるほど
やはりそういうのにはGMLが必須なのでしょうか…
0391名前は開発中のものです。2008/11/08(土) 22:52:26ID:tiFPEnIw
>>390
そっちのほうが楽ではあるけど、
処理の中に処理ってのは普通配置でもできるからガンバッ!

Control の Other にある、start/End block や else などをうまく組み合わせてみよう。
0392名前は開発中のものです。2008/11/09(日) 14:58:27ID:XXK2SOj2
>>387
上の凄いな。考えもしなかった
0393名前は開発中のものです。2008/11/09(日) 18:30:25ID:iQ0fQqMk
Access violation がでるなあ

execute piece of code だとエラー吐くのに
同じ内容をscripts に記述すると直るのは嫌らしい仕様だ
0394よこしま2008/11/09(日) 20:36:08ID:+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の値を代入します。
03953792008/11/09(日) 23:09:10ID:37vptB7Q
>>394
そうか…そこいじれば良かったのか…
ありがとうございます…
あと追加で質問なんですが…
文字を左から順番に出していくのに、いつもはstring_char_atなどを使っていたのですが、
mbtextの場合、文字列関数は使えないのでどうしたら良いでしょうか??
0396名前は開発中のものです。2008/11/09(日) 23:25:02ID:UpE3UCrs
>>393
そんな「仕様」はないと思うけど
GM7だと、たまに何の変哲もないコードでエラーが出て
同じコード打ち直すとかコピペすると直るという現象が報告されてます

>>395
2バイト文字ならstring_copyで2文字取り出すとか
string_char_atでもう1文字くっつけるとか
0397名前は開発中のものです。2008/11/10(月) 00:20:09ID:bX5vjmo9
>>396
そうなんですか・・・お騒がせしました
debuger が落ちる瞬間にアクセス違反が表示されていて
挿入方法で扱いが変わるみたいなのでそういうものかなと思ったんですけど違うみたいですね
0398名前は開発中のものです。2008/11/10(月) 01:53:38ID:hROa89TY
ヘルスや変数などの数値を用意した0〜9のスプライトで表示したいのですがどのようにすればいいんでしょうか
0399名前は開発中のものです。2008/11/10(月) 02:40:36ID:l3rRgQmH
GM5ならdraw_text_sprite
GM6ならfont_add_sprite(要レジスト)してdraw_set_fontしてdraw_text
コード書けるなら文字列に変換して1文字ずつ切り出してdraw_sprite
0400名前は開発中のものです。2008/11/10(月) 23:05:15ID: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つのスプライトにサブイメージとして入れておく)
0401名前は開発中のものです。2008/11/10(月) 23:18:31ID:rXjUYemu
同じ敵がたくさん出てくるようにしたいのですが個別に体力を設定する方法はありますか?
ヘルスや変数を使うと敵全員共通のものとみなされてしまってどうも…
0402名前は開発中のものです。2008/11/10(月) 23:23:09ID:PA4xWfUd
x=rundm(10)+1
0403名前は開発中のものです。2008/11/11(火) 03:25:19ID: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)
0404名前は開発中のものです。2008/11/11(火) 07:21:02ID:gKnNaknY
ありがとうございます
特に敵のヘルスバーを表示する必要はないのですがその時はdrawの部分を省けばいいのでしょうか
0405名前は開発中のものです。2008/11/11(火) 08:14:23ID:eY/CDP8z
ならcreateでhp変数を設定すれば良いだけだと思う

globalじゃない限り普通の変数はそのオブジェクト内のみだから。
0406名前は開発中のものです。2008/11/11(火) 22:50:05ID:cbXen0Dw
なるほど
0407名前は開発中のものです。2008/11/12(水) 07:21:33ID:sHnxhObY
コリジョンで敵のhp減らすとかだとother.とか付けないと自分のhp減るから注意な
0408名前は開発中のものです。2008/11/12(水) 16:13:15ID:4hbBOuzF
>>407
それは書き方にもよるけど……。
主人公が敵に攻撃したときと、敵が主人公の攻撃に当たったとき。
状況は同じだけど、どっちのイベントでHPを減らすようにしているのかで変わる。
0409名前は開発中のものです。2008/11/14(金) 23:03:32ID:izAxC9WD
Scriptsで書いたコード中の変数も
呼び出したオブジェクトのローカル変数にされるのか・・・

ループ用変数が被りまくり\(^o^)/
0410名前は開発中のものです。2008/11/14(金) 23:20:13ID:Bs1pE8FJ
そのためのvar宣言ですよ
var i
とかやると、iはスクリプト内でのみ有効になる
0411名前は開発中のものです。2008/11/14(金) 23:40:22ID:izAxC9WD
うん、その作業をちまちまやってますw

この仕様ならargumentって要素があんまり意味ないような気がするんだけどなあ
せめてScriptsに隠蔽要素が欲しかった
0412名前は開発中のものです。2008/11/15(土) 00:09:50ID:HG68xRSC



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

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





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



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

そしてこの場合、滑らかに移動しているように見えず、かなりカクカクして見える。
これを直すには、ビデオBIOSの更新やモニタのファームウェア更新しかないので
相当面倒だ。個人で直すことはまず出来ない。
0413名前は開発中のものです。2008/11/15(土) 05:12:01ID:gZryKwbH
でも逆に言うと、Scriptsからローカル変数をいじれるんだよね。
今の仕様でいいと思うんだけどな。
0414名前は開発中のものです。2008/11/15(土) 12:32:10ID:cZlHfE8C
今GM5.3Aでアクションゲームを作ろうとしているのですが、キャラクターの移動が良いように行われません。
(移動させるキーを押す→キャラクター移動→キーを放してもその場で静止せず、ずっと移動し続ける)
どのように行えばキーを放す際に静止するようにできるのでしょうか?初歩的な質問ですいません;
0415名前は開発中のものです。2008/11/15(土) 13:05:07ID:cZlHfE8C
↑自己解決しました;

0416名前は開発中のものです。2008/11/15(土) 14:24:35ID:PB/Zmvn5
「変数が○になったとき」や「変数が○以上になった時」ではなく
「変数Aに数値が加算されたとき」という条件を作るにはどのようにすればいいのでしょうか?
0417名前は開発中のものです。2008/11/15(土) 15:00:10ID:gZryKwbH
加算されたとき
→1フレーム前の数値よりも今のフレームの数値が大きくなったとき
>>374-377と同じ考え方)

もしくは、その数値に加算したときに起こしたいアクションを置く(そのまんま)
(変数Aに加算した直後、起こしたいアクションを行う)
0418名前は開発中のものです。2008/11/15(土) 15:22:11ID:cZlHfE8C
どうも414です。
ジャンプをさせようとしてジャンプは出来るようになったのですが、今度はキャラクターが地上にいる状態で動けなくなってしまいました。
(正確にはジャンプは出来るが横移動が全くできない状態)
どの様にすれば解決できるでしょうか?
0419名前は開発中のものです。2008/11/15(土) 16:40:37ID:PB/Zmvn5
>>417
>>374〜的なやり方で行くと
stepに
difference=LEVEL
difference<prev_differenceのときやりたい処理を行う
End stepに
prev_difference=difference
とこんな風でいいのでしょうか?
0420名前は開発中のものです。2008/11/15(土) 18:04:15ID: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    // 「前のレベル」を今のレベルに更新する。
0421名前は開発中のものです。2008/11/15(土) 18:04:49ID:gZryKwbH
>>418
地上にいる間ずっと、地面との接触が起きているのかもしれない。
でも>>414のことも考えると、歩かせるアクションの方にも問題があるのかもしれない。
どこかで「止める」アクションを使っていてそれが影響しているとか。
サンプルが非公式情報サイトかどこかになかったかな……。
サンプルを探してみるのもいいし、GMにexampleとして最初から入っているものがあったらそれを見てみるのもいい。
0422名前は開発中のものです。2008/11/15(土) 18:08:02ID:PB/Zmvn5
>>420
なるほど…丁寧にありがとうございます
0423名前は開発中のものです。2008/11/15(土) 18:39:46ID:cZlHfE8C
>>421
了解しました。
返答ありがとうございます
0424名前は開発中のものです。2008/11/16(日) 10:34:59ID:aHkifR23
3桁の数値を獲得してそれぞれオリジナルのスプライトで表示したいのですが
百の位と十の位と一の位を獲得するにはどのようにしたらいいのでしょう。
■ このスレッドは過去ログ倉庫に格納されています