|
|
2012/8/29(Wed) 18:53:18|NO.48905
delが消す対象の番号で
sprが消す対象が入っている配列です(要素数1000のint型)
dim sprcpy,1000 ;sprと同じ形のものを作る
memcpy sprcpy,spr,1000*4 ;それにsprの内容をコピー
memcpy spr,sprcpy,del*4,0,0 ;delの直前までの部分をsprに上書き
memcpy spr,sprcpy,(1000-del-1)*4,(del+1)*4,(del+2)*4 ;delの直後から最後までをdelが消えるように上書き
return
sprという配列からdel番の値を消す、という風にしたいんですがうまくいきません
なにがおかしいんでしょうか?
たぶんオフセットなどが間違っていると思うんですが自分の頭ではもう限界です・・・
|
|
2012/8/29(Wed) 19:19:28|NO.48907
>>dim sprcpy,1000 ;sprと同じ形のものを作る
数値型変数を1000個作って
>>memcpy sprcpy,spr,1000*4 ;それにsprの内容をコピー
コピー
>>memcpy spr,sprcpy,del*4,0,0 ;delの直前までの部分をsprに上書き
なにがしたいんだ。
>>memcpy spr,sprcpy,(1000-del-1)*4,(del+1)*4,(del+2)*4 ;delの直後から最後までをdelが消えるように上書き
良く分からないが前詰めしたいのかな。
|
|
2012/8/29(Wed) 19:29:35|NO.48908
削除して詰めるだけならこれで良いんじゃないの?
del=100
dim spr,1000
spr(del)=1,2,3
repeat 3,del
mes strf("%d : %d",cnt,spr(cnt))
loop
memcpy spr,spr,(1000-del-1)*4,(del)*4,(del+1)*4 ;delの直後から最後までをdelが消えるように上書き
mes "削除後"
repeat 3,del
mes strf("%d : %d",cnt,spr(cnt))
loop
最後尾は上書きコピーされずに残る
必要ならspr(999)=0とでもすれば良い
|
|
2012/8/29(Wed) 20:00:48|NO.48909
ああ
直後からのを上書きするだけでいいんですね・・・
ありがとうございます
|
|
2012/8/29(Wed) 22:57:47|NO.48914
二次元配列でも使えるようにしたくて
del=100
dim spr,1000
spr(del,2)=1,2,3
repeat 3,del
mes strf("%d : %d",cnt,spr(cnt,2))
loop
memcpy spr,spr,(1000-del-1)*4,(del)*4*2,(del+1)*4*2 ;delの直後から最後までをdelが消えるように上書き
mes "削除後"
repeat 3,del
mes strf("%d : %d",cnt,spr(cnt,2))
loop
としましたがうまくいきません
どうすればいいんですか?
|
|
2012/8/30(Thu) 00:25:54|NO.48916
// %1 = 変数
// %2 = 削除する位置(byte)
// %3 = 削除するサイズ(byte)
// %4 = 確保されているバッファのサイズ(byte)
#define global DeleteMemory(%1,%2,%3,%4) \
int_work@hMem_module = %2+%3 :\
memcpy %1 , %1 , %4-int_work@hMem_module , %2 , int_work@hMem_module
// データの構造を定義
#enum DAT1 = 0
#enum DAT2
#enum DAT3
#enum TOTALDAT
#const TOTALDAT_BUFSIZE TOTALDAT*4
// データの数を定義
#const ARRAYLEN 5
dim v,TOTALDAT,ARRAYLEN
repeat ARRAYLEN
v(0,cnt) = -1,-1,-1
loop
v(0,2) = 100,100,100
i = TOTALDAT_BUFSIZE*2
a = ARRAYLEN*TOTALDAT_BUFSIZE
DeleteMemory v,i,TOTALDAT_BUFSIZE,a
以前書いたマクロをアップします。
主に、指定した変数の指定した位置を指定したサイズ、削除して詰めます。
|
|