|
|
2013/3/24(Sun) 17:03:15|NO.53204
すみません、解決したと思ってチェックを入れてしまったので
新規で質問させていただきます。
先ほどの「画像」というタイトルの質問の内容についてです。
ありさんが考えてくれた処理で、ブレンド率を1ずつではなく、3ずつ増やせるようにするには
どうしたらよいでしょうか?
色々試してみましたがうまくいきませんでした。
|
|
2013/3/24(Sun) 18:20:42|NO.53210
通りすがり
#const をいじる(エラーチェックしてね)
#const ablend 3
#const wariai 128/ablend
screen 1, 640, 480 : cls 4
color 255, 0, 0 : circle 0, 0, 80, 80
color 0, 255, 0 : circle 80, 0, 160, 80
color 0, 0, 255 : circle 160, 0, 240, 80
color 255, 255, 255 : circle 240, 0, 320, 80
celdiv 1, 80, 80, 40, 40
cno = 0, 1, 2
cx = 100, 320, 540
cy = 240, 240, 240
bl = 0, 0, 0
flg = 0
bl(0) = 1
gsel 0, 1
*main
redraw 0
color 0, 0, 0 : boxf
repeat 3
if bl(cnt) >= 255 {
gmode 4, , , 255
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, 3
} else {
if bl(cnt) ! 0 {
gmode 4, , , bl(cnt)
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, cno(cnt)
bl(cnt) = limit(bl(cnt) + ablend, 0, 255)
}
}
loop
if flg < 3 {
if bl(flg)/ablend = wariai {
flg + 1
bl(flg) = 1
}
}
redraw 1
title "ブレンド率=" + bl(0) + " " + bl(1) + " " + bl(2)
await 10
goto *main
|
|
2013/3/24(Sun) 18:58:13|NO.53213
できました!ありがとうございます。
お礼を言ったとたんに次の質問というのもどうかと思いますが……
repeat 3の後の
if bl(cnt) >= 255 {
のところを
if (bl(cnt) >= 255 && bl(cnt) <= 300) {
といった具合にし、ある程度白い円を描画したら消してしまいたいです。
ですが、limitの終値を300にしても、上記の方法では白い円が描画されっぱなしです。
さらに
円を描画→白い円を上書き→消す
という一連の流れを繰り返すにはどうしたらいいですか……?
初歩的な質問ばかりですみません。
|
|
2013/3/24(Sun) 20:16:40|NO.53219
gmode の ブレンド率を「1」にするか
celput の2番目の要素を「4」にするとか?
繰り返す場合は、このスクリプト自体をサブルーチンとして
扱い、メインから繰り返し呼び出す。。とか?
工夫してみてください
|
|
2013/3/24(Sun) 21:22:01|NO.53222
サブルーチンにして外部から呼び出す方法は試しましたが
三つ画像を描画して、白い円が消える(何も描画されていない状態に戻る)こともなく
そしてループされるでもなく、終わってしまいます。
|
|
2013/3/24(Sun) 23:53:36|NO.53233
今のところこんな感じです。
何がいけないのでしょうか。
実行してみていただけないでしょうか……?
#const ablend 3
#const prop 128/ablend
screen 1, 640, 480 : cls 4
color 255, 0, 0 : circle 0, 0, 80, 80
color 0, 255, 0 : circle 80, 0, 160, 80
color 0, 0, 255 : circle 160, 0, 240, 80
color 255, 255, 255 : circle 240, 0, 320, 80
celdiv 1, 80, 80, 40, 40
cno = 0, 1, 2
cx = 100, 320, 540
cy = 240, 240, 240
bl = 0, 0, 0
flg = 0
bl(0) = 1
gsel 0, 1
repeat
redraw 0
gosub *Back
gosub *main
redraw 1
await
loop
*Back
color : boxf
return
*main
repeat 3
cx(cnt) = (cnt+1)*120
cy(cnt) = (cnt+1)*60
loop
repeat 3
if (bl(cnt) >= 255 and bl(cnt) < 300){
bl++
gmode 4, , , 255
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, 3
}else{
if bl(cnt) < 255 {
gmode 4, , , bl(cnt)
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, cno(cnt)
bl(cnt) = limit(bl(cnt) + ablend, 0, 255)
}
}
loop
if (flg < 3){
if bl(flg)/ablend = prop {
flg + 1
bl(flg) = 1
}
}
if (flg = 3) : flg = 0
await 10
return
|
|
2013/3/25(Mon) 00:25:02|NO.53237
変更部分は//
repeat 3
if (bl(cnt) >= 255 and bl(cnt) < 300){
bl(cnt)++ //
gmode 4, , , 255
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, 3
if bl(cnt)=300 {bl(cnt)=1} //
}else{
if bl(cnt) ! 0 { //
gmode 4, , , bl(cnt)
color 0, 0, 0
pos cx(cnt), cy(cnt)
celput 1, cno(cnt)
bl(cnt) = limit(bl(cnt) + ablend, 0, 255)
}
}
loop
|
|
2013/3/25(Mon) 16:06:36|NO.53247
遅くなってすみません。
画像を消すのと、ループはできました。
このスクリプトで、3つ画像を描画して消したら、次の3つは座標を下にずらして
描画したいと考えました。
if (flg = 3) : flg = 0 : count + 1
というふうにして、countが0のときはx=0,y=0
countが1のときはx=30,y=30
といった感じに書いたら、ブレンド率が最大になったものから順番に移動したいのに
3つ同時に座標が移動してしまいます。
どのように書いたらうまくいくでしょうか……
|
|
2013/3/29(Fri) 14:52:48|NO.53325
ありがとうございました。
|
|