CoRサンプル集: ハンバーガーセッティング(CoR_重力と当たり判定のテスト)
Gキーで 重力を与える
Bキーで 重力+跳ね返り係数を与える
Vキーで 下方向へ速度を与える
Rキーで ハンバーガーリセット&具のランダムセット
Dキーで デバック表示のオンオフ
当たり判定とか物理シミュレーションとかのテストで作りました
当たり判定のあるお皿に乗らなかったり、
重力で潰れてうまく重ならなかったり、
動き出した後にカーソルを動かすと、
当たり判定がなくなってしまったり、
繰り返しているとフリーズしてしまったり、
いろいろうまくいってません
コード
Bキーで 重力+跳ね返り係数を与える
Vキーで 下方向へ速度を与える
Rキーで ハンバーガーリセット&具のランダムセット
Dキーで デバック表示のオンオフ
当たり判定とか物理シミュレーションとかのテストで作りました
当たり判定のあるお皿に乗らなかったり、
重力で潰れてうまく重ならなかったり、
動き出した後にカーソルを動かすと、
当たり判定がなくなってしまったり、
繰り返しているとフリーズしてしまったり、
いろいろうまくいってません
コード
プレー:171
(人数:43)
クリア:0
評価: 16 (2回)
≪カッテージ
|
Black Market≫
scene 'start' do
#カーソルスプライト用
cursor_sprite=nil
cursor_layer=nil
#お皿のスプライト用
dish_sprite=nil
#ハンバーガーのスプライト用
burger_sprite=[nil,nil,nil,nil,nil,nil,nil]
#ハンバーガーの具の種類の情報を配列で管理
burger_goods=[3,13,17,19,9,11,14,1]
#ハンバーガーのスプライトのレイヤー
burger_layer=nil
#ボタンスプライト用
button=[nil,nil,nil,nil,nil,nil]
#デバッグ用フラグ
debug=0
preload do
image 'cursor_img', id: 319022 #カーソル
image 'goods0', id: 319926 #お皿
image 'goods1', id: 319806 #ここから下はバンズや具やソースの画像
image 'goods2', id: 319807
image 'goods3', id: 319808
image 'goods4', id: 319809
image 'goods5', id: 319810
image 'goods6', id: 319811
image 'goods7', id: 319812
image 'goods8', id: 319813
image 'goods9', id: 319814
image 'goods10', id: 319816
image 'goods11', id: 319817
image 'goods12', id: 319818
image 'goods13', id: 319819
image 'goods14', id: 319820
image 'goods15', id: 319821
image 'goods16', id: 319822
image 'goods17', id: 319823
image 'goods18', id: 319824
image 'goods19', id: 319825
image 'goods20', id: 319826
image 'goods21', id: 319827
image 'goods22', id: 319828
image 'b_g_img', id: 319944 #ここから下はボタン画像
image 'b_b_img', id: 319945
image 'b_v_img', id: 319946
image 'b_r_img', id: 319947
image 'b_on_img', id: 319948
image 'b_off_img', id: 319949
image 'b_ok_img', id: 319916
end
create do
#皿を配置
dish_sprite = put_sprite 'dish' do
position 400, 800
frame_index 0
end
# 当たり判定の大きさを設定する
dish_sprite.collision_size(400, 90)
# 端で跳ね返るようにする
dish_sprite.collide_world!
dish_sprite.bounce(1.0, 1.0)
dish_sprite.movable false #お皿は動かないようにする
#バーガーを配置
burger_layer=add_layer #バーガーのレイヤーを作る
#ハンバーガーのバンズや具の情報を渡してスプライトを作る
i=0
while i < 9
if burger_goods[i] #具がセットされている時スプライトを作る
burger_sprite[i]= put_burger(self,400,400-i*60+50,burger_goods[i])
burger_layer.add burger_sprite[i]
burger_sprite[i].layer_index i
end
i=i+1
end
#ボタンのスプライトを作る
button[0] = put_sprite 'b_g' do
position 60, 50
frame_index 0
end
button[1] = put_sprite 'b_b' do
position 60, 110
frame_index 0
end
button[2] = put_sprite 'b_v' do
position 60, 170
frame_index 0
end
button[3] = put_sprite 'b_r' do
position 60, 230
frame_index 0
end
button[4] = put_sprite 'b_on' do
position 60, 290
frame_index 0
end
#カーソルを配置
cursor_sprite = put_sprite 'cursor' do
position 50, 0
frame_index 0
end
cursor_sprite.start_motion('normal')
cursor_sprite.angle 90
cursor_sprite.collide_world!
cursor_layer = add_layer
cursor_layer.add cursor_sprite
end #create do
update do
# カーソルの速度を(x, y)=(0, 0)にする
cursor_sprite.velocity 0, 0
pos = cursor_sprite.position #カーソルの位置情報を取得する
# カーソルが移動する処理
if keyboard.down?('LEFT')
#左右に動くモーションを設定しているため、スプライトを作り直さないと左右に動けない
cursor_sprite.destroy
cursor_sprite = put_sprite 'cursor' do
position pos[0]-100, pos[1]
frame_index 0
end
cursor_sprite.start_motion('normal')
cursor_sprite.angle 90
cursor_sprite.collide_world!
cursor_layer = add_layer
cursor_layer.add cursor_sprite
wait_time(300) #長押しを防ぐためのwaitTime
cursor_sprite.position pos[0]-100, pos[1]
end
if keyboard.down?('DOWN')
wait_time(300) #長押しを防ぐためのwaitTime
cursor_sprite.position pos[0], pos[1]+60
end
if keyboard.down?('RIGHT')
#左右に動くモーションを設定しているため、スプライトを作り直さないと左右に動けない
cursor_sprite.destroy
cursor_sprite = put_sprite 'cursor' do
position pos[0]+100, pos[1]
frame_index 0
end
cursor_sprite.start_motion('normal')
cursor_sprite.angle 90
cursor_sprite.collide_world!
cursor_layer = add_layer
cursor_layer.add cursor_sprite
wait_time(300) #長押しを防ぐためのwaitTime
end
if keyboard.down?('UP')
wait_time(300) #長押しを防ぐためのwaitTime
cursor_sprite.position pos[0], pos[1]-60
end
#Gを押した時、ハンバーガーに重力を付加する
if keyboard.down?('G') || button[0].tap_down?
i=0
while i < 8
burger_sprite[i].gravity(nil, 2)
i=i+1
end
cursor_sprite.position 50, 60
wait_time(300)
end
#Rキーを押した時、ハンバーガーのスプライトをリセットし具をランダムでセット
if keyboard.down?('R') || button[3].tap_down?
burger_goods=[3,rand(18)+5,rand(18)+5,rand(18)+5,rand(18)+5,rand(18)+5,rand(18)+5,1]
#具番号は22まであり、1~4はバンズのため、上のような書き方をしている
i=0
while i < 9
if burger_goods[i]
burger_sprite[i].destroy
burger_sprite[i]= put_burger(self,400,400-i*60+50,burger_goods[i])
burger_layer.add burger_sprite[i]
burger_sprite[i].layer_index i
end
i=i+1
end
cursor_sprite.position 50, 240
wait_time(300)
end
#Bキーを押した時、重力と跳ね返り係数を付加する
if keyboard.down?('B') || button[1].tap_down?
i=0
while i < 8
burger_sprite[i].gravity(nil, 2)
burger_sprite[i].bounce(1.0, 1.0)
i=i+1
end
cursor_sprite.position 50, 120
wait_time(300)
end
#Vキーを押した時、下方向へ速度を与える
if keyboard.down?('V') || button[2].tap_down?
i=0
while i < 8
burger_sprite[i].velocity(nil, 2)
i=i+1
end
cursor_sprite.position 50, 180
wait_time(300)
end
#Dキーを押した時、当たり判定を表示する
if keyboard.down?('D') ||button[4].tap_down?
if debug < 1
debug=1
else
debug=0
end
cursor_sprite.position 50, 300
wait_time(300)
end
#お皿とハンバーガーの各具の当たり判定
#同じレイヤー同士の当たり判定がうまく動かなかったため
#7のスプライト同士の全てでの判定を書いている
collision dish_sprite, burger_sprite[0]
collision burger_sprite[0], burger_sprite[1]
collision burger_sprite[0], burger_sprite[2]
collision burger_sprite[0], burger_sprite[3]
collision burger_sprite[0], burger_sprite[4]
collision burger_sprite[0], burger_sprite[5]
collision burger_sprite[0], burger_sprite[6]
collision burger_sprite[0], burger_sprite[7]
collision burger_sprite[1], burger_sprite[2]
collision burger_sprite[1], burger_sprite[3]
collision burger_sprite[1], burger_sprite[4]
collision burger_sprite[1], burger_sprite[5]
collision burger_sprite[1], burger_sprite[6]
collision burger_sprite[1], burger_sprite[7]
collision burger_sprite[2], burger_sprite[3]
collision burger_sprite[2], burger_sprite[4]
collision burger_sprite[2], burger_sprite[5]
collision burger_sprite[2], burger_sprite[6]
collision burger_sprite[2], burger_sprite[7]
collision burger_sprite[2], burger_sprite[3]
collision burger_sprite[2], burger_sprite[4]
collision burger_sprite[2], burger_sprite[5]
collision burger_sprite[2], burger_sprite[6]
collision burger_sprite[2], burger_sprite[7]
collision burger_sprite[3], burger_sprite[4]
collision burger_sprite[3], burger_sprite[5]
collision burger_sprite[3], burger_sprite[6]
collision burger_sprite[3], burger_sprite[7]
collision burger_sprite[4], burger_sprite[5]
collision burger_sprite[4], burger_sprite[6]
collision burger_sprite[4], burger_sprite[7]
collision burger_sprite[5], burger_sprite[6]
collision burger_sprite[5], burger_sprite[7]
collision burger_sprite[6], burger_sprite[7]
end #update do
render do
if debug > 0
dish_sprite.show_debug_body
i=0
while i < 8
burger_sprite[i].show_debug_body
i = i+1
end
else
end
end
end
start_scene 'start'
#カーソルの設定
sprite 'cursor' do
image 'cursor_img'
origin :center
motion 'normal' do #カーソルが左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '-4'}, duration: 300
loop(true)
end
end
#お皿のスプライトの設定
sprite 'dish' do
image 'goods0'
origin :center
end
#バーガーの具のスプライトの設定
i=1
while i <23
sprite "goods_sprite_#{i}" do
image "goods#{i}"
origin :center
end
i=i+1
end
#バーガーを配置するメソッド
def put_burger(scene, x, y, i)
# バーガーを配置
burger = scene.put_sprite "goods_sprite_#{i}" do
#position 400, 600-(i+1*100)
position x, y
frame_index 0
end
# 当たり判定の大きさを設定する
burger.collision_size(300, 20)
# 元画像が大きいので適当に縮小
#burger.scale 1.0, 1.0
# 重力を与える
#burger.gravity(nil, 2)
# 跳ね返り係数を与える
#burger.bounce(1.0, 1.0)
# 端で跳ね返るようにする
burger.collide_world!
# ランダムに速度を与える
#buerger.velocity(0, 0)
# 配置したバーガーを返す
burger
end
#ボタンのスプライト
sprite 'b_g' do
image 'b_g_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_b' do
image 'b_b_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_v' do
image 'b_v_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_r' do
image 'b_r_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_r' do
image 'b_r_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_on' do
image 'b_on_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_off' do
image 'b_off_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
sprite 'b_ok' do
image 'b_ok_img'
origin :left_top
motion 'click' do #左右に動くモーション
to params: {x: '+4'}, duration: 300
to params: {x: '0'}, duration: 300
end
end
コード一覧
- start.rb
プレー内容を公開する
プレー履歴
プレー履歴はありません。
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア