|
|
2006/12/24(Sun) 18:19:49|NO.4378
みなさんはじめまして。
早速ですが質問したいと思います
今RPGをつくろうと思っていてサンプルスクリプトを勉強のため
いじっているのですが何度やってもキャラがちらつきます
*top
stick kk,15
ggx=gx:ggy=gy
if kk&1:dim po,20:gx--:po(0)=1
if kk&2:dim po,20:gy--:po(0)=3
if kk&4:dim po,20:gx++:po(0)=2
if kk&8:dim po,20:gy++:po(0)=0
if gx<4:gx=4
if gy<4:gy=4
if gx>27:gx=27
if gy>19:gy=19
pp=(mwide*gy)+gx
a =peek (map,pp)
po1=po1+1
if a='4':gx=ggx:gy=ggy
gosub *memap
await 100
goto *top
stop
;プレイヤーとマップ両方表示
*memap
redraw 2
mox=gx-4
moy=gy-4
gosub *allmap
gmode 2
mex=128:mey=128
if po1>4:po1=1
pos mex,mey
gcopy 2,po1*32,po(0)*48,32,48
redraw 1
return
;キャラクタ単位
*allmap
gmode 0
repeat 18
cty=cnt
i=(moy+cnt)*mwide+mox
repeat 18
code =peek (map,i)
i++
pb = code-'0'
pos cnt*32,cty*32
gcopy 1,pb*32,0,32,32
loop
loop
return
ご指摘お願いします
|
|
2006/12/24(Sun) 19:01:13|NO.4379
ぱっとスクリプトを見て、ちらつくような理由が解りませんでした。
そこで、適当にいじって動作させて見ましたが、やはり、ちらつくような感じはしません。
あくまで、私が、「こうなんだろうな」と思うように、コードを付け足した結果です。
とりあえず、動作するスクリプトにしてみて頂けませんか?
そちらで動作して、ちらついているスクリプトを見せていただけませんでしょうか。
|
|
2006/12/24(Sun) 20:09:51|NO.4381
redraw 2じゃなくて0にしてみて。
|
|
2006/12/24(Sun) 20:16:27|NO.4382
ちらつくスクリプトはこれです
;初期化
sdim map,4000:po1=0
;グラフィックの読み込み
buffer 1,,,0
picload "mapall.bmp"
buffer 2,,,0
picload "01.bmp"
;画面の切り替え
gsel 0
screen 0,288,288,0
mwide=32 ;マップの横サイズ
map= "4111111111111111111111111111111441111111111111111111111111111114"
map=map+"1111111222222222111111111111111111111112222222221111111111111111"
map=map+"1111112222222222221111111111111111111122222222222211111111111111"
map=map+"1111122222222222222111111111111111111122222222222211111111111111"
map=map+"2222222222222222222111111111111122222222222222222221111111111111"
map=map+"2222222222222222211111111111111122222222222222222221111111111111"
map=map+"2214444444444422221111111111111122144444444444222211111111111111"
map=map+"2224444444444422111111111111111122144444444444222211111111111111"
map=map+"2224444444444421111111111111111122144444444444222211111111111111"
map=map+"2222222222222211111111111111111122222222222222111111111111111111"
map=map+"1111111111111111111111111111121122222222222222111111111111111111"
map=map+"1112222222222221111111111112221122222222222222111111111111111111"
map=map+"2222244442222111111111111112222133333333333332222211111222222222"
map=map+"2222222222222111111111111122222233333333333332222211111222222222"
map=map+"3333333322222221111111112222222233333333333332222211111222222222"
map=map+"3333333333222221111111222222222233333333333332222211111222222222"
map=map+"3333333333322222111111222222222233333333333332222211111222222222"
map=map+"3333333333222222111112222222222233333333333332222211111222222222"
map=map+"3333333333222222111111222222222233333333333332222211111222222222"
map=map+"3333333333322222111111222222222233333333333332222211111222222222"
map=map+"3333333333332222211111122222222233333333333332222211111222222222"
map=map+"3333333333333222221111122222222233333333333332222211111222222222"
map=map+"3333333333333222221111122222222233333333333332222211111222222222"
map=map+"4333333333333222221111111222222443333333333332222211111112222224"
;game 座標でプレイヤーの位置 gx,gy
gx=12:gy=12
gosub *memap
*top
stick kk,15
ggx=gx:ggy=gy
if kk&1:dim po,20:gx--:po(0)=1
if kk&2:dim po,20:gy--:po(0)=3
if kk&4:dim po,20:gx++:po(0)=2
if kk&8:dim po,20:gy++:po(0)=0
if gx<4:gx=4
if gy<4:gy=4
if gx>27:gx=27
if gy>19:gy=19
pp=(mwide*gy)+gx
a =peek (map,pp)
if po1=4:po1=0
po1=po1+1
if a='4':gx=ggx:gy=ggy
gosub *memap
await 100
goto *top
stop
;プレイヤーとマップ両方表示
*memap
redraw 0
mox=gx-4
moy=gy-4
gosub *allmap
gmode 2
mex=128:mey=128
pos mex,mey
gcopy 2,po1*32,po(0)*48,32,48
redraw 1
return
;キャラクタ単位
*allmap
gmode 0
repeat 18
cty=cnt
i=(moy+cnt)*mwide+mox
repeat 18
code =peek (map,i)
i++
pb = code-'0'
pos cnt*32,cty*32
gcopy 1,pb*32,0,32,32
loop
loop
return
redraw 2じゃなくて0にしてもだめでした。
つかっている画像が悪いんでしょうか?
ご指摘お願いします
| |
|
2006/12/24(Sun) 20:34:54|NO.4383
なるほど。
とりあえずこちらに画像は無いので、最初のほうを
;グラフィックの読み込み
buffer 1,160,32,0
;picload "mapall.bmp"
color 0, 0, 0:boxf 0, 0, 31, 31
color 0, 0,255:boxf 32, 0, 63, 31
color 255, 0, 0:boxf 64, 0, 95, 31
color 255, 0,255:boxf 96, 0,127, 31
color 0,255, 0:boxf 128, 0,159, 31
buffer 2,128,192,0
;picload "01.bmp"
このようにしてみましたが、確かにちらついてるようですね。
多分、キャラクタを選ぶ番号の問題ではないかと思いますが。
gcopy 2,po1*32,po(0)*48,32,48
と
redraw 1
の間に、
pos 0,0
color 255,255,255
print "po1 :" + po1
print "po(0):" + po(o)
と入れてみると、
po1が1から4まで変化しているようですが、コレは意図どおりですか?
もしかして、0から3ではないですか?
|
|
2006/12/24(Sun) 20:42:03|NO.4384
すみません。
0〜3まででした。
解決しました。どうもありがとうございました。
|
|
2006/12/24(Sun) 20:46:00|NO.4385
もし、1から4で意図どおりなら(というか、プログラムはがっつりそうなってますが)
それならば、キャラクタを読み込んでいるであろうと思われる画像の横サイズが、1キャラ分足りないのだと思われます。
その証拠に、追加した
buffer 2,128,192,0
のところを、
buffer 2,128+32,192,0
にすればちらつきません。
今思えば、最初に気づけばよかったですね^^;
>トホホッティさん
自分も最初ソコ疑いましたw
念のためと思ってドキュメント読んでみたら、2でもいけそうだったので、
実験しちゃいましたよ^^;
でも作りなれてると0の感覚がありますよね^^;
いや、駄目だって言っているわけではないので。
|
|
2006/12/24(Sun) 20:48:35|NO.4386
あ、解決しましたか、失礼m(__)m
|
|