- 1 名前:名前は開発中のものです。 [2005/07/12(火) 09:03:47 ID:DK0oUKwt]
- 無料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【マンセー】 pc8.2ch.net/test/read.cgi/gamedev/1087068523/
- 953 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 00:40:19 ID:XEs+C953]
- >>952
小数を扱う場合、パソコン内では10進数ではなく2進数なので、 10進数ではキリのよい数値のように思えても、 2進数では無限循環小数(割り切れない割り算で、小数点以下を延々繰り返してしまう数)になってしまう数値がある。 もちろんパソコン内のメモリは無限ではないので、ある桁以下は省かれてしまう。 これを丸め誤差という。 以下のコードを実行してみるとわかるが、 i = 0.2; for (k=0;k<20;k+=1) { show_message(string_format(i,20,18)); i += 0.2; } i が 4 となるべきところで、GameMakerでは微妙に4より大きい数値になることがわかる。 (※常に大きい数値となるわけではなく、本来の数値より少なくなることもある) これは、丸め誤差が積み重なってできた誤差になってて、真に4となるわけではない。 なもんで、 if文の image_index == 4 の条件は満たさない、と考えられる。 このような理由で、プログラムの世界では浮動小数な変数をそのまま条件文でイコールを使うのはご法度。と言われてる。 誤差を意識したコーディングを心がける必要がある。 GameMakerの数値は全て浮動小数扱い。だが、整数のまま扱ってる分には問題ない、はず。 (私はプロじゃないんで…かじった知識程度で申し訳ない、間違ってたら指摘ヨロ)
- 954 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 01:59:41 ID:T1qF9S2G]
- まあでも、853で言ってるとおり
Other > Animation End イベント使えば image_index判定する必要ないんだけども。 ちなみにあくまでStepイベントで判定するなら if (image_index + image_speed >= image_number) で Animation End イベントと等価になる。
- 955 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 05:06:15 ID:KYkFnzVP]
- FEっぽいゲームを作りたいんですが
移動範囲の求め方がわかりません; 1マスごとに-1するということだと思うんですが 具体的に書けなくて・・・ 教えていただけたら嬉しいです
- 956 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 05:40:23 ID:Bq2Q3q9u]
- やり方はここが参考になるんじゃない?
ttp://www5f.biglobe.ne.jp/~kenmo/program/SLG/move/move.html 再帰ループとか理解している必要があるけど。
- 957 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 06:13:29 ID:KYkFnzVP]
- >>956
そのサイトも見たんですがsearch関数というのがよく分からないです; 自分で作るものなのでしょうか・・・
- 958 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 08:26:38 ID:grhJSKQZ]
- >>953 954
ご指摘ありがとうございます。 丸め誤差・・・次から気をつけます。 あと、Animation Endイベントって存在したんですねぇ。 「Other>Animation End」…存在すら知りませんでした…。 となると以下みたいな使い方になるんでしょうか?(再質問みたいですいません) ▼Animation End Event //image_indexがsprites「spr_hoge777」の場合、speedを0に変更 if (image_index == spr_hoge777) { img_spd_save = image_speed //停止前の速度を保存 image_speed = 0 } else { image_speed = img_spd_save //他のspritesの場合は保存速度に戻す }
- 959 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 08:57:11 ID:grhJSKQZ]
- >>958
image_indexじゃなくてsprites_indexでした。 あと、このコードじゃうまく動作しませんでした。 うーん。難しい・・・。
- 960 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 10:27:30 ID:j6OioUkw]
- なんだかやりたいことが混乱してないか?
「困ったときは原点に戻る」 プログラム的なことは置いといて、まず何をしたいのかを考えてみ? この場合はアニメーションが終わったら止める、だったよね? Animation End Eventでimage_speedを0にすればアニメーションはとまるんじゃない? 多分これだけだと一枚目に戻って止まるかも知れないから、 止めた後にimage_indexを最後の数字にする。 つまり、 「アニメーションが終わったら、 ・まずアニメーションを止めて、 ・最後の画像を表示させる」 ……>>853が言ってることと全く同じなんだが。 これで出来ないってなると、Step eventで毎回毎回image_speedを設定してるんじゃない? もしそうだったらいくら止めても止まらないんだけどw
- 961 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 10:40:47 ID:j6OioUkw]
- もしimage_speedが一定で、終わったらそれを止めたいってだけなら、
image_speedをCreate Eventで設定した方がいいよ。
- 962 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 11:31:49 ID:grhJSKQZ]
- >>960,961
なんていうか、いろいろとすいません。 うーん、そうですねぇ。「やりたいこと」… 「一定条件のみアニメを止める」っていう動作をさせたいんだと思います。 Object内で条件毎にコロコロspritesを入れ替えておりまして spritesに一定の画像が使われている時に限り、「アニメを一周」させたかった訳です。 (キャラが走行中に立ち止まった時、着地した時だけ服が揺れるアニメ…等) 1、sprites変更後、「アニメ停止変数」生成 2、Animation Endにて「アニメ停止変数が1の時のみ、image_speed=0」 でやりたいことが実現できました。 うーむ。確かに原点に返ってみれば、単純な事だったのですね…。 板汚しすいませんでした orz
- 963 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 21:40:31 ID:2SyyMfLm]
- なにげにレス伸びてる・・・そろそろ次スレの季節なのかな?
- 964 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 22:22:44 ID:eAt6pbsl]
- >>950です。
また質問に来ました。 HPを準備するまでは出来たのですが、HPの減らし方(ダメージ)がわかりません。。 後、自分的にはゾンビのような敵と戦わせたいので、 近づいたら(正確には近づかれたら)ダメージという形での使用方法も教えてください。 よろしくお願いします。
- 965 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 22:48:47 ID:J24rBd4c]
- >>964
サンプルとか、>>1チュートリアルとかサイトに色々書いてるから自分でも調べてから書き込むことをオススメする。
- 966 名前:名前は開発中のものです。 mailto:sage [2008/05/05(月) 23:18:51 ID:2SyyMfLm]
- >>964
>HPを準備するまでは出来たのですが、HPの減らし方(ダメージ)がわかりません HPの値を保存しておく変数があるならダメージをもらうタイミング(ダメージをもらう処理をするイベント)で引き算してやればよい ダメージをもらうタイミングが「敵が近づいたら」ということなら敵のステップイベントでpoint_distance()関数を使えばいい。例えば obj_mychara:自分が操作するキャラのオブジェクト名 VarMyhp:自キャラのHPを覚えとく変数 obj_emychara:敵キャラのオブジェクト名と命名してあるとして、 obj_emycharaのステップイベントに「Execute a piece of code」で if(point_direction(self.x, self.y, obj_mychara.x, obj_mychara.y)<=50)//敵キャラと自キャラとの距離が50ピクセル以下ならば { obj_mychara.VarMyhp -= 3//自キャラのHPを3減らす } とか書いてやる。但しコレだと毎ステップごとにHPを減らすから、範囲内に入ればとんでもないスリップダメージになるので 一定周期ごととか、減らす量を思いっきり少量にするとか、そういう工夫は必要かと思う。まぁとりあえず がんばれ〜
- 967 名前:966 mailto:sage [2008/05/06(火) 00:33:47 ID:HwPOvHtQ]
- あう間違えてる ごめん
× if(point_direction(self.x, self.y, obj_mychara.x, obj_mychara.y)<=50) ○ if(point_distance(self.x, self.y, obj_mychara.x, obj_mychara.y)<=50)
- 968 名前:名前は開発中のものです。 mailto:sage [2008/05/06(火) 00:40:06 ID:m5xvmqWN]
- >>965 >>967さん
ご返答ありがとうございます。 なるほど、そういう風な式を立てればいいのですか〜 わかりました。ありがとうございました
- 969 名前:名前は開発中のものです。 mailto:sage [2008/05/06(火) 03:30:10 ID:HwPOvHtQ]
- >>968
一応聞いておくけどヘルプファイルもってる?
- 970 名前:名前は開発中のものです。 mailto:sage [2008/05/06(火) 11:45:29 ID:m5xvmqWN]
- >>969だいぶ遅れた返答ですみません。
F1のあれの事ですか? 英語で読めないです。。
- 971 名前:名前は開発中のものです。 [2008/05/06(火) 12:57:24 ID:ndOoddgE]
- gamemakerで作った拡張子exeのゲームをPSPで遊ぶ事は出来ないのでしょうか?
- 972 名前:名前は開発中のものです。 mailto:sage [2008/05/06(火) 13:04:37 ID:zKMDMsj4]
- GameMakerはWindows専用だ。マルチプラットホームなわけねぇだろ。
|

|