HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0601
CORO3es_adirで設定した動きを停止させるには3解決


CORO3

リンク

2022/6/1(Wed) 22:39:08|NO.96535

標準スプライト機能の、es_adirなどで設定した動きを、停止させる(キャンセル)方法はありますか?
上からオブジェクトを降らせて、積もっていくようなものを作るときに、es_adirで下方向に動かし始めたあと、
画面下部や、他のオブジェクトに接触したら、その座標に止めようとしています。

試行錯誤して、es_aposで、無理矢理X,Y増分値を0にすることで止められたのですが、
これだと、スプライトを表示する限り、フレーム単位で無駄にes_aposの処理が積み重なってしまい、
将来的に処理速度に影響がでそうです。

止めたいスプライトを消して、再度es_setするとかしないといけないのでしょうか。



この記事に返信する


kの字

リンク

2022/6/2(Thu) 07:40:31|NO.96536

再度es_adirにて移動速度を0%にするか、es_setにて移動値を0にしてみてください。



kの字

リンク

2022/6/2(Thu) 19:24:30|NO.96538

再度es_setで停止、es_adirで速度を0にする、移動する、
で処理速度に違いがあるのかを計測してみました。
結果どれも大体同じ数値になりましたので、スプライトは動こうと動くまいと処理速度に違いはないようですね。



#include "hsp3dish.as" es_ini 10000,100,360 buffer 2 es_size 32,32 es_pat 0,0,0,0,2 gsel 0 repeat 10000 es_set cnt,320,240,0 ;スプライトを1万個セット es_adir cnt,rnd(360),rnd(50)+10 ;スプライトをランダム方向にランダムな速度移動 loop ;①移動設定を移動速度0に書き換え。 ; repeat 10000 ; es_adir cnt,rnd(360),0 ;速度を0に再設定 ; loop ;②スプライトを再セットし移動情報をリセット ; repeat 10000 ; es_set cnt,320,240,0 ;スプライトをセットしなおし、移動設定をリセットする ; loop タイマー=gettime(7)+gettime(6)*1000 repeat 300 ;秒間60フレームを5秒間スプライトを表示 redraw 0 boxf:es_draw await 1000/60 redraw 1 loop redraw 0 boxf:es_draw color 255,0,0 pos 0,0:mes (gettime(7)+gettime(6)*1000)-タイマー redraw 1 stop



CORO3

リンク

2022/6/2(Thu) 20:24:58|NO.96539

>kの字さん
わざわざ検証までしていただき、ありがとうございました!

es_adirとかes_aposを実行したら、ESI_SPDXやESI_SPDYの値が書き換わるので、
移動量が0なら処理はされない動きのようですね。
安心して、es_adirで移動スピードを0%にすることで対応できます。



ONION software Copyright 1997-2025(c) All rights reserved.