|
|
2013/3/29(Fri) 14:57:39|NO.53327
「画像」というタイトルで質問をしましたが、回答が得られませんでしたので
新規で質問させていただきました。すみません。
画像を3つ描画するとき、ブレンド率を上げていって徐々に描画します。
一つ目のブレンド率が128のとき二つ目の描画をはじめ
二つ目のブレンド率が128のとき三つ目の描画をはじめ
一つ目のブレンド率が255になったら、一つ目の画像の座標だけ30下にずらしたいです。
二つ目と三つ目の画像はまだもとの座標のままですが、一つ目と同様に
ブレンド率が255になったら座標をずらしたいです。
自分で色々試しましたが、どうしても三つ一緒に座標がずれてしまうので
どうしたらよいか教えてください。
|
|
2013/3/29(Fri) 15:01:54|NO.53328
ちなみにスクリプトはこんな感じになっています。
#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
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
if (flg < 3){
if bl(flg)/ablend = prop {
flg + 1
bl(flg) = 1
}
}
if (flg = 3) : flg = 0
await 10
return
|
|
2013/3/29(Fri) 16:33:52|NO.53329
/*良く判りませんがこう言う事でしょうか?*/
#const ablend 3
#const prop 128/ablend
screen 1 :boxf
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
cn = 0, 1, 2
cx = 100,320,540
cy = 240,240,240
bl = 0, 0, 0
fg = 1, 0, 0
gsel 0,1
repeat :redraw 0 :color :boxf :gosub *label_1 :redraw 1 :await 30
title strf("%3d[%d] %3d[%d] %3d[%d]",bl(0),fg(0),bl(1),fg(1),bl(2),fg(2))
loop
stop
*label_1
repeat 3
if (fg(cnt) == 1) {if (bl(cnt) >= 255 and bl(cnt) < 300){
bl(cnt)++ :gmode 4,,,255
cy(cnt) = 270 ;
pos cx(cnt),cy(cnt) :celput 1,3
if (bl(cnt) == 300) {bl(cnt) = 0}
}else{ :gmode 4,,,bl(cnt)
pos cx(cnt), cy(cnt) :celput 1,cn(cnt)
bl(cnt) = limit(bl(cnt)+ablend,0,255)} }
loop
if (bl(0) >= 128) {fg(1) = 1}
if (bl(1) >= 128) {fg(2) = 1}
return
|
|
2013/4/5(Fri) 21:12:49|NO.53460
回答ありがとうございます。
すみません、色々見てみましたが少しよくわかりませんでした。
もしかしたらfortunehillさんのスクリプトでできるのかもしれませんが
描画したい画像が15個などに増えても対応できるようにしたいです。
自分ではわからなかったので書き込みさせていただきました、すいません。
|
|
2013/4/6(Sat) 00:08:57|NO.53461
今まで提示されてきたサンプルはその時の質問の為に最適化した構成なので
そのまま新しい事に使うには難しい点が多いですし
このままでは一つのステップ毎に質問を追加していくばかりになるので
自力で問題を解決する為の基礎力と応用力を身につける為に
まずは配列変数を理解して15個以上のキャラクターを別々に動かす為には
どうすればいいのかを考えて自分でプログラムを作ってみてください。
(サンプルbasicフォルダのgrotate.hspが参考になりますがそのまま使ってはダメです)
それが出来れば後はキャラクターの状態を管理する為の配列変数を追加していく事で
目標を達成する事ができるようになるはずです。
|
|
2013/4/6(Sat) 07:52:33|NO.53467
>描画したい画像が15個などに増えても対応できるようにしたいです。
#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
//ここから
max=15
sposx=(640/max) //表示位置をウィンドウの幅と個数から算出
repeat max
cno(cnt) = cnt\3
cx(cnt) = sposx/2+cnt*sposx
cy(cnt) = 240
bl(cnt) = 0
flg(cnt) = 0
loop
//ここまで変更
bl(0) = 1
gsel 0, 1
repeat
redraw 0
gosub *Back
gosub *main
redraw 1
await
loop
*Back
color : boxf
return
*main
repeat max
if (bl(cnt) >= 255 and bl(cnt) < 300){
if bl(cnt)=255 {cy(cnt)+30} //
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
if (flg < max){ //
if bl(flg)/ablend = prop {
flg + 1
bl(flg) = 1
}
}
if (flg = max) : flg = 0 //
await 10
return
| |
|