spriteアニメーションで不可解な動作がありバグ報告したらそれは仕様だと言われた件です。
この仕様が自分にはちょっと難しく理解できないので質問します。
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以下にすると挙動が変わるのです。
この画像で、
step event
if (image_index >= 4) image_speed = 0;
とすると、今度は期待した通りに「4」で止まるのです。
これがなぜなのか、どう考えたらいいのか、分かりません。
どなたか、分かる方いるでしょうか?
フォーラムでアドバイスを得て、浮動小数点の状態を確認しましたら、以下のようになりました。
image_index 5を指定すると4.99999952などの値になり、結果、期待に反してimage_index4で止まります。
image_index 4を指定すると4.00000048などの値になり、結果、期待通りにimage_index4で止まります。
この問題を避けるために、image_indexに「止めたいframe番号+0.1」を指定するといいと理解しました。
以上です。
とりあえず理解できたので、タイトルを「解決」にします。
YoYoGamesからの回答で、理解が完全に混乱してしちゃってました。
浮動小数点怖いっすね
げに。