|
2009/4/11(Sat) 18:38:08|NO.24563
質問が具体的じゃないのに具体的にとお願いしてしまって誠に申し訳ありませんでした。
質問を少し書き直すので、また、返答お願いします。
ゲームでキャラクターをpos命令で座標を指定して、gcopy命令で2,3ビットずつ動かすと、
うまく壁判定ができません。どうすればいいですか。
スクリプトを具体的に、できるだけ無駄を省いて教えてください。
今、使っているスクリプトを具体的に書くので宜しくお願いします。
ひとつの絵は五十ビットで表示しています
pre
ax=200:ay=200
buffer 0
picload "ステージ.bmp"
buffer 1
picload "主人公.bmp"
repeat 2
cty=cnt*50
repeat 3
sr=sr+1
if sr=2 : sr=0
color 200,0,200
pset 23+50*cnt,11+sr+cty
color 0,200,0
pset 27+50*cnt,11+sr+cty
loop
loop
screen 3,500,450
cls 4
gmode 2
repeat
a="9888888889"
a=a+"9777777779"
a=a+"9111561119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"9111111119"
a=a+"8888118888"
ctt=0
redraw 0
;絵を表示する
repeat 10
cty=cnt
repeat 10
pos cnt*50,cty*50
gcopy 0,50*strmid(a,ctt,1),0,50,50
ctt=ctt+1
loop
loop
;変数を初期化
sx=0
sy=0
axx=ax
ayy=ay
wax=0
Q=0
;キーを取得する
repeat 10
if wax&1 : sx=-4 : Q=1
if wax&2 : sy=-4 : Q=2
if wax&4 : sx=4 : Q=3
if wax&8 : sy=4 : Q=4
await 10
stick wax,15,1
loop
;動かしたときのキャラの座標
ax=ax+sx
ay=ay+sy
pos cnt*50,cty*50
;壁判定
if 1*strmid(a,ax/50+ay/50*10+1,1)>6 : ax=axx : ay=ayy
if 1*strmid(a,ax/50+ay/50*10-1,1)=0 : ax=axx : ay=ayy
if 1*strmid(a,ax/50+ay/50*10,1)=6 : ;未記入なので変えなくていいです
if (ax>500)or(ay>500) : ax=axx : ay=ayy
pos ax,ay-50
if Q=2 : ob=1
if Q=4 : ob=0
xcynmi=xcynmi+1
if xcynmi=2 : xcynmi=0
if wax=0 : xcynmi=1
gcopy 1,50*xcynmi+ob*150,0,50,50
redraw 1
loop
/pre
| |