新しく発言する EXIT インデックスへ
PAINTについて教えてください

  PAINTについて教えてください 小川 2006/04/12 19:27:39 
  PAINT文は座標変換の対象ではありません。 白石 和夫 2006/04/12 20:13:10 
   └DRAWDISKを使って、修正しました。... 小川 2006/04/13 18:19:28 

  PAINTについて教えてください 小川 2006/04/12 19:27:39  ツリーへ

PAINTについて教えてください 返事を書く
小川 2006/04/12 19:27:39
このあいだはパッド入力を教えて頂いてありがとうございました。
今回はPAINT命令について相談です。
以下のプログラムで、円が画面の端に行くと、PAINTが有効に
ならないのですが、何かうまい方法はないでしょうか?


OPTION ARITHMETIC NATIVE

DECLARE EXTERNAL FUNCTION joyGetPos

DECLARE EXTERNAL PICTURE circle

SET BITMAP SIZE 998,644
SET WINDOW -499,499,-322,322




DO
SET DRAW MODE Hidden ! hidden draw モードへ移行
SET COLOR MODE "REGULAR"
CLEAR ! 初期化           
SET COLOR MODE "NATIVE"

LET pji$=REPEAT$("#",4*4) !構造体を確保する
LET rc=joyGetPos(0, pji$)

IF int32(pji$,0)=65535 AND int32(pji$,4)=32767 AND jvx<4 THEN LET jvx=jvx+.06
IF int32(pji$,0)=0 AND int32(pji$,4)=32767 AND jvx>-4 THEN LET jvx=jvx-.06
IF int32(pji$,0)=32767 AND int32(pji$,4)=0 AND jvy<5 THEN LET jvy=jvy+.08
IF int32(pji$,0)=32767 AND int32(pji$,4)=65535 AND jvy>-5 THEN LET jvy=jvy-.08
IF int32(pji$,0)=0 AND int32(pji$,4)=0 THEN
IF jvx>-4 THEN LET jvx=jvx-.06
IF jvy<5 THEN LET jvy=jvy+.08
END IF
IF int32(pji$,0)=65535 AND int32(pji$,4)=0 THEN
IF jvx<4 THEN LET jvx=jvx+.06
IF jvy<5 THEN LET jvy=jvy+.08
END IF
IF int32(pji$,0)=65535 AND int32(pji$,4)=65535 THEN
IF jvx<4 THEN LET jvx=jvx+.06
IF jvy>-5 THEN LET jvy=jvy-.08
END IF
IF int32(pji$,0)=0 AND int32(pji$,4)=65535 THEN
IF jvx>-4 THEN LET jvx=jvx-.06
IF jvy>-5 THEN LET jvy=jvy-.08
END IF

LET x=x+jvx
LET y=y+jvy

SET LINE COLOR 0
PLOT LINES: -499 ,0 ; 499 ,0
PLOT LINES: 0, 322 ; 0, -322
PLOT LINES: -499, 322; 499,-322
PLOT LINES: -499,-322; 499, 322
DRAW circle WITH SHIFT(x,y)
SET DRAW MODE explicit ! explicit draw モードへ移行
IF GetKeyState(27)<0 THEN EXIT DO
LOOP

CLEAR

END

EXTERNAL FUNCTION int32(s$,p)
OPTION ARITHMETIC NATIVE
OPTION CHARACTER byte
LET n=0
FOR i=1 TO 4
LET n=n+256^(i-1)*ORD(s$(p+i:p+i))
NEXT i
IF n<2^31 THEN LET int32=n ELSE LET int32=n-2^32
END FUNCTION

EXTERNAL FUNCTION joyGetPos(uJoyID, pji$) !位置とボタンの状態を取得する
OPTION ARITHMETIC NATIVE
ASSIGN "winmm.dll","joyGetPos"
END FUNCTION

EXTERNAL PICTURE circle
OPTION ARITHMETIC NATIVE
SET LINE COLOR 3
FOR t=0 TO 2*PI STEP PI/180
LET r=40+COS(t)
PLOT LINES: r*cos(t),r*sin(t);
NEXT t
SET AREA COLOR 16777215
PAINT 0,0
END PICTURE

  PAINT文は座標変換の対象ではありません。 白石 和夫 2006/04/12 20:13:10  ツリーへ

Re: PAINTについて教えてください 返事を書く
白石 和夫 2006/04/12 20:13:10
PAINT文は座標変換の対象ではありません。
MAT PLOT AREA文を使うか,
DRAW DISKを使ってみてください。

   └DRAWDISKを使って、修正しました。... 小川 2006/04/13 18:19:28  ツリーへ

Re: PAINT文は座標変換の対象ではありません。 返事を書く
小川 2006/04/13 18:19:28
DRAW DISKを使って、修正しました。うまくいきました。
ありがとうございました。

OPTION ARITHMETIC NATIVE

DECLARE EXTERNAL FUNCTION joyGetPos

DECLARE EXTERNAL PICTURE circle

SET BITMAP SIZE 998,644
SET WINDOW -499,499,-322,322
SET AREA COLOR 0



DO
SET DRAW MODE Hidden ! hidden draw モードへ移行
CLEAR ! 初期化           

LET pji$=REPEAT$("#",4*4) !構造体を確保する
LET rc=joyGetPos(0, pji$)

IF int32(pji$,0)=65535 AND int32(pji$,4)=32767 AND jvx<4 THEN LET jvx=jvx+.06
IF int32(pji$,0)=0 AND int32(pji$,4)=32767 AND jvx>-4 THEN LET jvx=jvx-.06
IF int32(pji$,0)=32767 AND int32(pji$,4)=0 AND jvy<5 THEN LET jvy=jvy+.08
IF int32(pji$,0)=32767 AND int32(pji$,4)=65535 AND jvy>-5 THEN LET jvy=jvy-.08
IF int32(pji$,0)=0 AND int32(pji$,4)=0 THEN
IF jvx>-4 THEN LET jvx=jvx-.06
IF jvy<5 THEN LET jvy=jvy+.08
END IF
IF int32(pji$,0)=65535 AND int32(pji$,4)=0 THEN
IF jvx<4 THEN LET jvx=jvx+.06
IF jvy<5 THEN LET jvy=jvy+.08
END IF
IF int32(pji$,0)=65535 AND int32(pji$,4)=65535 THEN
IF jvx<4 THEN LET jvx=jvx+.06
IF jvy>-5 THEN LET jvy=jvy-.08
END IF
IF int32(pji$,0)=0 AND int32(pji$,4)=65535 THEN
IF jvx>-4 THEN LET jvx=jvx-.06
IF jvy>-5 THEN LET jvy=jvy-.08
END IF

LET x=x+jvx
LET y=y+jvy

PLOT LINES: -499 ,0 ; 499 ,0
PLOT LINES: 0, 322 ; 0, -322
PLOT LINES: -499, 322; 499,-322
PLOT LINES: -499,-322; 499, 322

DRAW circle WITH SHIFT(x,y)
SET DRAW MODE explicit ! explicit draw モードへ移行
IF GetKeyState(27)<0 THEN EXIT DO
LOOP

CLEAR

END

EXTERNAL FUNCTION int32(s$,p)
OPTION ARITHMETIC NATIVE
OPTION CHARACTER byte
LET n=0
FOR i=1 TO 4
LET n=n+256^(i-1)*ORD(s$(p+i:p+i))
NEXT i
IF n<2^31 THEN LET int32=n ELSE LET int32=n-2^32
END FUNCTION

EXTERNAL FUNCTION joyGetPos(uJoyID, pji$) !位置とボタンの状態を取得する
OPTION ARITHMETIC NATIVE
ASSIGN "winmm.dll","joyGetPos"
END FUNCTION

EXTERNAL PICTURE circle
OPTION ARITHMETIC NATIVE
DRAW disk WITH SCALE(40)*SHIFT(x,y)
FOR t=0 TO 2*PI STEP PI/180
LET r=40+COS(t)
PLOT LINES: r*cos(t),r*sin(t);
NEXT t
END PICTURE


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。