ただしプログラムはちょっと複雑ですが。
(3号用です。プチコン4だとSPVARの仕様が違うんでしたっけ)
SPSCALEやSPROTなどは未対応です。
(SPROTで回転したスプライトだとuvwh変更だけじゃ範囲外が消せない...)
(いやプチコン4ならLCLIPとかがあるからもっと簡単なのでは...?)
'sp1とsp2
SPSET 1,3
SPOFS 1,50,50
SPSET 2,1
SPOFS 2,55,55
'切り出す範囲設定
U=50:V=50:W=25:H=25
GBOX U,V,U+W,V+H,#YELLOW
'sp3(非表示)
SPSET 3,0,0,0,0,0
SPOFS 3,100,50
GBOX 100,50,100+W,50+H,#YELLOW
'sp4とsp5定義
FOR I=1 TO 2
SPSET I+3,0,0,0,0,0
SPVAR I+3,0,I
SPVAR I+3,1,U
SPVAR I+3,2,V
SPVAR I+3,3,W
SPVAR I+3,4,H
SPFUNC I+3,"SPCOPY"
SPLINK I+3,3
NEXT
'メインループ
REPEAT
VSYNC 1
STICK OUT SX,SY
SPOFS 1 OUT X,Y
SPOFS 1,X+SX,Y-SY
CALL SPRITE
UNTIL 0
'sp4とsp5の表示
DEF SPCOPY
VAR I=CALLIDX
VAR J=SPVAR(I,0)
VAR U0=SPVAR(I,1)
VAR V0=SPVAR(I,2)
VAR W0=SPVAR(I,3)
VAR H0=SPVAR(I,4)
VAR U,V,W,H,A,X,Y,HX,HY
SPCHR J OUT U,V,W,H,A
SPOFS J OUT X,Y
SPHOME J OUT HX,HY
X=X-HX:HX=0
Y=Y-HY:HY=0
IF X<U0 THEN U=U+(U0-X):W=W-(U0-X):X=X+(U0-X)
IF Y<V0 THEN V=V+(V0-Y):H=H-(V0-Y):Y=Y+(V0-Y)
IF U0+W0<X+W THEN W=W-((X+W)-(U0+W0))
IF V0+H0<Y+H THEN H=H-((Y+H)-(V0+H0))
IF W>0 && H>0 THEN
SPSHOW I
SPCHR I,U,V,W,H,A
SPOFS I,X-U0,Y-V0
ELSE
SPHIDE I
ENDIF
END