以前、この掲示板でお世話になりいただいたソースを使って自分のものにあてはめていたら
いくつかまだできないことがあり、低レベルかと思いますが質問させてください。
・歩くモーションはうまくいったが右に歩かせるとキャラが左にむいてしまう
・ブロックに穴をあけてキャラを落とすとエラーになる
(gotoあたりを使用してゲームオーバー画面にしようと考えているが入れ込む場所が分からない)
・ステージ画面内に新たに静止画を設置して当たり判定をつけてpos設定とgotoでしたいがまず画像がのらない
この三つです。
使っているソースは下記の通りです…。
文化祭で使いたいんですが自力だけでは間に合わなそうです。
ぜひ力を貸してください。
よろしくお願いします。
//マクロ
#const CHRA_MAX 234 //1ステージ内のキャラクター総数
#const CHIP 40 //基本チップサイズ
//キャラクター画像読み込み
buffer 3
picload "深緑ロンまとめ.gif"
//マップ用バッファ
buffer 2,680,480
//Map
dim map,17,13
map(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0,1)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,2)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,3)=1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
map(0,4)=1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1
map(0,5)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,6)=1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1
map(0,7)=1,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1
map(0,8)=1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1
map(0,9)=1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,10)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
map(0,11)=1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1
//マップ画像を生成
//Map 色・全体サイズ変更
color 187,187,187 //背景色
boxf
//Y軸
repeat 13
yy=cnt
//X軸
repeat 17
xx=cnt
if map(xx,yy)=1 : pos xx*CHIP,yy*CHIP : gcopy 3,120,0,CHIP,CHIP
loop
loop
screen 0,680,480
title "ロンニューの大冒険"
color 0,0,0
boxf
//キャラクター用設定
//要素数は本来必要な分だけ
dim char_x,CHRA_MAX //キャラクターのX座標
dim char_y,CHRA_MAX //キャラクターのY座標
dim char_sizez,CHRA_MAX //キャラクターの横幅
dim char_sizey,CHRA_MAX //キャラクターの縦幅
dim char_type,CHRA_MAX //キャラクターの種類 0=なし、1=プレイヤー、2=敵タイプA、3=敵タイプ3・・・等
dim char_act,CHRA_MAX //キャラクターの現在のアクション 0=待機、1=歩行、2=ジャンプ上昇、3=ジャンプ下降
dim char_cd,CHRA_MAX //キャラクターの現在の向き 0=右、1=左
dim char_ani,CHRA_MAX //キャラクターのアニメパターン
dim char_anicnt,CHRA_MAX //キャラクターのアニメカウンタ
//初期設定
char_type(0)=1 //0はプレイヤー用1
char_x(0)=CHIP*2 //キャラクターのX座標
char_y(0)=CHIP*6 //キャラクターのY座標
char_sizex(0)=10 //キャラクターの横幅
char_sizey(0)=15 //キャラクターの縦幅
//メインループ
*メイン
ax=0
//キー入力
stick sk,$5
if sk&4 : ax=3 : char_cd(0)=0 : if (skf=0)&(char_act(0)!=1) : char_act(0)=1 : char_ani(0)=0 : char_anicnt(0)=0
if sk&1 : ax=-3 : char_cd(0)=1 : if (skf=0)&(char_act(0)!=1) : char_act(0)=1 : char_ani(0)=0 : char_anicnt(0)=0
//ジャンプ
if (sk&2) : if skf=0 : ay=-14 : skf=1 : char_act(0)=2 : char_ani(0)=0 : char_anicnt(0)=0
if (skf=0)&(ax=0)&(char_act(0)!=0) : char_act(0)=0 : char_ani(0)=0 : char_anicnt(0)=0
//当たり判定
;縦
ay++;重力
char_y(0)+=ay;縦移動
leftX=(char_x(0)+haba)/CHIP : rightX=(char_x(0)+CHIP-haba)/CHIP
downY=(char_y(0)+CHIP)/CHIP : upY=(char_y(0)+CHIP-char_sizey(0))/CHIP
;title""+ay+" "+char_x(0)+" "+leftX+" "+z+" "+ map(leftX,downY)+" "+ map(rightX,downY)
z=map(leftX,downY)+map(rightX,downY) + map(leftX,upY)+map(rightX,upY)
if z>0 {
if ay>=0 {
char_y(0)=downY*CHIP-CHIP : ay=0
if skf!=0 : skf=0 : char_act(0)=0 : char_ani(0)=0 : char_anicnt(0)=0
} else {
char_y(0)=upY*CHIP+CHIP-char_sizey(0):ay=0
}
}
char_x(0)+=ax;横移動
haba=(CHIP-char_sizex(0))/2
;横
leftX=(char_x(0)+haba)/CHIP : rightX=(char_x(0)+CHIP-haba)/CHIP
downY=(char_y(0)+CHIP-1)/CHIP : upY=(char_y(0)+CHIP-char_sizey(0))/CHIP
z=map(leftX,downY)+map(rightX,downY) + map(leftX,upY)+map(rightX,upY)
if z>0 {
if ax>=0 {
char_x(0) = rightX*CHIP-CHIP+haba-1
} else {
char_x(0) = leftX*CHIP+CHIP-haba
}
}
gosub *描画
await 17
goto *メイン
*描画
redraw 0
//描画処理
//マップ
pos 0,0
gcopy 2,0,0,680,480
//自機
//キャラクター数だけループ
gmode 2
repeat CHRA_MAX
//キャラクタータイプが【0】の時は読み飛ばす
if char_type(cnt)=0 : continue
//プレイヤー
if char_type(cnt)=1 {
//キャラクターの現在のアクション 0=待機、1=歩行、2=ジャンプ
if char_act(cnt)=0 {
//待機
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=0 {
char_anicnt(cnt)=0
char_ani(cnt)++
if char_ani(cnt)>0 : char_ani(cnt)=0
}
}
if char_act(cnt)=1 {
//歩行
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=2 {
char_anicnt(cnt)=0
char_ani(cnt)++
if char_ani(cnt)>2 : char_ani(cnt)=0
}
}
if char_act(cnt)=2 {
//ジャンプ
//アニメ用
char_anicnt(cnt)++
if char_anicnt(cnt)=1 {
char_anicnt(cnt)=0
if char_ani(cnt)<1 : char_ani(cnt)++
}
}
//キャラクターの描画
pos char_x(cnt),char_y(cnt)
gcopy 3,(char_ani(cnt)*CHIP)+(char_cd(cnt)*160),(char_act(cnt)*CHIP),CHIP,CHIP
}
loop
redraw 1
return