HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0518
Gimic二つのbuffer画面からメイン画面に文字を表示させたい7解決


Gimic

リンク

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が表示されません。


良い方法をご教授いただけるとありがたいです。



この記事に返信する


ORZ

リンク

2011/5/18(Wed) 21:55:12|NO.39254

画面2をコピーするとき、コピー先の位置を画面1が消えない程度に下へずらしたらどうだ?

まあ、そもそも何をするスクリプトなのかよくわからない。もうちっとマシなサンプルが無いものか。
ここの●●を参考に作ったらこうなりました、というのがあったらそこの責任者を引っ叩いておきなさい。
clsを連打する状況がなかなか思いつかないのでもっと具体的な説明があればいい回答があるかもしれない。



Ve

リンク

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をループ中に入れるのもやめてね



M

リンク

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



Gimic

リンク

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で透明色を指定しないと)黒が消えてしまうし・・・

皆さんのご指摘で( )の理解ができました^^

ありがとうございました!



Gimic

リンク

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



ONION software Copyright 1997-2023(c) All rights reserved.