CoRサンプル集: 玉乗りピエロ
プレー:224
(人数:93)
クリア:60
評価: 36 (4回)
scene 'start' do
#=====変数の宣言=====
#ここで変数を設定しておかないと
#同じシーンでもupdateとかrenderとかの
#ブロック間で共有されないっぽい
player_layer = nil
ground_layer = nil
jama_layer = nil
exit_layer = nil
score_layer = nil
player_sprite = nil
ground_sprite = nil
jama_sprite = nil
exit_sprite = nil
score_sprite = nil
my_music = nil
se_jump = nil
se_lion = nil
se_ending= nil
score = 0
count = 1
count_jama = 0
#障害物をいれる入れる配列の設定
#配列にせず変数1こだけでやっていたら
#新しいスプライトを作ったタイミングで
#古い方のあたり判定がなくなっていた(絵は消えなかった)
#配列を作って順番に使い回すことにした
jama =[nil,nil,nil,nil,nil]
preload do
image 'chara_00' , id: 323415, frame_size: [128, 128], frame_pattern: 4
#今回,ピエロの1枚絵は128x128を4つ横に並べている
image 'ground_00' , id: 323427, frame_size: [128, 128]
image 'jama_00' , id: 323424, frame_size: [128, 128]
image 'exit_00' , id: 250109, frame_size: [32, 32]
music 'main_music', id: 189465
sound 'jump' , id: 166489
sound 'lion' , id: 222157
sound 'ending' , id: 221449
end
create do
# レイヤーの初期化
ground_layer = add_layer
jama_layer = add_layer
exit_layer = add_layer
player_layer = add_layer
score_layer = add_layer
#====プレイヤーキャラに関する設定====
# プレイヤーキャラの初期化
player_sprite = put_sprite 'chara' do
position 100, 250
frame_index 0
end
player_layer.add player_sprite
#あたり判定の範囲を調節
#player_sprite.collision_size(100,128)
player_sprite.collision_circle(54,0,6)
#プレイヤーのアニメーションを開始する
#アニメーションの設定は下の方でやっている
player_sprite.start_animation('walk')
# プレイヤーのスプライトに重力加速度を与える
# ジャンプした際に自然な放物線になってくれると思う
player_sprite.gravity(0,35)
#====地面に関する設定====
# 地面のスプライトの初期化
# 今回のゲームではボールに相当
ground_sprite = put_sprite 'ground' do
position 100,378
end
ground_layer.add ground_sprite
# 円形のあたり判定を使っている
# ピエロのあたりの大きさを調整した分と
# 辻褄を合わせ合わせるためにやや大きくしている
ground_sprite.collision_circle 68
# 地面のスプライトが動かないように設定する
ground_sprite.movable false
#====画面外に出た障害物を消すためのスプライト====
# 画面外にスプライトを設置しておいて
# 障害物がぶつかったらぶつかった障害物を消している
# スプライトの初期化
exit_sprite = put_sprite 'exit' do
position -1000,280
end
exit_layer.add exit_sprite
# スプライトが動かないように設定する
exit_sprite.movable false
#====スコア表示の準備====
score_sprite = put_text 'score_00' do
position 50,50
text ''
end
# 音楽の準備と再生開始
my_music = add_music('main_music')
my_music.play
# 効果音の準備
se_jump = add_sound('jump')
se_lion = add_sound('lion')
se_ending = add_sound('ending')
end
update do
debug_log "Mouse: #{pointer.x}, #{pointer.y}"
# クリックもしくはタップされたかどうかを取得
# 空中でジャンプできないように、ボールに接しているかどうかを先に調べている
collision(player_sprite, ground_layer)do
if pointer.down?
# 効果音の再生
se_jump.play
# スプライトに上向きの速度を与える
player_sprite.velocity(0,-13)
end
end
# 60回ループするごとに3/4の確率で
# 障害物を出現させるようにしている
if count%60==0 && rand(4) != 0
#ループの回数を数える変数が大きくなりすぎない様
#リセットしている
#スコアはしゃーない
count = 0
#ライオンを入れる配列変数を
#1-2-3-4-5-1と順番に使う様にしている
#ややめんどくさい
count_jama = (count_jama + 1 ) % 5
a=count_jama
jama[a] = put_sprite 'jama' do
# いきなり画面内に現れると不自然なので画面外に置いている
# ライオン同士の間隔が多少ばらつく様にしている
# あまり意味はない
position 700 + (3-rand(5))*35,282
frame_index 0
end
jama_layer.add jama[a]
jama[a].collision_size(95,35,-15,5)
jama[a].velocity(-7,0)
se_lion.play
end
# 画面外に出た障害物を消している部分
collision(exit_sprite, jama_layer)do
obj1, obj2 = collision_pair
obj2.destroy
end
# プレイヤーと障害物の衝突
collision(player_sprite, jama_layer)do
obj1, obj2 = collision_pair
#collision_pairに対して速度とか
#入れれるかと思ったけどそうでもない
#別々に設定する必要があった
obj1.gravity(0,0)
obj1.velocity(-7,0)
obj2.velocity(-7,0)
wait_time(2000)
se_ending.play
wait_time(3000)
# アクティビティフィードを流す
result = send_activity_feed("SCORE:#{score}");
# 結果をデバッグログに出力する
# 公開したゲームでは見えません
debug_log(result ? "フィードを流した" : "フィードを流さなかった")
game_clear
#ending(score)
end
# スコアの加算を行っている部分
score += 10
# ループの回数を数えている部分
count += 1
end
render do
#調整用にあたりの範囲を表示
#player_sprite.show_debug_body
#jama_sprite.show_debug_body
#ground_sprite.show_debug_body
#exit_sprite.show_debug_body
# ボールを回転させている
ground_sprite.angle (ground_sprite.angle + 2)%360
# スコアの表示
score_sprite.text("SCORE:#{score}")
end
end
#def ending(score)
#end
start_scene "start"
sprite 'chara' do
image 'chara_00'
origin :center
animation 'walk',[0,1,2,3,2,1], 10, true
end
sprite 'ground' do
image 'ground_00'
end
sprite 'jama' do
image 'jama_00'
origin :center
end
sprite 'exit' do
image 'exit_00'
end
text 'score_00' do
origin :left_top
font_size 20
color "#FFFFFF"
end
コード一覧
- start.rb
プレー内容を公開する
流されてゆきました!
悲鳴が妙にリアルでいいですね!
いい素材をお借りできたので
事前に考えていたより良くなりました