|
|
2009/12/13(Sun) 17:54:22|NO.29244
題名通り「一度に大量の★」を出したいのです。
randomize
repeat 100 //100回繰り返す
color 255,255,0 //黄色
pos rnd(640),rnd(480) //位置指定
mes "★" //★を表示
loop
ただ、表示するだけなら↑のスクリプトで十分なんですが、
今回は背景として使いたいのです。
randomize
repeat
color 255,255,255:boxf:color //上書き防止
〜〜〜〜〜〜〜
〜〜〜〜〜〜〜
repeat 100 //100回繰り返す
color 255,255,0 //黄色
pos rnd(640),rnd(480) //位置指定
mes "★" //★を表示
〜〜〜〜〜〜〜
〜〜〜〜〜〜〜
loop
↑だと、繰り返すたびに新しい場所に★が出ますよね??
ずっと同じ場所に★を出すにはどうしたらいいですか?
(いちいち、★の場所を100個も指定はしないですよねー。。。)
|
|
2009/12/13(Sun) 18:44:20|NO.29245
星の背景をバッファーに入れておいて、
使う度にコピーしなおすのではダメですか?
↓完全に遊んでます。
title "決定キーで進みます。"
buffer 3,640,480 ;メッセージボックス
buffer 2,640,480:boxf ;背景
repeat 100 //100回繰り返す
color 255,255,0 //黄色
pos rnd(640),rnd(480) //位置指定
mes "★" //★を表示
loop
gsel 0,0
s.0="【少年A】\nそんなバカなぁーーー!\nサンタクロースがいないなんて!"
s.1="【少年A】\nクリスマスのバカヤロー!"
s.2="【少年B】\n・・・"
*draw
redraw 0
gmode:pos 0,0:color
gcopy 2,0,0,640,480 ;背景
gmode 3,,,128:pos 10,320
gcopy 3,0,0,620,150 ;メッセージ
pos 20,330
font "",32,16
mes s.i
redraw 1
;キー入力チェック(左クリック)
repeat
getkey key,1
if key=1:break
wait 12
color 128*(cnt\2),128*(cnt\2),128*(cnt\2)
pos 600,440
mes "▽"
loop
;キーを離したかチェック(押しっぱなし回避)
;stickでも良かった気もしますが、まぁいいか。
repeat
getkey key,1
if key=0:break
wait 12
loop
i++
if i>2:end ;終了
goto *draw
|
|
2009/12/13(Sun) 21:27:25|NO.29246
「d3m」というモジュールを使ったプログラムです。
カメラ移動するたびに3Dの背景の★が移動するようにしたいです。
分かりにくいところがあったら言って下さい。
|
|
2009/12/13(Sun) 21:34:25|NO.29247
わかりにくいところ
上の質問が解決しているかどうかわからないのに、
同じスレで2度も質問していること。
|
|
2009/12/13(Sun) 21:41:03|NO.29248
プログラムでの「乱数」の仕組みを理解するとよいかと。
randomize命令は、乱数表の初期化をする命令です。
rnd関数はその乱数表から数字を取り出しています。
randomize命令では指定された数値を元に乱数表を作成するので、同じ数値が使用されればまったく同じ乱数表が作成されます。
したがってrnd関数で取得できる値もまったく同じになります。
randomize命令にパラメータを設定しない場合、現在時刻を利用した数字が使用されてしまいます。
そのためいつも異なる結果が表示されることになります。
dc = 10
font "",32
*main
redraw 1 : await 16 : redraw 0 : color : boxf : color 255, 255, 255 : pos 0,0
c += dc
if c>255 : dc = -10
if c<0 : dc = 10
c = limit(c,0,255)
randomize 0
color c,c,0
repeat 100 //100回繰り返す
pos rnd(640),rnd(480) //位置指定
mes "★" //★を表示
loop
;メッセージ表示
color 255,255,255
gmode 4,,,127
x = 10,630, 630, 10
y = 280,280, 470, 470
gsquare -1,x,y
pos x(0)+20, y(0)+20
color
mes "【少年B】\n大丈夫!\n信じていれば…いや、無垢な瞳で信じている\nふりをしていれば! "
goto *main
|
|
2009/12/13(Sun) 21:48:21|NO.29249
すいません><
違うスレでわかりやすくします。
inoviaさんの方法も試しましたが駄目でした><
|
|
2009/12/13(Sun) 22:16:16|NO.29252
こういうことですか? ・・・
ESCで終了
#include "user32.as"
buffer 1,640,480
color 0,0,0
boxf 0,0,640,480
color 255,255,255
repeat 100
pos rnd(640),rnd(480)
mes "★"
loop
screen 0,640,480
gmode 0
pos 0,0
gcopy 1,0,0,640,480
ShowCursor 0
x = 0
y = 0
repeat
wait 1
redraw 0
getkey key_Esc,27
if key_Esc != 0:end
v_mousex = mousex-317
v_mousey = mousey-211
mouse ginfo(4)+320,ginfo(5)+240
color 0,0,0
pos 0,0
boxf
x += v_mousex
y += v_mousey
pos x,y
gcopy 1,0,0,640,480
pos x-640,y-480
gcopy 1,0,0,640,480
pos x-640,y
gcopy 1,0,0,640,480
pos x,y-480
gcopy 1,0,0,640,480
redraw 1
loop
|
|
2009/12/14(Mon) 01:26:14|NO.29256
一旦乱数で算出した座標を配列変数に保存してしまう方法とかはどうでしょう
#define LoopCnt 100 //ループ回数
dim starx,LoopCnt
dim stary,LoopCnt
randomize
repeat LoopCnt //100回繰り返す
starx(cnt) = rnd(640)
stary(cnt) = rnd(480)
loop
*main
redraw 0
color 255,255,255:boxf // 画面を白で塗りつぶし
repeat LoopCnt
color 255,255,0 //黄色
pos starx(cnt),stary(cnt)//位置指定
mes "★" //★を表示
loop
await 20
redraw 1
goto*main
|
|