| 
 | 
 
 
 
 
 |  | 
2006/12/24(Sun) 18:19:49|NO.4378 
みなさんはじめまして。 
早速ですが質問したいと思います 
今RPGをつくろうと思っていてサンプルスクリプトを勉強のため 
いじっているのですが何度やってもキャラがちらつきます
 *topstick 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
 | 
 
 
 |