08/05/04 23:28:07 KZv3H4cz
951です。
書き込みをした直後、試行錯誤を続けたところ
原因が分かりました。
gifをゆっくり動かしたかったことから、以下のコードを入れていました。
image_speed = 0.2
これを以下の値に直したところ、「5枚目でストップ」が動作することを確認しました。
image_speed = 0.25
うーん、ただここでひとつ疑問が・・・
なんで「0.2」では動作しなかったのか・・・うーん
板汚し、すいませんでした orz
953:名前は開発中のものです。
08/05/05 00:40:19 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:名前は開発中のものです。
08/05/05 01:59:41 T1qF9S2G
まあでも、853で言ってるとおり
Other > Animation End イベント使えば
image_index判定する必要ないんだけども。
ちなみにあくまでStepイベントで判定するなら
if (image_index + image_speed >= image_number)
で Animation End イベントと等価になる。
955:名前は開発中のものです。
08/05/05 05:06:15 KYkFnzVP
FEっぽいゲームを作りたいんですが
移動範囲の求め方がわかりません;
1マスごとに-1するということだと思うんですが
具体的に書けなくて・・・
教えていただけたら嬉しいです
956:名前は開発中のものです。
08/05/05 05:40:23 Bq2Q3q9u
やり方はここが参考になるんじゃない?
URLリンク(www5f.biglobe.ne.jp)
再帰ループとか理解している必要があるけど。
957:名前は開発中のものです。
08/05/05 06:13:29 KYkFnzVP
>>956
そのサイトも見たんですがsearch関数というのがよく分からないです;
自分で作るものなのでしょうか・・・
958:名前は開発中のものです。
08/05/05 08:26:38 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:名前は開発中のものです。
08/05/05 08:57:11 grhJSKQZ
>>958
image_indexじゃなくてsprites_indexでした。
あと、このコードじゃうまく動作しませんでした。
うーん。難しい・・・。
960:名前は開発中のものです。
08/05/05 10:27:30 j6OioUkw
なんだかやりたいことが混乱してないか?
「困ったときは原点に戻る」
プログラム的なことは置いといて、まず何をしたいのかを考えてみ?
この場合はアニメーションが終わったら止める、だったよね?
Animation End Eventでimage_speedを0にすればアニメーションはとまるんじゃない?
多分これだけだと一枚目に戻って止まるかも知れないから、
止めた後にimage_indexを最後の数字にする。
つまり、
「アニメーションが終わったら、
・まずアニメーションを止めて、
・最後の画像を表示させる」
……>>853が言ってることと全く同じなんだが。
これで出来ないってなると、Step eventで毎回毎回image_speedを設定してるんじゃない?
もしそうだったらいくら止めても止まらないんだけどw
961:名前は開発中のものです。
08/05/05 10:40:47 j6OioUkw
もしimage_speedが一定で、終わったらそれを止めたいってだけなら、
image_speedをCreate Eventで設定した方がいいよ。
962:名前は開発中のものです。
08/05/05 11:31:49 grhJSKQZ
>>960,961
なんていうか、いろいろとすいません。
うーん、そうですねぇ。「やりたいこと」…
「一定条件のみアニメを止める」っていう動作をさせたいんだと思います。
Object内で条件毎にコロコロspritesを入れ替えておりまして
spritesに一定の画像が使われている時に限り、「アニメを一周」させたかった訳です。
(キャラが走行中に立ち止まった時、着地した時だけ服が揺れるアニメ…等)
1、sprites変更後、「アニメ停止変数」生成
2、Animation Endにて「アニメ停止変数が1の時のみ、image_speed=0」
でやりたいことが実現できました。
うーむ。確かに原点に返ってみれば、単純な事だったのですね…。
板汚しすいませんでした orz
963:名前は開発中のものです。
08/05/05 21:40:31 2SyyMfLm
なにげにレス伸びてる・・・そろそろ次スレの季節なのかな?
964:名前は開発中のものです。
08/05/05 22:22:44 eAt6pbsl
>>950です。
また質問に来ました。
HPを準備するまでは出来たのですが、HPの減らし方(ダメージ)がわかりません。。
後、自分的にはゾンビのような敵と戦わせたいので、
近づいたら(正確には近づかれたら)ダメージという形での使用方法も教えてください。
よろしくお願いします。
965:名前は開発中のものです。
08/05/05 22:48:47 J24rBd4c
>>964
サンプルとか、>>1チュートリアルとかサイトに色々書いてるから自分でも調べてから書き込むことをオススメする。
966:名前は開発中のものです。
08/05/05 23:18:51 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
08/05/06 00:33:47 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:名前は開発中のものです。
08/05/06 00:40:06 m5xvmqWN
>>965 >>967さん
ご返答ありがとうございます。
なるほど、そういう風な式を立てればいいのですか~
わかりました。ありがとうございました
969:名前は開発中のものです。
08/05/06 03:30:10 HwPOvHtQ
>>968
一応聞いておくけどヘルプファイルもってる?
970:名前は開発中のものです。
08/05/06 11:45:29 m5xvmqWN
>>969だいぶ遅れた返答ですみません。
F1のあれの事ですか?
英語で読めないです。。
971:名前は開発中のものです。
08/05/06 12:57:24 ndOoddgE
gamemakerで作った拡張子exeのゲームをPSPで遊ぶ事は出来ないのでしょうか?
972:名前は開発中のものです。
08/05/06 13:04:37 zKMDMsj4
GameMakerはWindows専用だ。マルチプラットホームなわけねぇだろ。