|
 |
|
2015/10/31(Sat) 22:13:06|NO.72663
マップがループしてしまいます。
間違っている個所がどこか教えてください。
dim taiikukanmae1_migi,1
dim taiikukanmae1_ue,1
dim taiikukanmae2_sita,1
dim taiikukanmae2_ue,1
//-----------------------------------//
screen 6,40*5,40*5,screen_tool,,,40*5,40*5
boxf 80,0,119,39 : color 255,255,255 :boxf 81,1,118,38 : color
pos 80,0 : mes "自分"
celdiv 6,40,40
//-----------------------------------------------------------------//
screen 19,1280,720,screen_tool,,,1280,720
screen 17,1280,720,screen_tool,,,1280,720
screen 0,1280,720,,,,1280,720
//-------------------------------------//
taiikukanmae1_ue = 1
//-----------------------------------------------------------//
*taiikukanmae1
if taiikukanmae1_migi {MX=31*40 :MY=12*40 :MDX=0 :MDY=0 }
if taiikukanmae1_ue {MX=6*40 :MY=15*40 :MDX=0 :MDY=0 }
taiikukanmae1_migi = 0 : taiikukanmae1_ue = 0
gosub *taiikukanmae1_map :gosub *taiikukanmae1_hyouji
while ;体育館前1
redraw 0
gosub *ryuuyou2
gosub *taiikukanmae1_moveme
if taiikukanmae2_sita = 1 :goto *taiikukanmae2
//if watarirouka2_hidari = 1 :goto *watarirouka2
gosub *ryuuyou3
gosub *taiikukanmae1_background_character
redraw 1
title "体育館前1: MX="+MX+":MY="+MY+" MDX="+MDX+" MDY="+MDY
wait 7
wend
//------------------------------------------------------------------------//
*taiikukanmae1_map
dim MAP,32,18
//1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2
Map(0,0) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,3) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,4) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,5) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,6) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,7) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,8) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,9) =1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,10)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,11)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,12)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,13)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,14)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,15)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,16)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,17)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
//1(通行禁止),2(体育館前2),3(渡り廊下左),4(?),5(?),6(?),7(?),8(?),9(?)
return
//--------------------------------------------------------------------------------//
*taiikukanmae1_hyouji
gsel 19
title "体育館前1マップ"
color 255,255,255 :boxf
color
repeat 32
cnta = cnt
repeat 18
pos cnta*40,cnt*40
if map.cnta.cnt = 1 :mes "壁"
if map.cnta.cnt = 2 :mes "ステージ1"
if map.cnta.cnt = 3 :mes "ステージ2"
loop
loop
gsel 0
return
//---------------------------------------------------------------------------------//
*taiikukanmae1_moveme
MPX0=(MX+MDX)/40 :MPY0=(MY+MDY)/40 :MPX1=(MX+MDX+39)/40 :MPY1=(MY+MDY+39)/40 ;ピクセル座標→キャラクター座標へ
if MAP(MPX0,MPY0)=1 or MAP(MPX1,MPY0)=1 or MAP(MPX0,MPY1)=1 or MAP(MPX1,MPY1)=1 { //1を通をらせない
MDX=0 :MDY=0 }
;マップ切り替え
if MAP(MPX0,MPY0)=2 or MAP(MPX1,MPY1)=2 or MAP(MPX0,MPX1)=2 or MAP(MPY0,MPY1)=2{ //2に入ったら体育館前2へ
taiikukanmae2_sita = 1 }
if MAP(MPX0,MPY0)=3 or MAP(MPX1,MPY0)=3 or MAP(MPX0,MPY1)=3 or MAP(MPX1,MPY1)=3 { //4に入ったら渡り廊下右へ
watarirouka2_hidari = 1 }
return
//-----------------------------------------------------------------------------------------------------------------//
*taiikukanmae1_background_character
pos 0,0 : gcopy 19,0,0,1280,720 ;渡り廊下左
pos MX,MY :color :celput 6,2
return
//-----------------------------------------------------------------------------------------------------------------//
*taiikukanmae2
if taiikukanmae2_sita {MX=640 :MY=680 :MDX=0 :MDY=0 }
if taiikukanmae2_ue {MX=640 :MY=80 :MDX=0 :MDY=0 }
taiikukanmae2_sita = 0 :taiikukanmae2_ue = 0
gosub *taiikukanmae2_map :gosub *taiikukanmae2_hyouji
while
redraw 0
gosub *ryuuyou2
gosub *taiikukanmae2_moveme
if taiikukanmae1_ue = 1 :goto *taiikukanmae1
//if taiikukan1_sita = 1 :goto *taiikukan1
gosub *ryuuyou3
gosub *taiikukanmae2_background_character
redraw 1
title "体育館前2: MX="+MX+":MY="+MY+" MDX="+MDX+" MDY="+MDY
wait 7
wend
//------------------------------------------------------------------------//
*taiikukanmae2_map
dim MAP,32,18
//1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2
map(0,0) =1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1
map(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,3) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,4) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,5) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,6) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,7) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,8) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,9) =0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,10)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,11)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,12)=0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,13)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,14)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,15)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,16)=0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
map(0,17)=1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1
//1(通行禁止),2(体育館1),3(体育館前1),4(?),5(?),6(?),7(?),8(?),9(?)
return
//-----------------------------------------------------------------------------//
*taiikukanmae2_hyouji
gsel 17
title "体育館前1マップ"
color 255,255,255 :boxf
color
repeat 32
cnta = cnt
repeat 18
pos cnta*40,cnt*40
if map.cnta.cnt = 1 :mes "壁"
if map.cnta.cnt = 2 :mes "ステージ1"
if map.cnta.cnt = 3 :mes "ステージ2"
loop
loop
gsel 0
return
//--------------------------------------------------------------------------------//
*taiikukanmae2_moveme
MPX0=(MX+MDX)/40 :MPY0=(MY+MDY)/40 :MPX1=(MX+MDX+39)/40 :MPY1=(MY+MDY+39)/40 ;ピクセル座標→キャラクター座標へ
if MAP(MPX0,MPY0)=1 or MAP(MPX1,MPY0)=1 or MAP(MPX0,MPY1)=1 or MAP(MPX1,MPY1)=1 { //1を通をらせない
MDX=0 :MDY=0 }
;マップ切り替え
if MAP(MPX0,MPY0)=2 or MAP(MPX1,MPY1)=2 or MAP(MPX0,MPX1)=2 or MAP(MPY0,MPY1)=2{ //2に入ったら体育館前2へ
taiikukan1_sita = 1 }
if MAP(MPX0,MPY0)=3 or MAP(MPX1,MPY0)=3 or MAP(MPX0,MPY1)=3 or MAP(MPX1,MPY1)=3 { //4に入ったら渡り廊下右へ
taiikukanmae1_ue = 1 }
return
//------------------------------------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------------------------------//
*taiikukanmae2_background_character
pos 0,0 : gcopy 19,0,0,1280,720 ;渡り廊下左
pos MX,MY :color :celput 6,2
return
//--------------------------//移動時の塗りつぶしと強制停止//--------//
*ryuuyou2
color 255,255,255 : boxf
if MX\40 = 0 : MDX = 0
if MY\40 = 0 : MDY = 0
stick KY,15 ;カーソルキーをチェックして移動量を設定 移動ボタンの設定
if KY=1 :MDX=-10
if KY=4 :MDX=10
if KY=2 :MDY=-10
if KY=8 :MDY=10
return
//---------------------------//移動量の計算//----------------------------//
*ryuuyou3
MX=MX+MDX :MY=MY+MDY
if MX<0 : MX=0
if MX>1280 :MX=1279
if MY<0 : MY=0
if MY>720 : MY=719
return

