|
|
2012/3/11(Sun) 18:16:39|NO.45364
#deffunc spl int p1, int p2, int p3
circle p1-p3,p2-p3,p1+p3,p2+p3,1
repeat p3*p3*p3
sx=rnd (p1+p3*2+p3)
sx=sx-(p1+p3)
sy=rnd (p2+p3*2+p3)
sy=sy-(p2+p3)
color 255,255,255:pset sx,sy
loop
return
調べてもでなくて自力で必死で作ったらこんなのになってしまいました。
命令だけ見るとあっているのに実行してみると重くてまともに動かない…
前回も線のことを教えてもらいましたがこちらもわかりません。
初心者ですみませんが何か方法はありますでしょうか?お願いします!
|
|
2012/3/11(Sun) 19:08:20|NO.45366
重くなるのはループ内にウェイト命令を入れることで直るはずです。
#deffunc spl int p1, int p2, int p3
circle p1-p3,p2-p3,p1+p3,p2+p3,1
repeat p3*p3*p3
sx=rnd (p1+p3*2+p3)
sx=sx-(p1+p3)
sy=rnd (p2+p3*2+p3)
sy=sy-(p2+p3)
color 255,255,255:pset sx,sy
wait 1 ;ここを追加 (await 1でも可)
loop
return
|
|
2012/3/11(Sun) 19:13:25|NO.45367
redraw 命令は使ってますか?
使っていないとかなり遅くなります。
|
|
2012/3/11(Sun) 20:08:55|NO.45368
スプレーのサンプルを簡単に作るつもりが無駄なところが多くなってしまいました。
役に立てたらいいですけど・・・
T1="色選択画面" :T2="描画画面" ;タイトルを設定
#uselib "user32.dll"
#func SetParent "SetParent" int,int
#cfunc GetForegroundWindow "GetForegroundWindow"
#cfunc GetWindowTextLength "GetWindowTextLengthA" int
#func GetWindowText "GetWindowTextA" int, var, int
onexit gosub *exit ;終了されたとき
screen 0,500,500,2 : hwnd0 = hwnd :title ""+T1
screen 1,400,400,4 : hwnd3 = hwnd :title ""+T2
SetParent hwnd1, hwnd0
SetParent hwnd3, hwnd0
randomize
gsel 0,1 :objsize 100,25
button gosub"色選択",*RGB
gsel 1,1
repeat
hAct = GetForegroundWindow() ;4ここからアクティブなウィンドウを調べる
len = GetWindowTextLength(hAct)
sdim buf,len+1
GetWindowText hAct, buf, len + 1
if buf=""+T2 { ;描画画面がアクティブなときは描画する
getkey key,1 ;クリックされたとき
if key=1 {
repeat 10 ;ここの数が多いほどスプレーの量は多くなる
pset mousex-rnd(10)+10,mousey-rnd(10)+10 ;点をマウス付近(rndで半径10くらいまで)に適当に描画
loop
}
}
await 1
loop
*RGB
dialog "",33,"" ;色選択ダイアログ
if stat=0 :return ;キャンセルされたら戻る
color ginfo(16),ginfo(17),ginfo(18) ;色を設定
return
*exit ;終了割り込み
if wparam=0 :end ;親ウィンドウが終了されようとすると終了
gsel wparam,-1 ;それ以外のウィンドウは非表示
return
| |
|
2012/3/11(Sun) 21:28:51|NO.45370
みなさん回答ありがとうございます。
>>@UNさん
それでもダメでした。
>>catsさん
ありがとうございます!ちゃんと動きました!
それに色選択ウィンドウの命令も勉強になりました。(今までは入力して色を決めてました)
|
|
2012/3/11(Sun) 21:44:52|NO.45371
>命令だけ見るとあっているのに実行してみると重くてまともに動かない…
p3(半径の場合)の範囲内だけランダムにするならp3-rnd(p3*2)にして中心座標を足せばいいだけ
でもrnd(p3*2)だと30を指定したら30-(0〜59)になって
結果は-29〜30にしかならないので、p3-rnd(p3*2+1)にする
p3は直径にしてるけど↓
#module
#deffunc spl int p1, int p2, double p3, int p4
s=p3/2
repeat p4
sx=s-rnd(p3+1)
sy=s-rnd(p3+1)
if sqrt(sx*sx+sy*sy)<(s+0.5){//指定された円の中のみ描画
pset sx+p1,sy+p2
}else{
continue
}
loop
return
#global
repeat
redraw 0
stick stk,$fff
if stk&256{
color 255
//spl 中心x、中心x、円の直径、一度に噴射する点の数
spl mousex,mousey,15,20
}
redraw 1
await 15
loop
|
|
2012/3/11(Sun) 21:58:59|NO.45373
>>暇人さん
ありがとうございます!
丸なのでいかにもスプレーに近いですね。
点の数が大きさによって変えないといけないのですが、それは自分でやっておきます。
|
|
2012/3/11(Sun) 22:34:28|NO.45374
>点の数が大きさによって変えないといけないのですが、それは自分でやっておきます。
マクロを使って使用時には点の数を意識しないで使えるようにする方法もある
NO.45371のモジュールを使用
#define global spl2(%1,%2,%3,%4=0) spl (%1),(%2),(%3),1.5*(%3)*((%4)=0)+%4
repeat
redraw 0
stick stk,$fff
if stk&256{
color 255
//spl 中心x、中心x、円の直径、0か省略すると直径の1.5倍の数を噴射
spl2 mousex,mousey,100
}
redraw 1
await 15
loop
|
|
2012/3/12(Mon) 19:59:38|NO.45390
>>暇人さん
また教えてくださってありがとうございます!
これを活用して続きを作らせていただきます!
|
|