CoRサンプル集: CoRサンプル - 当たり判定
カーソルキー(↑↓→←)で動き回ることができます。
爺さんキャラにぶつかると爆発して消えます。
爺さんキャラにぶつかると爆発して消えます。
プレー:56
(人数:40)
クリア:0
評価: 10 (1回)
scene 'start' do
# シーン内で使う変数の定義
player_sprite = nil
baku = nil
my_sound = nil
my_music = nil
jiisan_layer = nil
# 画像や音楽などのロード
preload do
image 'pchara', id: 315474, frame_size: [32, 32]
image 'chara_jiisan', id: 316078, frame_size: [32, 32]
image 'bakuhatsu', id: 315475, frame_size: [96, 96], frame_pattern: 16
music 'main_music', id: 40
sound 'sound_bakuhatu_1', id: 43
end
# 画像などのロード後に実行される初期化処理
create do
# レイヤー追加
player_layer = add_layer
jiisan_layer = add_layer
# プレイヤーキャラの初期化
player_sprite = put_sprite 'chara' do
position 400, 400
frame_index 0
end
player_sprite.start_animation('up')
player_layer.add player_sprite
# プレイヤー以外のキャラクタの配置
10.times do |i|
jiisan_sprite = put_sprite 'chara_jiisan' do
position 100 + i * 48, 225
frame_index 0
end
jiisan_sprite.start_animation('down')
jiisan_layer.add jiisan_sprite
end
# 効果音の準備
my_sound = add_sound('sound_bakuhatu_1')
# 音楽の準備と再生開始
my_music = add_music('main_music')
my_music.play
end
update do
# プレイヤーと爺さん専用レイヤーの当たり判定の処理
collision(player_sprite, jiisan_layer) do
# 衝突したスプライトのペアを取得
# 取得できるスプライトの順番とcollisionメソッドに渡した引数の順番は対応付くことに注意
obj1, obj2 = collision_pair
# 爆発アニメーションの開始
baku = start_bakuhatsu(self, baku, obj2.position, my_sound)
# プレイヤーに当たるとキャラクタは消滅する
obj2.destroy
end
# カーソルキーをおした時の処理
# キャラクターがカーソルキーの方向に向いて、向いた方向に移動する
if keyboard.down?('LEFT')
pos = player_sprite.position
player_sprite.position pos[0] - 1, pos[1]
player_sprite.start_animation('left')
end
if keyboard.down?('DOWN')
pos = player_sprite.position
player_sprite.position pos[0], pos[1] + 1
player_sprite.start_animation('down')
end
if keyboard.down?('RIGHT')
pos = player_sprite.position
player_sprite.position pos[0] + 1, pos[1]
player_sprite.start_animation('right')
end
if keyboard.down?('UP')
pos = player_sprite.position
player_sprite.position pos[0], pos[1] -1
player_sprite.start_animation('up')
end
# 爆発アニメーションが終わったらスプライトを消去
# frame_indexを使って直接的に操作
if baku
if baku.frame_index >= 15
baku.destroy
baku = nil
else
baku.frame_index(baku.frame_index + 1)
end
end
end
render do
end
end
start_scene "start"
sprite 'chara' do
image 'pchara'
origin :center
animation 'up', [6, 7], 10, true
animation 'down', [0, 1], 10, true
animation 'left', [2, 3], 10, true
animation 'right', [4, 5], 10, true
end
sprite 'chara_jiisan' do
image 'chara_jiisan'
origin :center
animation 'up', [6, 7], 10, true
animation 'down', [0, 1], 10, true
animation 'left', [2, 3], 10, true
animation 'right', [4, 5], 10, true
end
sprite 'baku' do
image 'bakuhatsu'
origin :center
end
text 'basic-text' do
origin :center
font_size 65
color '#FF0088'
end
def start_bakuhatsu(scene, old_baku, pos, sound = nil)
if old_baku
old_baku.destroy
old_baku = nil
end
if sound
sound.play
end
result = scene.put_sprite 'baku' do
position pos[0], pos[1]
scale 2.0, 2.0
frame_index 0
end
return result
end
コード一覧
- start.rb
プレー内容を公開する
プレー履歴
プレー履歴はありません。
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア