GameMaker 日本語掲示板

【解決】spriteアニメーションの仕様について

3 コメント
views
16 フォロー

spriteアニメーションで不可解な動作がありバグ報告したらそれは仕様だと言われた件です。
この仕様が自分にはちょっと難しく理解できないので質問します。

6frameあるspriteを用意します。
画像1

create event

image_speed = 0.2;

step event

if (image_index >= 5) image_speed = 0;

とすると、
期待するのはimage_indexが5、数字の「5」で止まることなんですが、実際には「4」で止まります。

これをバグ報告したら下記のように回答されました。

これはバグや我々が対処すべきものではありません。現状では、sprite_indexが5になった時点で4に変更されています。問題を解決するには、createイベントの2行目をimage_speed = 0.3に変更するか、stepイベントの4行目をif (image_index >=6) に変更してください。

image_speedを0.3にするのはアニメのスピードが変わるので不可です。なので、if (image_index >=6) に変更することになります。そうすると、「5」で止まります。

問題は、なぜsprite_indexが5になった時点で4に変更されるのかが分からないことです。
このコードでなんでimage_indexが4になるのかが分かりません。
仕様の理屈が分かりません。

さらに、spriteを5frame以下にすると挙動が変わるのです。
画像1
この画像で、
step event

if (image_index >= 4) image_speed = 0;

とすると、今度は期待した通りに「4」で止まるのです。


これがなぜなのか、どう考えたらいいのか、分かりません。
どなたか、分かる方いるでしょうか?

asa
作成: 2021/09/29 (水) 15:06:58
最終更新: 2021/09/29 (水) 17:36:39
通報 ...
1
asa 2021/09/29 (水) 17:36:19 修正

フォーラムでアドバイスを得て、浮動小数点の状態を確認しましたら、以下のようになりました。
image_index 5を指定すると4.99999952などの値になり、結果、期待に反してimage_index4で止まります。
image_index 4を指定すると4.00000048などの値になり、結果、期待通りにimage_index4で止まります。
この問題を避けるために、image_indexに「止めたいframe番号+0.1」を指定するといいと理解しました。

画像1

以上です。
とりあえず理解できたので、タイトルを「解決」にします。
YoYoGamesからの回答で、理解が完全に混乱してしちゃってました。

2
生高橋 2021/09/29 (水) 19:05:37

浮動小数点怖いっすね

3

げに。