| |
|
2015/10/31(Sat) 23:43:25|NO.72664
>間違っている個所がどこか教えてください。
私には間違っている箇所がわかりませんが
一から作り直したほうが簡単という意見があったので
私なりに作ってみました^^;
役に立つかはわからないですが・・・
map_no=0;最初のマップのマップナンバー
map_spawn=9;最初のマップ移動時の出現位置
buffer 1,512,512
picload dir_exe+"\\hsptv\\hsptv_img.bmp",1
gzoom 256,256,1,0,0,512,512
//------------ メインループ
repeat
if map_no=0 : gosub *taiikukanmae1_map;体育館前1に移動
if map_no=1 : gosub *taiikukanmae2_map;体育館前2に移動
if map_no=2 : gosub *taiikukan_map;体育館に移動
if map_no=3 : gosub *watarirouka_map;渡り廊下に移動
loop
//-------------体育館前1マップ処理-------------
*taiikukanmae1_map
dim map,20,15
//0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
map(0,0) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,1) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,2) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,3) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,4) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,5) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,6) =0,0,0,1,7,7,7,7,7,7,1,0,0,0,0,0,0,0,0,0
map(0,7) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,8) =1,1,1,1,0,0,9,0,0,0,1,1,1,1,1,1,1,1,1,1
map(0,9) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6
map(0,10)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6
map(0,11)=1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6
map(0,12)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6
map(0,13)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6
map(0,14)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
//1(通行禁止),8と9(出現場所),7(体育館前2),6(渡り廊下)
gosub *map_spawn_search//---------出現位置を探す
repeat
gosub *map_hyouji
if map_flg=6 : map_no=3 : map_spawn=9 : break;//渡り廊下に移動
if map_flg=7 : map_no=1 : map_spawn=8 : break;//体育館前2に移動
if map_flg=5 : dialog "こんにちは": MDX=0 :MDY=0
MX+=MDX :MY+=MDY
loop
return
//-------------体育館前2マップ処理------------
*taiikukanmae2_map
dim MAP,20,10
//0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
map(0,0) =0,0,0,2,7,7,7,7,7,7,2,0,0,0,0,0,0,0,0,0
map(0,1) =0,0,0,2,0,0,0,9,0,0,2,0,0,0,0,0,0,0,0,0
map(0,2) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,3) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,4) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,5) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,6) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,7) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,8) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,9) =0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,10)=0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,11)=0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,12)=0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
map(0,13)=0,0,0,1,0,0,0,8,0,0,1,0,0,0,0,0,0,0,0,0
map(0,14)=0,0,0,1,6,6,6,6,6,6,1,0,0,0,0,0,0,0,0,0
//1(通行禁止),8と9(出現位置),7(体育館),6(体育館前1)
gosub *map_spawn_search//---------出現位置を探す
repeat
gosub *map_hyouji
if map_flg=6 : map_no=0 : map_spawn=9 : break;//体育館前1に移動
if map_flg=7 : map_no=2 : map_spawn=9 : break;//体育館に移動
MX+=MDX :MY+=MDY
loop
return
//-------------体育館マップ処理--------------
*taiikukan_map
dim MAP,20,15
// 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
Map(0,0) =2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
map(0,1) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,2) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,3) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,4) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,5) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,6) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,7) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,8) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,9) =2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,10)=2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,11)=2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,12)=2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2
map(0,13)=2,3,3,3,3,3,3,3,3,9,3,3,3,3,3,3,3,3,3,2
map(0,14)=2,2,2,2,2,2,2,2,8,8,8,2,2,2,2,2,2,2,2,2
//1(通行禁止),9(出現位置),8(体育館前2)
gosub *map_spawn_search//---------出現位置を探す
repeat
gosub *map_hyouji
if map_flg=8 : map_no=1 : map_spawn=9 : break;//体育館前2に移動
MX+=MDX :MY+=MDY
loop
return
//-------------渡り廊下マップ処理--------------
*watarirouka_map
dim MAP,20,15
// 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9
Map(0,0) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,3) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,4) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,5) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,6) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,7) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,8) =1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,9) =8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,10)=8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,11)=8,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,1
map(0,12)=8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,13)=8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,14)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
//1(通行禁止),9(出現位置),8(体育館前1)
gosub *map_spawn_search//---------出現位置を探す
repeat
gosub *map_hyouji
if map_flg=8 : map_no=0 : map_spawn=8 : break;//体育館前1に移動
if map_flg=5 : dialog "こんばんは": MDX=0 :MDY=0
MX+=MDX :MY+=MDY
loop
return
//---------マップ出現位置を探す----
*map_spawn_search
repeat 20
cnta=cnt
repeat 15
if map.cnta.cnt==map_spawn : MX=cnta*32:MY=cnt*32
loop
loop
return
//---------マップ表示処理----
*map_hyouji
redraw 0
gsel 0
gmode 2
repeat 20
cnta=cnt
repeat 15
pos cnta*32,cnt*32
if map.cnta.cnt==1 : gcopy 1,4*32,5*32,32,32
if map.cnta.cnt==2 : gcopy 1,3*32,6*32,32,32
if map.cnta.cnt==3 : gcopy 1,5*32,7*32,32,32
if map.cnta.cnt!1 and map.cnta.cnt!2 and map.cnta.cnt!3: gcopy 1,3*32,2*32,32,32
if map.cnta.cnt==5 : gcopy 1,0*32,4*32,32,32
loop
loop
//---------------自分の表示----
pos MX,MY
gcopy 1,0,3*32,32,32
redraw 1
await 70
//---------------移動処理----
if MX\32==0 : MDX=0 : else : return
if MY\32==0 : MDY=0 : else : return
stick KY,15 ;カーソルキーをチェックして移動量を設定 移動ボタンの設定
if KY=1 :MDX=-8
if KY=4 :MDX=8
if KY=2 :MDY=-8
if KY=8 :MDY=8
map_flg=MAP((MX+MDX*4)/32,(MY+MDY*4)/32)
if map_flg==1 : MDX=0 :MDY=0;通行禁止なら動かない
if map_flg==2 : MDX=0 :MDY=0;通行禁止なら動かない
return

