スクリプト/つくってみよう2-2
最終投稿者:rurun9
更新:2011年08月24日 22:03:11
【爆走少女らん】を作っています。
スクリプト/つくってみよう2-1 からのつづき。
チャプター1
ユーザー定義関数で各処理をつくっています。
anime()は女、犬、スイカの3キャラを表示し直す処理です。
女と犬は2パターンずつあるので、コレを交互に表示させるためRectで絵を切り替えます。
しかし、女は衝突中は強制的にダメージポーズにしたいので、フラグ変数hitで分岐させています。
スイカは1/16回転ずつ転がす為にs[3]=0~15から角度のラジアンを計算しています。
life()は赤いライフゲージを横方向に縮小させる処理です。
カラクリとしては、初期800から減った分だけ倍率が小さくなる、というだけですね。
bg()は見ての通り、スクロールする背景もスクリプトは物凄く簡単な事がわかると思います。
atari()の衝突判定の方は、単純に座標を比較しているだけです。
位置(x,y)が各スプライトのド真ん中なので、絵的に重なっている程度の範囲に調整します。
これを広くするか狭くするかで難易度が変わってくる事になります。
つづく⇒ スクリプト/つくってみよう2-3 爆走少女らんchap2
・スクリプト/つくってみよう0 基礎
・スクリプト/つくってみよう1 配列
・スクリプト/つくってみよう2-0 キー入力とスプライト
・スクリプト/つくってみよう2-1 爆走少女らんchap0
スクリプト/つくってみよう2-1 からのつづき。
チャプター1
def anime() #各キャラをアニメさせる処理
girl=0; inu=1; suika=2 #キャラ番号の指定
case gv("a") #2枚の絵を交互に表示させるためのアニメカウント
when 0 sv("a",1)
when 1 sv("a",0)
end
if gv("hit") #女、衝突中の場合
setSpriteRect(gv("h")[girl], 200,300,100,100, -100,-100,200,200)
elsif #衝突していなければ、アニメする
setSpriteRect(gv("h")[girl], gv("a")*100,300,100,100, -100,-100,200,200)
end
setSpriteRect(gv("h")[inu], gv("a")*40+300,300,40,40, -50,-50,100,100) #犬
n=1
while n<=2
gv("x")[n]=gv("x")[n]-gv("s")[n] #犬とスイカの x 位置を速さ s だけ左に進める
if gv("x")[n]<-100 #画面左端から消えたら、右に出直し&速さをランダムで再設定
gv("x")[n]=900; gv("s")[n]=rand(64)+8
if n==suika #スイカの場合は y 位置もランダム再設定
getVariable("y")[suika]=rand(350)+100
end
end
#位置(x,y)は100*100サイズのキャラのド真ん中の位置を表しているので
#スプライト左上角は(x-50,y-50)に置くべき
#これに加えて回転中心の座標ズレを修正するため、(x-50+50, y-50+50)に置くと丁度良くなる
setSpritePosition(gv("h")[n], gv("x")[n],gv("y")[n])
n=n+1
end
#スイカは1/16回転ずつ、反時計回りに回転させる。s[3]に何段階目かを入れている
gv("s")[3]=gv("s")[3]-1
if gv("s")[3]<-15
gv("s")[3]=0
end
setSpriteRotation(gv("h")[suika], gv("s")[3]*0.3925) #2*3.14/16=0.3925
end #anime()終
def life(n) #女が、犬またはスイカに衝突していたら、ライフの赤い棒を短くする処理
gv("s")[0]=gv("s")[0]-n #残りライフ値s[0]を減らす
if gv("s")[0]<0 #ライフが無くなったらゲームオーバー
goBadEnding()
end #スタート時の最大値800の時が800/800=1倍、つまり減った分だけ横幅が短くなる
setSpriteScale(gv("h")[6], gv("s")[0]/800,1)
end #life()終
def bg() #背景をスクロールさせる処理
#横3200のうち画面に見えている幅は800、それを少しずつ左にずらしていく
#素パーツの左端と右端の一画面分が全く同じ柄にしてあるので
#いちばん右端に到達したら左端に戻すだけ
gv("x")[3]=gv("x")[3]-4
if gv("x")[3]<-2400
gv("x")[3]=0
end
setSpritePosition(gv("h")[3], gv("x")[3],0) #空
gv("x")[4]=gv("x")[4]-8
if gv("x")[4]<-2400
gv("x")[4]=0
end
setSpritePosition(gv("h")[4], gv("x")[4],0) #家
end #bg()終
def atari() #犬とスイカの衝突判定の処理
girl=0; inu=1; suika=2 #キャラ番号の指定
sv("hit",false) #当たっていない状態
#表示上は 女200*200, 犬100*100,
#それぞれ位置(x,y)が「表示画像のド真ん中」になるように置いてある
if 300<=gv("y")[girl] #犬と衝突するのは、高さが地面y=350付近でのみ
if gv("x")[girl]-50<gv("x")[inu] && gv("x")[inu]<gv("x")[girl]+50
sv("hit",true); life(10) #当たった状態にして、ライフを削る
end
end
#スイカとの衝突は縦横位置両方でめり込んでるかどうか調べる
if gv("y")[girl]-80<gv("y")[suika] && gv("y")[suika]<gv("y")[girl]+80
if gv("x")[girl]-50<gv("x")[suika] && gv("x")[suika]<gv("x")[girl]+50
sv("hit",true); life(8)
end
end
end #atari()終
anime()は女、犬、スイカの3キャラを表示し直す処理です。
女と犬は2パターンずつあるので、コレを交互に表示させるためRectで絵を切り替えます。
しかし、女は衝突中は強制的にダメージポーズにしたいので、フラグ変数hitで分岐させています。
スイカは1/16回転ずつ転がす為にs[3]=0~15から角度のラジアンを計算しています。
life()は赤いライフゲージを横方向に縮小させる処理です。
カラクリとしては、初期800から減った分だけ倍率が小さくなる、というだけですね。
bg()は見ての通り、スクロールする背景もスクリプトは物凄く簡単な事がわかると思います。
atari()の衝突判定の方は、単純に座標を比較しているだけです。
位置(x,y)が各スプライトのド真ん中なので、絵的に重なっている程度の範囲に調整します。
これを広くするか狭くするかで難易度が変わってくる事になります。
つづく⇒ スクリプト/つくってみよう2-3 爆走少女らんchap2
・スクリプト/つくってみよう0 基礎
・スクリプト/つくってみよう1 配列
・スクリプト/つくってみよう2-0 キー入力とスプライト
・スクリプト/つくってみよう2-1 爆走少女らんchap0
このWikiの掲示板(すべて読む)
コメント一覧
ゲスト
