HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1031
くろマップがループしてしまう17解決


くろ

リンク

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



この記事に返信する


k

リンク

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



Noap

リンク

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



Noap

リンク

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

ありがとうございます。



ONION software Copyright 1997-2021(c) All rights reserved.