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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0111
くろ文字の消し方6解決


くろ

リンク

2007/1/11(Thu) 20:10:27|NO.4742

また質問します、お願いします。
ゲームを作成しています。
セリフなどの文字だけ消したいのですが、ここの掲示板で見た
消したい部分だけ、背景画像をコピーをgcopyを使ってやったのですが
他のものも一緒に消えてしまいます。
これはそんなもんなのでしょうか?
それとも他のやり方かやり方が間違っているのでしょうか?
お願いします、教えてください。



この記事に返信する


GENKI

リンク

2007/1/11(Thu) 21:51:01|NO.4747

 ゲーム画面などは通常、「画面全部消す→画面全部描く」をループして延々と繰り返して作成します。
画面上動き(変化)がなくても、ループの始めに画面を全部消してからもう一度全画面描き直します。

 画面の一部しか動かないから画面の一部だけ消して描き直すということはほとんどしないでしょう。
理由は、主に処理がわかりにくくなることです。
> 他のものも一緒に消えてしまいます。
まさしくこの手の問題の防止のためです。
もしこのような消しすぎや消しのこしがあると映像が汚くなってしまいます。画面全部消してしまえば消し残しも消しすぎもありえないので安全確実です。



くろ

リンク

2007/1/11(Thu) 23:07:48|NO.4748

なるほど。とてもよくわかりました。
ありがとうございます。
今後も質問するかもしれませんがよろしくお願いします。
本当にありがとうございました



くろ

リンク

2007/1/11(Thu) 23:44:42|NO.4750

申し訳ないです。もう一つ質問です。
画面を全部消すのにpicloadで画像を読み込んで消していますが、その時一瞬白く
チラつきます。
それをredrawで直せるらしいのですがうまく使えてないのか直りません。
redrawの使い方か、画像を全部消す方法を教えてください。お願いします



GENKI

リンク

2007/1/12(Fri) 01:01:06|NO.4752

 なんだか絵に描いたような「よくある質問と回答」なスレですね。(^_^;;
せっかくなのできちんと回答してみることにします。


> 画面を全部消すのにpicloadで画像を読み込んで消していますが、その時一瞬白く
> チラつきます。
> それをredrawで直せるらしいのですがうまく使えてないのか直りません。
> redrawの使い方か、画像を全部消す方法を教えてください。お願いします

 メインループ内でpicloadを難度も繰り返し使わないようにしましょう。速度低下の原因にもなります。

 さて、ちらつくのは描画をしている途中作業がウィンドウに表示されているのが原因です。
この途中作業を見えないようにするにはredraw命令を使います。今回はそれが上手くつかえていないという話ですね。

 使い方は簡単。ループの一番初めに「redraw 0」、ループの最後から2番目に「redraw 1」とするだけです。
「await」はループの一番最後に入れます。このような感じになります。

*main redraw 0 ;この間にスクリプトを書いて絵を作る redraw 1 await 33 goto *main

これでちらつきはなくなるはずです。


 さて、ループ内でpicloadは使わないようにと書きましたが、普通は背景を画像で塗りつぶしたい場合はこんな風にします。
画像ファイル用意してないんで適当な背景を書いて画像のかわりとしました。

screen 0 title "メインウィンドウ ID = 0" ; 作業用ウィンドウ作成 screen 1 ;普通はbuffer命令を使います。今回は見えるようにscreen命令を使用。 title "背景画像呼び出し用ウィンドウ ID = 1" ;このウィンドウにpicloadで画像読み込みます。 ;今回は画像ファイル用意するの面倒なので適当な文字で埋めておきました。 ;画像を使いたいときはここでpicload命令を使ってください。 color 255,0,0 repeat 30 mes "BACK GROUND BACK GROUND BACK GROUND BACK GROUND BACK GROUND BACK GROUND BACK GROUND " loop gsel 0,1 ;メインウィンドウに作業対象を戻す ; メインループ *main redraw 0 ;描いてる途中を見えなくする。 color 255,255,255 : boxf : color ;前回のループでの画像を全部きれいに消す。 pos 0,0 : gcopy 1, 0,0, ginfo_winx, ginfo_winy ;背景画像などの画像を描く ;何か表示する pos px, ginfo_winy/2 mes " /■\" mes "(´∀`)" px++ redraw 1 ;描きあがった画面を見えるように表示する。 await 33 goto *main



くろ

リンク

2007/1/12(Fri) 23:55:53|NO.4760

詳しく書いて頂いてありがとうございます。
これを良く見て頑張ります。
本当にありがとうございました



くろ

リンク

2007/1/13(Sat) 00:30:08|NO.4761

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



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