| |
|
2015/10/31(Sat) 23:49:02|NO.72665
スクリプトの最初に全角スペースが4つ、
83行目と158行目に全角スペースが4つあります。
全角スペースでも今のバージョンであれば動作に支障は起きませんが(3.4と3.5ベータ2で確認)、他の言語ではエラーになるなどするので使わないことをお勧めします。
(HSP3.4 ベータ4でこの仕様になったようです)
http://www.onionsoft.net/wp/archives/1129
スクリプトエディタのメニューバーのツールからオプションを開き、エディタ項目の中の表示項目にて、非文字の可視化で全角スペースなどを表示して見つけやすくできるのでその機能を使うといいかもしれません。
掲示板に投稿する際はpreタグ(小文字で)でスクリプトの前後を囲むとスペースやタブなどがそのままになるのでそのほうが見やすくいいと思います。
質問の答えとしては
93行目
if taiikukanmae2_sita {MX=640 :MY=680 :MDX=0 :MDY=0 }
を
if taiikukanmae2_sita {MX=640 :MY=640 :MDX=0 :MDY=0 }
にします(MYがそのままでは最初からマップ上の番号3に重なっていることになります。つまり入ってすぐ出ることになります。)
164行目
pos 0,0 : gcopy 19,0,0,1280,720
を
pos 0,0 : gcopy 17,0,0,1280,720
にします(体育館2に移動しても体育館1のマップを表示するようになっています。)
個人的には一から作り直すことをお勧めします。そのつもりなのであればごめんなさい。またちょうどこの回答を書いている間にkさんが書き直してくれたものを投稿してくれました。
わたしは初心者なのであまりあてにならない回答かもしれません。
|
|
2015/11/1(Sun) 00:07:41|NO.72666
考え方のサンプルとして。
実際はもうちっと考えないとエレガントじゃないよ。
// マップデータをセット
gosub *mapdata
mx=10: my=10 // 表示するマップの横縦パターン数
x=4: y=4 // プレイヤーの初期位置
stage=0 // 初期ステージ
// ループ
repeat
redraw 0
color 255,255,255: boxf
color 0,0,0
// マップ描画
for y1,0,my,1
for x1,0,mx,1
pos x1*16,y1*16: mes str(map(x1,y1,stage))
next
next
// 操作判定
bx=x: by=y
getkey k,37: if k { x-- }
getkey k,39: if k { x++ }
getkey k,38: if k { y-- }
getkey k,40: if k { y++ }
// マップデータを取得
if x=-1 | x>mx-1 | y=-1 | y>my-1 { p=map(bx,by,stage) } // マップ外
else { p=map(x,y,stage) }
// 壁を判定
if p=1 { x=bx: y=by }
// プレイヤー描画
pos x*16,y*16: mes "■"
// イベントを判定
if x!bx | y!by {
// マップ移動
if p=2 { y=9: stage=1 }
if p=3 { y=0: stage=0 }
if p=4 { x=0: stage=2 }
if p=5 { x=9: stage=1 }
// なんかあった
if p=9 { goto *gameover }
// 移動の場合は少しウエイト
wait 5
}
redraw 1
await 17-(cnt\3=0) // 60fps
loop
*gameover
color 255,0,0
pos 8,180: mes "しにました。おわり。"
redraw 1
stop
*mapdata
dim map,10,10,2
// stage 1
map(0,0,0)=1,1,1,1,2,2,1,1,1,1
map(0,1,0)=1,0,0,0,0,0,0,0,0,1
map(0,2,0)=1,0,0,0,0,0,0,0,0,1
map(0,3,0)=1,0,0,0,0,0,0,0,0,1
map(0,4,0)=1,0,0,0,0,0,0,0,0,1
map(0,5,0)=1,0,0,0,0,0,0,0,0,1
map(0,6,0)=1,0,0,0,0,0,0,0,0,1
map(0,7,0)=1,0,0,0,0,0,0,0,0,1
map(0,8,0)=1,0,0,0,0,0,0,0,0,1
map(0,9,0)=1,1,1,1,1,1,1,1,1,1
// stage 2
map(0,0,1)=1,1,1,1,1,1,1,1,1,1
map(0,1,1)=1,0,0,0,0,0,0,0,0,4
map(0,2,1)=1,0,0,0,0,0,0,0,0,4
map(0,3,1)=1,0,0,1,1,1,1,0,0,4
map(0,4,1)=1,0,0,1,0,0,1,0,0,1
map(0,5,1)=1,0,0,1,0,0,1,0,0,1
map(0,6,1)=1,0,0,1,1,0,1,0,0,1
map(0,7,1)=1,0,0,0,0,0,0,0,0,1
map(0,8,1)=1,0,0,0,0,0,0,0,0,1
map(0,9,1)=1,1,1,1,3,3,1,1,1,1
// stage 3
map(0,0,2)=1,1,1,1,1,1,1,1,1,1
map(0,1,2)=5,0,0,0,0,0,0,0,0,1
map(0,2,2)=5,0,0,0,0,0,0,0,0,1
map(0,3,2)=5,1,1,1,1,1,1,1,0,1
map(0,4,2)=1,1,0,0,0,0,9,1,0,1
map(0,5,2)=1,0,0,1,1,1,1,1,0,1
map(0,6,2)=1,0,1,0,0,0,1,0,0,1
map(0,7,2)=1,0,1,1,1,0,1,1,0,1
map(0,8,2)=1,0,0,0,0,0,0,0,0,1
map(0,9,2)=1,1,1,1,3,3,1,1,1,1
return

