キラキラ星

1/fゆらぎを利用して星の瞬きを表現したいのですが、うまくいきません。
理由は、たくさんの星を描きたいので残像を利用しているのですが、うまく制御できていないからです。
この残像の位置を変えずに、星の光の強度を変化させたいのです。
何か良い方法があるでしょうか?
他の位置に星を描くスクリプトを書くことを試してみたのですが、
うまく表現できませんでした。
よろしくお願いします。


以前GRAPESフォーラムで発表した「ろうそくのゆらぎ」は、
残像を利用していなかったので、表現できたのですが。

[添付]: 7374 bytes

user.png 樫木秀樹 time.png 2015/03/28(Sat) 11:58 No.2113
Re: キラキラ星
以前GRAPESフォーラムで発表した「ろうそくのゆらぎ」です。

[添付]: 8110 bytes

user_com.png 樫木秀樹 time.png 2015/03/28(Sat) 12:01 No.2114
Re: キラキラ星
残像の色を後で変えることはできません。やっぱり残像ですから。

星の位置や星の明るさをテーブルに記録しておいて,使う方法はダメでしょうか。

点Pは残像を残す設定にして,
//星の位置のセット
SetArea(0,0,1,1)
for n := 1 to 最後の星の番号
Cells(n,1) := rnd(1) //x座標
Cells(n,2) := rnd(1) //y座標
Cells(n,3) := ??? //星固有の定数
Cells(n,4) := ??? //現在の明るさ
next

n番目の星について,現在の明るさとその星固有の定数から,次の明るさを決める関数を
f(Cells(n,3),Cells(N,4))
で求められるように,関数fを作っておきます。

//星を描く(1回分)
ClrAImgData
for n := 1 to 最後の星の番号
 P := (Cells(n,1), Cells(n,2))
 SetColor(P , f(Cells(n,3),Cells(N,4)))
Calc
next
redresh

ClrAamg ではなく ClrAImgData を使ってください。
ClrAimg はすぐにその場で残像データを消してその結果を描画するので,次の描画が終わるまでちらつきが出ます。ClrAImgData は残像データを消しますが,次のdraw(またはRefresh)が実行されるまで再描画しません。
同じ理由ですべての残像描画が終わるまで,drawを使わずにCalcを使ってください。
user_com.png ともだ time.png 2015/03/28(Sat) 14:03 No.2115
Re: キラキラ星
友田先生
早速に返信ありがとうございました。

アドバイスをいただいたように、テーブルを利用すると
うまく星を瞬かすことができました。ありがとうございました。

ところが、また新しい問題が発生しました。
背景を貼り付けたところ、「星を描く」というスクリプトボタンを押すと背景が消えてしまうのです。
そして、中断すると、また、背景が出てくるのです。
どのように対応すればよいのでしょうか?
よろしくお教えください。

[添付]: 120614 bytes

user_com.png 樫木秀樹 time.png 2015/03/28(Sat) 22:35 No.2118
Re: キラキラ星
使用した背景画像です。

2119

user_com.png 樫木秀樹 time.png 2015/03/28(Sat) 22:37 No.2119
処理 記事No 暗証キー

- JoyfulNote -