【mkII専用】 2013年2月5日 公開
ハードの制約上、1点タッチしか行えないプチコンにおいて擬似的にマルチタッチによる座標検出を実現するルーチンです。このルーチンを組み込むことでタッチパネルをタッチした状態で別の場所をタッチしてもその座標を検出することが可能になります。仕様面の問題も大きいため実用になるかは微妙ですが、良かったら皆さんのプログラムに自由に組み込んで使ってください。
@MTOUCH RM=20:RL=1 PX=TX:PY=TY TC=TCHST:TX=TCHX*TC:TY=TCHY*TC TPO=TPO*TC:TP=TP*TC TM=(POW(TX-TCX(0),2)+POW(TY-TCY(0),2)<RM*RM/4)+(POW(TX-TCX(1),2)+POW(TY-TCY(1),2)<RM*RM/4) TL=POW(TX-PX,2)+POW(TY-PY,2) TLM=TLM+(TL-TLM)*(TL>TLM) MT=(TL<RL*RL/4)*(TLM>RM*RM/4)*TC*(!TM+!TP) IF MT THEN TPO=TP+1:TCX(TP)=TX*TPO-TCX(!TP)*TP:TCY(TP)=TY*TPO-TCY(!TP)*TP:TLM=0:TP=!TP RETURN |
@MTCH2 IF !TP THEN RETURN MTX(0)=-10:MTY(0)=-30 MTX(1)= 30:MTY(1)= 20 MTX(2)= 30:MTY(2)= 45 MTX(3)=-70:MTY(3)=-25 MTX(4)=-30:MTY(4)= 10 MTX(5)= -5:MTY(5)=-50 MTX(6)=-40:MTY(6)=-10 MTX(7)= 35:MTY(7)= 20 FOR I=0TO 1 TFX=(TCX(!I)-128)/128 TFY=(TCY(!I)-96)/96 TK=(TFX>0)+(TFY>0)*2 TFX(I)=MTX(TK+I*4)*ABS(TFX) TFY(I)=MTY(TK+I*4)*ABS(TFY) NEXT TWX=ABS(TCX(0)-TCX(1))/256 TWY=ABS(TCY(0)-TCY(1))/192 TCX(TP)=0OR TCX(TP)+(TFX(0)-TFX(1)*2)*TWX TCY(TP)=0OR TCY(TP)+(TFY(0)-TFY(1)*2)*TWY IF TCX(TP)<0THEN TCX(TP)=0 IF TCX(TP)>255THEN TCX(TP)=255 IF TCY(TP)<0THEN TCY(TP)=0 IF TCY(TP)>191THEN TCY(TP)=191 RETURN |
ACLS:CLEAR:PNLTYPE "OFF" GPAGE 1 BGMPLAY 28 @MAIN GCLS FOR I=0TO 1 GFILL 9,9+I*171,11,11+I*171,15 GFILL 244,9+I*171,246,11+I*171,15 NEXT GFILL 127,95,129,97,15 PNLSTR 0,18,"タッチ"+STR$(TPO),TPO+2 PNLSTR 0,19,"("+STR$(TCX(0))+","+STR$(TCY(0))+") " PNLSTR 0,20,"("+STR$(TCX(1))+","+STR$(TCY(1))+") " P=TPO GOSUB @MTOUCH FOR I=0TO TPO-1 GCIRCLE TCX(I),TCY(I),7,2 GPAINT TCX(I),TCY(I),2 NEXT GFILL TX-1,TY-1,TX+1,TY+1,11 BEEP ,,-(P<TPO) WAIT 1 GOTO @MAIN @MTOUCH RM=20:RL=1 PX=TX:PY=TY TC=TCHST:TX=TCHX*TC:TY=TCHY*TC TPO=TPO*TC:TP=TP*TC TM=(POW(TX-TCX(0),2)+POW(TY-TCY(0),2)<RM*RM/4)+(POW(TX-TCX(1),2)+POW(TY-TCY(1),2)<RM*RM/4) TL=POW(TX-PX,2)+POW(TY-PY,2) TLM=TLM+(TL-TLM)*(TL>TLM) MT=(TL<RL*RL/4)*(TLM>RM*RM/4)*TC*(!TM+!TP) IF MT THEN TPO=TP+1:TCX(TP)=TX*TPO-TCX(!TP)*TP:TCY(TP)=TY*TPO-TCY(!TP)*TP:TLM=0:GOSUB@MTCH2:TP=!TP RETURN @MTCH2 IF !TP THEN RETURN MTX(0)=-10:MTY(0)=-30 MTX(1)= 30:MTY(1)= 20 MTX(2)= 30:MTY(2)= 45 MTX(3)=-70:MTY(3)=-25 MTX(4)=-30:MTY(4)= 10 MTX(5)= -5:MTY(5)=-50 MTX(6)=-40:MTY(6)=-10 MTX(7)= 35:MTY(7)= 20 FOR I=0TO 1 TFX=(TCX(!I)-128)/128 TFY=(TCY(!I)-96)/96 TK=(TFX>0)+(TFY>0)*2 TFX(I)=MTX(TK+I*4)*ABS(TFX) TFY(I)=MTY(TK+I*4)*ABS(TFY) NEXT TWX=ABS(TCX(0)-TCX(1))/256 TWY=ABS(TCY(0)-TCY(1))/192 TCX(TP)=0OR TCX(TP)+(TFX(0)-TFX(1)*2)*TWX TCY(TP)=0OR TCY(TP)+(TFY(0)-TFY(1)*2)*TWY IF TCX(TP)<0THEN TCX(TP)=0 IF TCX(TP)>255THEN TCX(TP)=255 IF TCY(TP)<0THEN TCY(TP)=0 IF TCY(TP)>191THEN TCY(TP)=191 RETURN |