| |
|
2015/11/1(Sun) 00:15:57|NO.72667
わたしも窓月ららさんと同じく、前のスレッドでも投稿した通りなるべく共通化できるところは共通化したほうがいいと思います。
エレガントになるかは分かりませんが気が向くならばわたしも何か書こうと思います。
|
|
2015/11/1(Sun) 05:33:31|NO.72668
即席だけど、うちが書くならこうするという1つの例を。
まずマップデータはメインプログラムには書きません。
別にマップエディタを作って作成するか、以下のようにファイルに出力します。
そもそも1パターンに4バイトも消費するのが無駄です。
// マップデータ作成
dim map,10,10,2
// stage 1
map(0,0,0)=1,1,1,1,2,2,1,1,1,1
map(0,1,0)=1,0,0,0,0,0,0,0,0,1
map(0,2,0)=1,0,0,0,0,0,0,0,0,1
map(0,3,0)=1,0,0,0,0,0,0,0,0,1
map(0,4,0)=1,0,0,0,0,0,0,0,0,1
map(0,5,0)=1,0,0,0,0,0,0,0,0,1
map(0,6,0)=1,0,0,0,0,0,0,0,0,1
map(0,7,0)=1,0,0,0,0,0,0,0,0,1
map(0,8,0)=1,0,0,0,0,0,0,0,0,1
map(0,9,0)=1,1,1,1,1,1,1,1,1,1
// stage 2
map(0,0,1)=1,1,1,1,1,1,1,1,1,1
map(0,1,1)=1,0,0,0,0,0,0,0,0,4
map(0,2,1)=1,0,0,0,0,0,0,0,0,4
map(0,3,1)=1,0,0,1,1,1,1,0,0,4
map(0,4,1)=1,0,0,1,0,0,1,0,0,1
map(0,5,1)=1,0,0,1,0,0,1,0,0,1
map(0,6,1)=1,0,0,1,1,0,1,0,0,1
map(0,7,1)=1,0,0,0,0,0,0,0,0,1
map(0,8,1)=1,0,0,0,0,0,0,0,0,1
map(0,9,1)=1,1,1,1,3,3,1,1,1,1
// stage 3
map(0,0,2)=1,1,1,1,1,1,1,1,1,1
map(0,1,2)=5,0,0,0,0,0,0,0,0,1
map(0,2,2)=5,0,0,0,0,0,0,0,0,1
map(0,3,2)=5,1,1,1,1,1,1,1,0,1
map(0,4,2)=1,1,0,0,0,0,9,1,0,1
map(0,5,2)=1,0,0,1,1,1,1,1,0,1
map(0,6,2)=1,0,1,0,0,0,1,0,0,1
map(0,7,2)=1,0,1,1,1,0,1,1,0,1
map(0,8,2)=1,0,0,0,0,0,0,0,0,1
map(0,9,2)=1,1,1,1,3,3,1,1,1,1
// 上記のままでは1つのデータに4バイト(32bit)も消費して無駄なので
// 1バイト(0〜255)にします
// 必要なデータサイズを確保(上記データの1/4)
sdim mapdata,length(map)*length2(map)*length3(map)
// データを格納しなおす
i=0 // アドレス
repeat length3(map)
st=cnt
repeat length2(map)
y=cnt
repeat length(map)
poke mapdata,i,map(cnt,y,st)
i++
loop
loop
loop
// 完成したらファイルに保存する
bsave "mapdata.bin",mapdata
dialog "マップデータのファイルを作成しました。"
end

