|
|
2011/5/18(Wed) 21:27:11|NO.39253
始めて3ヵ月の初心者です。
初めて投稿します。
よろしくお願いします。
二つのbuffer画面(ID 1とID 2)の情報をメイン画面(ID 0)に描画しようとしています。
作ったスクリプトでは黒い背景に白い文字で描かれています。
これを白い背景に黒い文字で表現したいのですが、方法が思いつきません。
*****************************************************************************
x1=0 :y1=0
x2=0 :y2=100
*main
screen 0,640,480 ;ID 0 メイン画面
repeat 50
gosub*screen1
gosub*screen2
gosub*xy_increase
wait 2
loop
stop
*screen1
buffer 1 ;ID 1 buffer画面1
cls 4
color 255,255,255
pos x1,y1
mes "a"
gsel 0
gcopy 1,0,0,640,480
return
*screen2
buffer 2 ;ID 2 buffer画面1
cls 4
color 255,255,255
pos x2,y2
mes "b"
gsel 0
gmode 2,640,480,256
gcopy 2,0,0,640,480
return
*xy_increase
x1+=10
x2+=10
return
*****************************************************************************
ID 1の
cls 4
color 255,255,255
ID 2の
cls 4
color 255,255,255
gmode 2,640,480,256
を外すと、ID 1がID 2に上書きされて画面に残りません。
ID 2のgomodeの処理でID 1も残るようにできましたが、
黒い文字だとID 2が表示されません。
良い方法をご教授いただけるとありがたいです。
|
|
2011/5/18(Wed) 21:55:12|NO.39254
画面2をコピーするとき、コピー先の位置を画面1が消えない程度に下へずらしたらどうだ?
まあ、そもそも何をするスクリプトなのかよくわからない。もうちっとマシなサンプルが無いものか。
ここの●●を参考に作ったらこうなりました、というのがあったらそこの責任者を引っ叩いておきなさい。
clsを連打する状況がなかなか思いつかないのでもっと具体的な説明があればいい回答があるかもしれない。
|
|
2011/5/18(Wed) 22:00:02|NO.39255
上の実行結果とやりたい事が一致してない気がするけど…
gmodeの命令を良く読めば解決できると思う。
|
|
2011/5/18(Wed) 22:03:12|NO.39256
gmodeのモード4を使用すれば透明色は指定できます。
|
|
2011/5/18(Wed) 22:10:48|NO.39257
bufferをループ中に入れるのもやめてね
|
|
2011/5/19(Thu) 00:56:41|NO.39258
・gmode 2をやめて、コピーしない色を自由に選べるgmode 4を使うことにしました。
(コピーしない色(255,255,255)とごっちゃになるといけないので、ID0を違う色で塗りつぶしています)
・コピー先の座標が指定されていなかったので、gcopyの前にpos0,0をつけました。
x1=0 :y1=0
x2=0 :y2=100
*main
screen 0,640,480 ;ID 0 メイン画面
buffer 1 ;ID 1 buffer画面1 を用意する
buffer 2 ;ID 2 buffer画面2 を用意する
repeat 50
// gsel 0 ;メイン画面を選んで
// color 255,255,255:boxf ;背景の色で塗りつぶす
gosub*screen1
gosub*screen2
gosub*xy_increase
wait 2
loop
stop
*screen1
gsel 1 ;ID1を選んで
color 200,200,200:boxf ;コピーしたくない色で塗りつぶす
color 0,0,0 ;黒色で'a'を書く
pos x1,y1
mes "a"
gsel 0 ;ID0を選び
color 200,200,200 ;コピーしたくない色はコピーしないモードにして
gmode 4,640,480,256 ;
pos 0,0 ;ID0の(0,0)の座標に、
gcopy 1,0,0,640,480 ;ID1をまるまるコピー
return
*screen2
gsel 2
color 200,200,200:boxf
color 0,0,0
pos x2,y2
mes "b"
gsel 0
color 200,200,200
gmode 4,640,480,256
pos 0,0
gcopy 2,0,0,640,480
return
*xy_increase
x1+=10
x2+=10
return
|
|
2011/5/20(Fri) 20:38:55|NO.39283
■To ORZさん
『画面1が消えない程度に下へずらす』方法がわからず困っていました。
Mさんのお手本で理解できましたが、pos命令で座標を指定するのですね。
pos命令はmesやboxfなどの座標指定だけだと思い込んでいました。
今回参考にしたものはありません^^;
二つの画像を別々に動かすにはどうしたらよいのかを考えていたところ、
このサンプルができました。(サンプルは文字ですが)
■To Veさん、てれてれさん
gmodeのリファレンスのモード3以降の使い方がいまいちピンときていませんでした。
color命令をgmodeの前で使って、透明色を指定するのですね。
■To 晩御飯さん
確かにbuffer命令がloopの中に入っていますね。。。
1回使えばそれでよい命令はloopにいれないようにと参考サイトで見てはいたんですが・・・。
ちなみにbufferをloop外に出すとaxサイズが変わるのかなとやってみましたが、
loop内にある場合 : axサイズ=721
loop外にある場合 : axサイズ=739
と増えました。
axサイズはファイルの大きさと思っているのですが、やはり理解違いでしょうか。
■To Mさん
丁寧な添削ありがとうございました!
おかげでpos命令の役割とgmodeの機能を理解することができました^^
ちなみに手直ししたスクリプトは下の通り。
画面2の貼り付け位置をpos命令で指定するだけで、gomodeは使わずにすみました。
****************************************************************
pre
x1=0 :y1=0
x2=0 :y2=100
*main
screen 0,640,480 ;ID 0 メイン画面
buffer 1 ;ID 1 buffer画面1
buffer 2 ;ID 2 buffer画面1
repeat 50
gosub*screen1
gosub*screen2
gosub*xy_increase
wait 2
loop
stop
*screen1
gsel 1
pos x1,y1
mes "a"
gsel 0
pos 0,y1 ;←bufferの表示座標指定
gcopy 1,0,0,640,480
return
*screen2
gsel 2
pos x2,y2
mes "b"
gsel 0
pos 0,y2 ;←bufferの表示座標指定
gcopy 2,0,0,640,480
return
*xy_increase
x1+=10
x2+=10
return
/pre
****************************************************************
文字を別々に表示させるだけで目的がわかりにくいと思いますが、
文字の代わりに画像を二つのbuffer画面で処理した場合、どうすればいいのかを実験したかったのです。
(画像だとサンプル画像を用意してもらわないといけないと思ったので)
bufferだと(posで位置をずらさないと)上書きされてしまうし・・・
gmodeだと(colorで透明色を指定しないと)黒が消えてしまうし・・・
皆さんのご指摘で( )の理解ができました^^
ありがとうございました!

| |
|
2011/5/20(Fri) 20:46:09|NO.39285
〜 の使い方を間違いましたonz
****************************************************************
x1=0 :y1=0
x2=0 :y2=100
*main
screen 0,640,480 ;ID 0 メイン画面
buffer 1 ;ID 1 buffer画面1
buffer 2 ;ID 2 buffer画面1
repeat 50
gosub*screen1
gosub*screen2
gosub*xy_increase
wait 2
loop
stop
*screen1
gsel 1
pos x1,y1
mes "a"
gsel 0
pos 0,y1 ;←bufferの表示座標指定
gcopy 1,0,0,640,480
return
*screen2
gsel 2
pos x2,y2
mes "b"
gsel 0
pos 0,y2 ;←bufferの表示座標指定
gcopy 2,0,0,640,480
return
*xy_increase
x1+=10
x2+=10
return
|
|