|
|
2008/7/16(Wed) 18:02:28|NO.17324
私はまだHSPを始めたばっかりなのですが
無謀にもロープレのようなを作ろうと思いまして試してみたのですけど
よくロープレとかでキャラが動けば同じようにマップもうごくものがありますよね
それが作りたかったのですがどうにもうまくいかず・・・
お願いしますつくりかたを教えてください
(できればわかりやすく教えてください初心者なので・・・)
|
|
2008/7/16(Wed) 18:59:41|NO.17327
screen 0,300,300
oo=500
dim x,oo:dim y,oo
repeat oo ;壁(ブロック?)の位置
x.cnt=rnd(50)
y.cnt=rnd(35)
x.cnt=x.cnt*10
y.cnt=y.cnt*10
loop
px=0:py=0 ;playerの位置
*main
redraw 0
color :boxf
gosub *player
gosub *kabe
redraw 1
await 1
goto *main
*kabe
color 255,255,255
repeat oo
boxf x.cnt,y.cnt,x.cnt+10,y.cnt+10 ;壁表示
if x.cnt=px & y.cnt=py{ ;x.cnt(壁のX位置)= px(playerのX位置) & y.cnt(壁のY位置)= py(playerのY位置) だった場合
if ky=1 or ky=4:px+mx ;キーの右か左を押すとmxでpxの前の計算が元に戻る 例 px+=10 → px+mx(mx=-10) == 0
if ky=2 or ky=8:py+my
}
loop
return
*player
color 255,,255:boxf px,py,px+10,py+10 ;player表示
stick ky
if ky=1:px-10:mx=10 ;キーを押したときにmx、myであらかじめ正負逆の数を確保しときます。
if ky=4:px+10:mx=-10
if ky=2:py-10:my=10
if ky=8:py+10:my=-10
return
壁に入ってしまったときに、「壁の位置=playerの位置」になったら逆の計算をします。
こうすれば、playerの位置はプラスマイナスゼロになります。
僕が基本的に使用している方法NO.1です。
|
|
2008/7/16(Wed) 19:53:22|NO.17334
>>Quietさん
スクロールしていませんが…^^;
;サイズの設定
#const msizex 400 ;マップの横サイズ
#const msizey 400 ;マップの縦サイズ
#const wx 200 ;ウィンドウの横サイズ
#const wy 200 ;ウィンドウの縦サイズ
;当然ですが、マップ>ウィンドウのサイズにならないとスクロールが変になると思います。
;背景作成(実際はメインループの中でマップ情報を表示すればいいです。)
buffer 1,msizex,msizey : color 192,192,192
repeat (msizex/40)*(msizey/40)
boxf cnt\(msizex/40)*40,cnt/(msizex/40)*40,cnt\(msizex/40)*40+19,cnt/(msizex/40)*40+19
boxf cnt\(msizex/40)*40+20,cnt/(msizex/40)*40+20,cnt\(msizex/40)*40+39,cnt/(msizex/40)*40+39
loop
;ウィンドウサイズ調整
screen 0,wx,wy
;初期位置
x=msizex/2 : y=msizex/2
*main
redraw 0
;画像をコピーしてくるX座標Y座標
hx=x-wx/2 : hy=y-wy/2
;自分の位置(基本的に真中です)
mx=wx/2 : my=wy/2
;画面の端のほうに行った時の処理
if x<wx/2 : hx=0 : mx=x
if x>msizex-wx/2-1 : hx=msizex-wx : mx=wx-msizex+x
if y<wx/2 : hy=0 : my=y
if y>msizey-wy/2-1 : hy=msizey-wy : my=wy-msizey+y
;表示
pos 0,0 : gcopy 1,hx,hy,wx,wy
color 255,0,0 : boxf mx,my,mx+1,my+1
;移動
stick key,15
if key&1 : x-- : if x<0 : x=0
if key&2 : y-- : if y<0 : y=0
if key&4 : x++ : if x>=msizex-1 : x=msizex-2
if key&8 : y++ : if y>=msizey-1 : y=msizey-2
redraw 1
wait 1
goto *main
こんなんでどうでしょうか。
| |
|
2008/7/16(Wed) 20:46:25|NO.17336
あっやべっ!
YR7177さんの質問スレに投稿したつもりでしたが、間違えました。
申し訳ありませんでした。
wx=300:wy=300
screen 0,wx,wy
randomize
px=150:py=150
oo=100
dim x,oo:dim y,oo
dim xx,oo:dim yy,oo
repeat oo
x.cnt=rnd(30):y.cnt=rnd(30)
x.cnt=x.cnt*30:y.cnt=y.cnt*30
xx.cnt=x.cnt:yy.cnt=y.cnt
loop
w=2
*main
redraw 0
color :boxf
gosub *wool
gosub *player
color 255,255:pos 0,0:mes sx
redraw 1
await 1
goto *main
*player
color ,255,:boxf px-2,py-2,px+2,py+2
return
*wool
color 255,255,255
repeat oo
boxf x.cnt,y.cnt,x.cnt+30,y.cnt+30
stick ky,15
if ky&1:x.cnt+=w
if ky&4:x.cnt-=w
if ky&2:y.cnt+=w
if ky&8:y.cnt-=w
x.cnt=limit(x.cnt,xx.cnt-600,xx.cnt)
y.cnt=limit(y.cnt,yy.cnt-600,yy.cnt)
loop
return
お詫びに一つ(参考にもならないと思います・・・)。
|
|
2008/7/17(Thu) 18:04:56|NO.17349
ありがとうございます。参考になりました。
それで、もうひとつ教えてほしいことがあるのですけど
キャラのレベルなどをセーブして保存しておくにはどうしたらいいのでしょうか
教えてください。
|
|
2008/7/17(Thu) 20:10:16|NO.17353
peekとか使うといいんじゃないでしょうか。
sdimで確保した場所に突っ込んでいって、bsaveで保存が一番簡単かと。
読み込むときは逆にすればいいかと思います。
|
|
2008/7/19(Sat) 11:05:13|NO.17405
ありがとうございました。
何とかがんばってみます。
|
|