| |
|
2015/11/1(Sun) 05:34:28|NO.72669
そして、このファイル(mapdata.bin)をメインプログラムでロードします。
mx=10: my=10 // 表示するマップの横縦パターン数
maxst=3 // 最大ステージ数
x=4: y=4 // プレイヤーの初期位置
stage=0 // 初期ステージ
// マップデータを格納するメモリを確保
sdim map,mx*my*maxst
// マップデータをロード
bload "mapdata.bin",map
// ループ
repeat
redraw 0
color 255,255,255: boxf: color 0,0,0
// マップ描画
st=stage*(mx*my)
i=st
repeat my
y1=cnt
repeat mx
p=peek(map,i)
pos cnt*16,y1*16: mes p
i++
loop
loop
// 操作判定
bx=x: by=y
getkey k,37: if k { x-- }
getkey k,39: if k { x++ }
getkey k,38: if k { y-- }
getkey k,40: if k { y++ }
// マップデータを取得
if x=-1 | x=mx | y=-1 | y=my { p=peek(map,st+bx+by*my) } // マップ外
else { p=peek(map,st+x+y*my) }
// 壁を判定
if p=1 { x=bx: y=by }
// プレイヤー描画
pos x*16,y*16: mes "■"
// イベントを判定
if x!bx | y!by {
// マップ移動
if p=2 { y=9: stage=1 }
if p=3 { y=0: stage=0 }
if p=4 { x=0: stage=2 }
if p=5 { x=9: stage=1 }
// なんかあった
if p=9 { goto *gameover }
// 移動の場合は少しウエイト
wait 5
}
redraw 1
await 17-(cnt\3=0) // 60fps
loop
*gameover
color 255,0,0
pos 8,180: mes "しにました。おわり。"
redraw 1
stop
|
|
2015/11/1(Sun) 05:49:47|NO.72670
上記はマップ切替を簡易的に書くためにパターン番号で判定していますが
マップ切替も別にデータを作って判定したほうがスッキリします。
または、マップで判定せず「見えないオブジェクトに当ったら」でもOK。
ようするに、メインプログラムはある仕様のとおりに動くだけのものにして
必要なデータは別のプログラムで作成すればいいわけです。
こうすると、メインプログラムはコンパクトになるはず。
|
|
2015/11/1(Sun) 19:41:31|NO.72681
ありがとうございます。
窓月ららさんのmapdata.binを使わせてもらおうかと思っているのですが
拡張子がbinのものを作ってためしてみたのですが
作ったものを最初に投稿したもののにうまく入れたいのですがどのように
すればいいのでしょうか?
dim MAP,32,18,2
// 2階階段(0)
map(0,0,0) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,1,0) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,2,0) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,3,0) =1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,4,0) =3,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,5,0) =3,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,6,0) =3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1
map(0,7,0) =3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
map(0,8,0) =3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
map(0,9,0) =3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,10,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,11,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,12,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,13,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,14,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,15,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,16,0)=3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
map(0,17,0)=1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1
//1(通行禁止),2(ただの廊下),3(3階階段),4(1階階段),5(ただの廊),6(?),7(?),8(?),9(?)
// ただの廊下(1)
map(0,0,1) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,1,1) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,2,1) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,3,1) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,4,1) =1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,5,1) =1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,1,1,1,1,1,1,1,1
map(0,6,1) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,7,1) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,8,1) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,9,1) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,10,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,11,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,12,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,13,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,14,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,15,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,16,1)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,17,1)=5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
//1(通行禁止),2(渡り廊下右),3(2−1教室前),4(2階階段),5(下通行禁止),6(?),7(?),8(?),9(?)
// 渡り廊下右(2)
map(0,0,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,1,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,2,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,3,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,4,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
map(0,5,2) =1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,6,2) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,7,2) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,8,2) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,9,2) =2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,10,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,11,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,12,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,13,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,14,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,15,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,16,2)=2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
map(0,17,2)=4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
//1(通行禁止),2(渡り廊下左),3(ただの廊下),4(下通行禁止),5(?),6(?),7(?),8(?),9(?)
//--------------------------------------------------//
sdim mapdata1,length(map)*length2(map)*length3(map)
//-----------------------------------------------//
i = 0
repeat length3(map)
st = cnt
repeat length2(map)
y = cnt
repeat length (map)
poke mapdata1,i,map(cnt,y,st)
i++
loop
loop
loop
//--------------------------------------------------//
bsave "mapdata1 2階階段 ただの廊下 渡り廊下右.bin",mapdata1
dialog "マップデータ完成"
end

