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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0803
es_areaとes_exnewについて2解決


リンク

2013/8/3(Sat) 20:34:25|NO.56110

hspdxfixで、スプライトを使ったマップスクロールをちょっと作っていて
exnewに失敗する(開いたスプライトNoが無い)事が頻発して
妙だなと思ったので質問いたします。
作っていたソースからちょっと切り貼りした変なソースで申し訳ないですが。


#include "hspdx.as" randomize es_ini ,,256 es_screen 256,224,16,,1,1 width 512,384,0,0 es_cls es_area 0,0,239,223 buffer 3,256,256,0 picload "test.bmp",0 es_buffer 0,0,-1,1 es_size 16,16,100 es_pat 0,16,0,0 es_pat 1,32,0,0 es_pat 2,48,0,0 es_pat 3,60,0,0 move_count=16 move_lock=0 move_dir=0 repeat 15 a=cnt repeat 16 es_exnew b,0,256 es_set b,cnt*16,16*a,rnd(4),1,0 es_type b,2 loop loop *main es_cls 0,0,0 stick ky,$0f gosub *keychk gosub *scroll es_draw ,,,1 es_sync 16 await 0 goto *main *keychk if move_lock==0{ if ky&1 {move_dir=64 :move_lock=1} if ky&4 {move_dir=192:move_lock=1} } if ky&128{es_bye:end} return *scroll if move_lock==1&&move_count==16{ repeat 256 es_adir cnt,move_dir,100 loop } if move_count==0{ move_lock=0:move_count=16 repeat 256 es_adir cnt,move_dir,0 loop } if move_lock==1{move_count--} return
(画像は何か適当なのをtest.bmpの名前で用意してください。)
カーソルで左右にスクロールしますが、es_area外に出たスプライトも
削除されること無くスプライトNo、キャラパターンから座標まで
全て保存されているようです。
エリア外に出たスプライトは破棄されて、スプライトNoも
自動的に再使用可能になると認識していましたが、違うのでしょうか?



この記事に返信する


暇人

リンク

2013/8/3(Sat) 22:45:09|NO.56113

es_getでflag値を取得して生きてる物のみes_adirしないと表示ONになる



リンク

2013/8/3(Sat) 23:24:30|NO.56114

…なるほど!わかってきました。

つまり、es_areaのマニュアルにある
スプライト座標が(p1,p2)-(p3,p4)の範囲内にないものは、 自動的に削除されます。
は、正しく言うと
スプライト座標が(p1,p2)-(p3,p4)の範囲内にないものは、 flag値が0になります。
であり、

es_exnewは、flag値が0のスプライト番号を検索する。

そして、一度作られたスプライトはes_set等で内容を上書きされない限り
メモリ内に残っている。

ということなんですね。ありがとうございました。



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