| |
|
2015/11/1(Sun) 21:47:13|NO.72684
エラーにはなりませんが、dim MAP,32,18,2 は dim MAP,32,18,3 の間違いですね。
データ読み出しの部分を書き換えるだけです。
例えば MAP(MPX0,MPY0) と書かれてる部分。(変数名は小文字に統一をおすすめします)
まず、このデータがどういう構造でファイル(変数に割り当てられたメモリ)に
格納されているかをイメージできている必要があります。
dim MAP,32,18,3 なのですから
(0,0,0)-(31,0,0) の32パターンの数値(32バイト)上から1番目のライン32個
(0,1,0)-(31,1,0) の32パターンの数値(32バイト)上から2番目のライン32個
(0,2,0)-(31,2,0) の32パターンの数値(32バイト)...
:
:
(0,0,0)-(31,0,1) の32パターンの数値(32バイト)...
と並んでいるわけです。(x,y,stage)
ファイルサイズは 1728バイトになっているはずです(元のデータは 6912バイト)。
このファイルを読み込むには以下のようにします。書き込みの逆をやるだけです。
画像に置き換えればマップ描画はできますよね。
マップ切替は stage を書き換えるだけです。
// 定数
#const MAPX 32 // 横パターン数
#const MAPY 18 // 縦パターン数
#const MAXS 3 // 最大ステージ数
stage=0 // 現在のステージ(0-2) 書き換えてみてください
// マップデータを格納するメモリを確保
sdim map,MAPX*MAPY*MAXS
// マップデータをロード
bload "mapdata1 2階階段 ただの廊下 渡り廊下右.bin",map
// ループ
repeat
redraw 0
color 255,255,255: boxf: color 0,0,0
// マップ描画
i=MAPX*MAPY*stage // 読み出し開始点
repeat MAPY
y1=cnt
repeat MAPX
p=peek(map,i)
pos cnt*16,y1*16: mes p
i++
loop
loop
redraw 1
await 17-(cnt\3=0)
loop
|
|
2015/11/1(Sun) 21:56:25|NO.72685
プレイヤー位置のデータを取得するには、こうします。
pを判定すればいいわけ。
// x,y プレイヤーの座標
i=MAPX*MAPY*stage // ステージデータの開始点
p=peek(map,i+x+y*MAPX) // プレイヤー位置のデータを取得
|
|
2015/11/1(Sun) 22:06:09|NO.72687
ありがとうございます。
画面サイズが1280、720
で隙間なく作りたいのですがどうすればいいのでしょうか?
|
|
2015/11/1(Sun) 22:25:15|NO.72690
まず画面サイズの前に、パターンのサイズをどうするかを考えます。
パターンサイズが確定すれば、計算で出せますよね?
例えばパターン画像が 32x32 だとします。
1280/32 = 40
720/32 = 22.5
つまり 横40 縦23 あれは画面いっぱいに埋められる計算になります。
でも、その解像度だと 64x64 とかでもいいかもしれませんね。
64x64 なら 横20 縦12
そして、pos cnt*16,y1*16: mes p ここを画像に置き換えます。
*16というのはパターン16x16の場合ですから、64x64の画像なら *64にすればいいわけ。
|
|
2015/11/1(Sun) 22:29:21|NO.72691
> if MAP(MPX0,MPY0)=1 or MAP(MPX1,MPY0)=1 or MAP(MPX0,MPY1)=1 or MAP(MPX1,MPY1)=1 { //1を通をらせない
ここの、MAP(MPX0,MPY0) を peek で読み出した値(変数)にするだけですよ。
現在のソースはとりあえずそのままにして、上から順に1つ1つ書き直しをおすすめします。
|
|
2015/11/1(Sun) 22:30:36|NO.72692
ありがとうございます。
1280,720なので両方とも40でいいのでしょうか?
それとすいませんが、あたり判定ではこれのようにMAP()=1のように指定したいのですができないでしょうか?
MPX0=(MX+MDX)/40 :MPY0=(MY+MDY)/40 :MPX1=(MX+MDX+39)/40 :MPY1=(MY+MDY+39)/40 ;ピクセル座標→キャラクター座標へ
if MAP(MPX0,MPY0)=1 or MAP(MPX1,MPY0)=1 or MAP(MPX0,MPY1)=1 or MAP(MPX1,MPY1)=1 { //1を通をらせない
MDX=0 :MDY=0 }
;マップ切り替え
if MAP(MPX0,MPY0)=2 or MAP(MPX1,MPY1)=2 or MAP(MPX0,MPX1)=2 or MAP(MPY0,MPY1)=2{ //2に入ったら体育館前2へ
taiikukanmae2_sita = 1 }
if MAP(MPX0,MPY0)=3 or MAP(MPX1,MPY0)=3 or MAP(MPX0,MPY1)=3 or MAP(MPX1,MPY1)=3 { //4に入ったら渡り廊下右へ
watarirouka2_hidari = 1 }
return
|
|
2015/11/1(Sun) 22:37:30|NO.72693
すいません。初心者なので言葉で言われてもわからないので
プログラムを書いていただけると嬉しいです。
すいませんが、お願いします。
|
|
2015/11/1(Sun) 23:13:10|NO.72695
40x40だと縦サイズが無駄になりませんか?
初心者にはこの方法は早すぎたかな。
ではとりあえず、1バイトに収めるという方法は忘れてください。
マップデータは
bsave "mapdata1 2階階段 ただの廊下 渡り廊下右.bin",map
と単純に配列を書き出すだけにして
dim map,32,18,3
bload "mapdata1 2階階段 ただの廊下 渡り廊下右.bin",map
というようにロードすれば、通常の配列と同じ方法でアクセスできますよ。
プログラムを書くとなると、私が全部書き直しになってしまいます。
それはさすがに自力でやってください。
ご自身でも原因がよく分からなくなっているように、
正直他人が見てもスパゲッティ状態で解析する気にならないわけです。
(書き直したほうが速いと思ってしまう)
いちど最初から仕様をよく考え直して、書き直してみることをオススメします。
きっと、最初のより良いものになるはず。(皆そうやってステップアップしてます)
|
|
2015/11/4(Wed) 07:10:39|NO.72774
ありがとうございます。
|
|