CoRサンプル集: ギガブロイゼンCoR
フィールドマップのテスト
まだ全然ゲームになってませんが
進捗的な感じで公開
キャラをマウスで移動できるようにしよと思ったら
意外に難しかった。
画面上の座標とマップ上の座標と違うのが原因であると思われる。
誰か解決できる人ご教授願います。
てだ~れも教えてくれないのな。
なんかフリーズします。
原因不明。
何が原因なのか教えてくれる人なんているわけがない。
いろいろ試してみましたが
どうも仕様だと思う・・・
CoRて長時間作動できないんじゃね?
あとデータのロードセーブにけっこう時間かかります。
敵がマップにめり込むのも仕様です
というわけでRmakeマップを使うといろいろとリスクがあります
まだ全然ゲームになってませんが
進捗的な感じで公開
キャラをマウスで移動できるようにしよと思ったら
意外に難しかった。
画面上の座標とマップ上の座標と違うのが原因であると思われる。
誰か解決できる人ご教授願います。
てだ~れも教えてくれないのな。
なんかフリーズします。
原因不明。
何が原因なのか教えてくれる人なんているわけがない。
いろいろ試してみましたが
どうも仕様だと思う・・・
CoRて長時間作動できないんじゃね?
あとデータのロードセーブにけっこう時間かかります。
敵がマップにめり込むのも仕様です
というわけでRmakeマップを使うといろいろとリスクがあります
プレー:218
(人数:19)
クリア:1
評価: 10 (1回)
タグが設定されていません
scene 'start' do
map_layer_01 = nil
map_layer_02 = nil
character_layer = nil
face_sp = nil
Bos_sp = nil
title = nil
btan = []
player_sprite = nil
Tge_sp=[]
Ive_sp=[]
Bom_sp=nil
BBm_sp=nil
Kro_sc=nil
Tt_BGM=nil
S1_BGM=nil
OK_Snd=nil
DD_Snd=nil
Dm_Snd=nil
metu_Snd=nil
Dwn_Snd=nil
Kai_Snd=nil
speed = 4
GMod=0
Move=false
KTim=false
Btl=false
Ply_X=nil
Ply_Y=nil
mxx=nil
myy=nil
vxxx=nil
vyyy=nil
ms_x=nil
ms_y=nil
bm_x=nil
bm_y=nil
TgNSEW=[]
Lv=1
Exp=0
HPmx=100
HP=HPmx
Fit=10
Ivt=0
ULv=0
Bos=0
MT=nil
II=nil
i=0
v=0
T=0
e=0
KCT=0
KKCT=0
BCT=0
MCT=0
Text=[]
TgLv=1
TgHP=[]
TgFit=5
Ply_X=400
Ply_Y=300
key1="data1"
key2="data2"
key3="data3"
key4="data4"
key5="data5"
key6="data6"
i=0
while i<5
TgHP[i]=TgLv*50
TgNSEW[i]=rand(4)
i=i+1
end
preload do
debug_log 'CoRからRPGマップを読み込むテスト'
# マップデータの読込
rmake_map 'my_map', id: 44615
# 画像の読み込み
image 'タイトル', id: 321976
image 'ボタンはじめから', id: 325379
image 'ボタンつづきから', id: 325380
image 'ボタン空', id: 325381
image 'chara_00', id: 325423 #, frame_size: [32, 32]
image 'Tge0', id: 325415
image 'Ive0', id: 325418
image 'Bom0', id: 325420
image 'Kuro', id: 325416
#BGM
music 'タイトルBGM', id: 320859
music 'S1BGM', id: 228449
# 効果音
sound '決定', id: 325384
sound '階段', id: 325399
sound 'Dmg' , id: 324292
sound 'Metu', id: 325394
sound 'Dwn', id: 325397
sound 'Kai', id: 324297
sound 'LvUp', id: 325398
end
create do
# マップの配置
map = put_map 'my_map'
# レイヤーの生成
# マップのレイヤー0を追加
map_layer_01 = add_map_layer
# マップのレイヤー1を追加
map_layer_02 = add_map_layer
# キャラクタのレイヤーを追加
character_layer = add_layer
#キャラフェイス
face_sp = put_sprite 'chara' do
position 74,474
frame_index 0
end
# 操作キャラクタの追加
player_sprite = put_sprite 'chara' do
position Ply_X, Ply_Y
frame_index 0
end
player_sprite.scale 1/4, 1/4
#敵スプライト
Tge_sp[0] = put_sprite 'Tge00' do
position 384, 160
frame_index 0
end
Tge_sp[0].scale 1/3, 1/3
Tge_sp[1] = put_sprite 'Tge00' do
position 320, 96
frame_index 0
end
Tge_sp[1].scale 1/3, 1/3
Tge_sp[2] = put_sprite 'Tge00' do
position 320, 224
frame_index 0
end
Tge_sp[2].scale 1/3, 1/3
Tge_sp[3] = put_sprite 'Tge00' do
position 448, 96
frame_index 0
end
Tge_sp[3].scale 1/3, 1/3
Tge_sp[4] = put_sprite 'Tge00' do
position 448, 224
frame_index 0
end
Tge_sp[4].scale 1/3, 1/3
#ボススプライト
Bos_sp = put_sprite 'Tge00' do
position -100,-100 #384, 160
frame_index 0
end
#ボムスプライト
Bom_sp = put_sprite 'Bom00' do
position -100,-100
frame_index 0
end
Bom_sp.scale 1/3, 1/3
#ボムスプライト
BBm_sp = put_sprite 'Bom00' do
position -100,-100
frame_index 0
end
#イベントスプライト
Ive_sp[0] = put_sprite 'Ive00' do
position 128, 65
frame_index 0
end
Ive_sp[0].scale 1/3, 1/3
Ive_sp[1] = put_sprite 'Ive00' do
position 384, 65
frame_index 0
end
Ive_sp[1].scale 1/3, 1/3
Ive_sp[2] = put_sprite 'Ive00' do
position 640, 65
frame_index 0
end
Ive_sp[2].scale 1/3, 1/3
#===テキスト===#
Text[0] = put_text 'テスト' do
#position 10, game_size_h-22
position 158, 410
text 'X'
end
Text[1] = put_text 'テスト' do
position 158, 460
text 'X'
end
Text[2] = put_text 'テスト' do
position 158, 510
text 'X'
end
# タイトルの配置
title = put_sprite 'Title' do
position 0, 0
frame_index 0
end
btan[0] = put_sprite 'Botanはじめから' do
position 50, 500
frame_index 0
end
btan[1] = put_sprite 'Botanつづきから' do
position 320, 500
frame_index 0
end
btan[2] = put_sprite 'Botan空' do
position 570, 500
frame_index 0
end
Kro_sc = put_sprite 'Kro00' do
position 0,-600
frame_index 0
end
#BGM
Tt_BGM = add_music('タイトルBGM')
S1_BGM = add_music('S1BGM')
#効果音
OK_Snd = add_sound('決定')
DD_Snd = add_sound('階段')
Dm_Snd = add_sound('Dmg')
Metu_Snd = add_sound('Metu')
Dwn_Snd = add_sound('Dwn')
Kai_Snd = add_sound('Kai')
LU_Snd = add_sound('LvUp')
# レイヤーに追加
#character_layer.add player_sprite
# 世界の端に到着するとそれ以上進めなくなる
#player_sprite.collide_world!
#i=0
#while i<5
# Tge_sp[i].collide_world!
# i=i+1
#end
# このキャラの動きにカメラがついていく
#player_sprite.camera_target!
# downアニメーションの開始
#player_sprite.start_animation('down')
#BGM再生
Tt_BGM.play
end
update do
# タイトル画面
if GMod == 0
if pointer.down? #&& Key_control_flag == true
if Stp == false
Stp = true
ms_x = pointer.x
ms_y = pointer.y
if (ms_x > 50 && ms_x < 210 && ms_y > 500 && ms_y < 550)
OK_Snd.play
Tt_BGM.stop
title.position 0, -600
btan[0].position 50,-100
btan[1].position 320,-100
btan[2].position 570,-100
GMod = 1
S1_BGM.play
elsif (ms_x > 320 && ms_x < 480 && ms_y > 500 && ms_y <550)
OK_Snd.play
Tt_BGM.stop
data1 = loadGameData(key1)
data2 = loadGameData(key2)
data3 = loadGameData(key3)
data4 = loadGameData(key4)
data5 = loadGameData(key5)
data6 = loadGameData(key6)
Lv = data1.to_i
HPmx = data2.to_i
Fit = data3.to_i
Exp = data4.to_i
TgLv = data5.to_i
Ivt = data6.to_i
HP = HPmx
i=0
while i<5
TgHP[i]=TgLv*50
TgFit=TgLv*5
i=i+1
end
#Fit=500000
title.position 0, -600
btan[0].position 50,-100
btan[1].position 320,-100
btan[2].position 570,-100
GMod = 1
S1_BGM.play
end
end
else
Stp = false
end
# ゲーム画面
elsif GMod == 1
# キャラクタとマップの当たり判定処理
#collision player_sprite, map_layer_01
#collision player_sprite, map_layer_02
collision(player_sprite, map_layer_01)do
#Move=false
end
collision(player_sprite, map_layer_02)do
#Move=false
end
# キャラクタの速度を(x,y)=(0,0)にする
player_sprite.velocity 0, 0
Ive_sp[0].velocity 0, 0
Ive_sp[1].velocity 0, 0
Ive_sp[2].velocity 0, 0
i=0
while i<5
if TgHP[i]>0
collision(Tge_sp[i], map_layer_01)do
TgNSEW[i]=TgNSEW[i]+1
if TgNSEW[i]>3
TgNSEW[i]=0
end
end
collision(Tge_sp[i], map_layer_02)do
TgNSEW[i]=TgNSEW[i]+1
if TgNSEW[i]>3
TgNSEW[i]=0
end
end
Tge_sp[i].velocity 0, 0
v=0
while v<5
#debug_log "v #{v}"
if i==v
else
#collision Tge_sp[i], Tge_sp[v]
collision(Tge_sp[i], Tge_sp[v])do
TgNSEW[i]=TgNSEW[i]+1
if TgNSEW[i]>3
TgNSEW[i]=0
end
end
end
v=v+1
end
end
i=i+1
end
if Bos>0
collision(Bos_sp, map_layer_01)do
end
collision(Bos_sp, map_layer_02)do
end
Bos_sp.velocity 0, 0
end
if KTim==false
#敵の移動
i=0
while i<5
if TgHP[i]>0
case TgNSEW[i]
when 0
Tge_sp[i].velocity 0,-3
when 1
Tge_sp[i].velocity 0,3
when 2
Tge_sp[i].velocity 3,0
when 3
Tge_sp[i].velocity -3,0
end
end
i=i+1
end
# キーボード操作
if keyboard.down?('LEFT')
pos = player_sprite.position
player_sprite.velocity -speed, 0
#player_sprite.start_animation('left')
end
if keyboard.down?('DOWN')
pos = player_sprite.position
player_sprite.velocity 0, speed
#player_sprite.start_animation('down')
end
if keyboard.down?('RIGHT')
pos = player_sprite.position
player_sprite.velocity speed, 0
#player_sprite.start_animation('right')
end
if keyboard.down?('UP')
pos = player_sprite.position
player_sprite.velocity 0, -speed
#player_sprite.start_animation('up')
end
if pointer.down?
if Stp == false
Stp = true
Move = true
MCT = 0
ms_x = pointer.x
ms_y = pointer.y
#Zpos = player_sprite.position
Tpos = player_sprite.position
#Tpos = character_layer.position
#pos = player_sprite.position
vx = ms_x - Tpos[0]
vy = ms_y - Tpos[1]
II = (vx**2 + vy**2) ** 0.5
if II < 0.1
II = 0.1
end
vxx = vx / II
vyy = vy / II
vxxx = vxx * 5
vyyy = vyy * 5
end
else
Stp = false
end
if Move == true
#Ply_X=Ply_X+vxxx
#Ply_Y=Ply_Y+vyyy
MCT=MCT+1
pos = player_sprite.position
if (vxxx>0 && pos[0]>ms_x)
if (vyyy>0 && pos[1]>ms_y)
Move=false
elsif (vyyy<0 && pos[1]<ms_y)
Move=false
end
end
if (vxxx<0 && pos[0]<ms_x)
if (vyyy>0 && pos[1]>ms_y)
Move=false
elsif (vyyy<0 && pos[1]<ms_y)
Move=false
end
end
if MCT>80
Move=false
end
#collision(player_sprite, map_layer_01)do
# Move=false
#end
#collision(player_sprite, map_layer_02)do
# Move=false
#end
#player_sprite.position Ply_X, Ply_Y
player_sprite.velocity vxxx, vyyy
#pos = player_sprite.position
#if (vxxx>0 && pos[0]>ms_x) || (vyyy>0 && pos[1]>ms_y)
# Move=false
#end
#if (vxxx<0 && pos[0]<ms_x) || (vyyy<0 && pos[1]<ms_y)
# Move=false
#end
end
else
KCT=KCT+1
if KCT>80
KCT=0
if TgLv==10
Bos=1
TgHP[0]=5000
TgFit=55
Bos_sp.position 352,128
else
Bos=0
#i=0
#while i<5
# TgHP[i]=TgLv*50
# TgFit=TgLv*5
# i=i+1
#end
Set_Tgt()
#Tge_sp[0].position 384, 160
#Tge_sp[1].position 320, 96
#Tge_sp[2].position 320, 224
#Tge_sp[3].position 448, 96
#Tge_sp[4].position 448, 224
#Ive_sp[0].position 128,65
#Ive_sp[1].position 384,65
#Ive_sp[2].position 640,65
end
Kro_sc.position 0,-600
Move=false
KTim=false
end
end
#敵との接触
e=0
while e<5
collision(player_sprite, Tge_sp[e])do
if Btl==false
Btl=true
BCT=0
MT = (Fit / 5 + rand(Fit)) - (TgFit / 5 + rand(TgFit))
Dm_Snd.play
T=e
if MT>0
TgHP[T]=TgHP[T]-MT
if TgHP[T]<1
Metu_Snd.play
TgHP[T]=0
Tge_sp[T].position -100,-100*T
Tge_sp[T].velocity 0,0
Exp = Exp + TgLv
LvU = 0
Set_Exp() #NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
while (NxExp <= Exp)
LvU = LvU + 1
Lv = Lv + 1
HPmx = HPmx + 10
Fit = Fit + 5
Set_Exp() #NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
HP = HPmx
end
if (LvU > 0)
LU_Snd.play
end
end
else
HP=HP+MT
if HP<1
Dwn_Snd.play
HP=100
TgLv=1
S1_BGM.stop
Tt_BGM.play
player_sprite.position 400,300
player_sprite.velocity 0, 0
title.position 0, 0
btan[0].position 50,500
btan[1].position 320,500
btan[2].position 570,500
#i=0
#while i<5
# TgHP[i]=TgLv*50
# TgFit=TgLv*5
# i=i+1
#end
Set_Tgt()
#Tge_sp[0].position 384, 160
#Tge_sp[1].position 320, 96
#Tge_sp[2].position 320, 224
#Tge_sp[3].position 448, 96
#Tge_sp[4].position 448, 224
#Ive_sp[0].position 128,65
#Ive_sp[1].position 384,65
#Ive_sp[2].position 640,65
Btl=false
GMod=0
end
end
# TgLv=TgLv+1
# Kro_sc.position 0,0
# player_sprite.position 128+16,160
# KTim=true
end
end
e=e+1
end
collision(player_sprite, Bos_sp)do
if Btl==false
Btl=true
BCT=0
MT = (Fit / 5 + rand(Fit)) - (TgFit / 5 + rand(TgFit))
Dm_Snd.play
if MT>0
TgHP[0]=TgHP[0]-MT
if TgHP[0]<1
Metu_Snd.play
TgHP[0]=0
Bos_sp.position -100,-100
# アクティビティフィードを流す
result = send_activity_feed("レベル:#{Lv}でクリア");
# 結果をデバッグログに出力する
# 公開したゲームでは見えません
debug_log(result ? "フィードを流した" : "フィードを流さなかった")
S1_BGM.stop
game_clear
Exp = Exp + TgLv
LvU = 0
NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
while (NxExp <= Exp)
LvU = LvU + 1
Lv = Lv + 1
HPmx = HPmx + 10
Fit = Fit + 5
NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
HP = HPmx
end
if (LvU > 0)
LU_Snd.play
end
end
else
HP=HP+MT
if HP<1
Dwn_Snd.play
HP=100
TgLv=1
S1_BGM.stop
Tt_BGM.play
player_sprite.position 400,300
player_sprite.velocity 0, 0
title.position 0, 0
btan[0].position 50,500
btan[1].position 320,500
btan[2].position 570,500
i=0
while i<5
TgHP[i]=TgLv*50
TgFit=TgLv*5
i=i+1
end
Tge_sp[0].position 384, 160
Tge_sp[1].position 320, 96
Tge_sp[2].position 320, 224
Tge_sp[3].position 448, 96
Tge_sp[4].position 448, 224
Ive_sp[0].position 128,65
Ive_sp[1].position 384,65
Ive_sp[2].position 640,65
Btl=false
GMod=0
end
end
# TgLv=TgLv+1
# Kro_sc.position 0,0
# player_sprite.position 128+16,160
# KTim=true
end
end
if Btl==true
BCT=BCT+1
if MT>0
if Bos>0
pos = Bos_sp.position
BBm_sp.position pos[0],pos[1]
else
pos = Tge_sp[T].position
Bom_sp.position pos[0],pos[1]
end
else
pos = player_sprite.position
Bom_sp.position pos[0]-16,pos[1]-16
end
if BCT>10
Bom_sp.position -100,-100
BBm_sp.position -100,-100
BCT=0
Btl=false
end
end
#上り階段 レベルダウン階段
collision(player_sprite, Ive_sp[0])do
if TgLv>1
DD_Snd.play
TgLv=TgLv-1
Kro_sc.position 0,0
player_sprite.position 640+16,160
KTim=true
else
Ive_sp[0].position 128,65
end
end
#下り階段 レベルアップ階段
collision(player_sprite, Ive_sp[2])do
if TgLv<10
DD_Snd.play
TgLv=TgLv+1
Kro_sc.position 0,0
player_sprite.position 128+16,160
KTim=true
end
end
#回復&セーブ
collision(player_sprite, Ive_sp[1])do
Move=false
player_sprite.velocity 0, 0
player_sprite.velocity 0, 4#32
Ive_sp[1].velocity 0, 0
Ive_sp[1].position 384,65
if (TgHP[0]+TgHP[1]+TgHP[2]+TgHP[3]+TgHP[4])==0
player_sprite.velocity 0, 0
Kai_Snd.play
HP=HPmx
#collision(player_sprite, map_layer_01)do
#Move=false
#end
#collision(player_sprite, map_layer_02)do
#Move=false
#end
data1="#{Lv}"
data2="#{HPmx}"
data3="#{Fit}"
data4="#{Exp}"
data5="#{TgLv}"
data6="#{Ivt}"
saveGameData(key1, data1)
saveGameData(key2, data2)
saveGameData(key3, data3)
saveGameData(key4, data4)
saveGameData(key5, data5)
saveGameData(key6, data6)
#Kro_sc.position 0,0
player_sprite.position 384+16,98+32
else
Ive_sp[1].position 384,65
end
end
pos = player_sprite.position
Text[0].text("#{TgLv}階 Lv #{Lv}")
Text[1].text("HP #{HP} / #{HPmx} ") #Move:#{Move} Y:#{vyyy} PX:#{pos[0]} PY:#{pos[1]}")
NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
V=NxExp-Exp
Text[2].text("必要経験値 #{V}")
end
end
render do
end
end
start_scene "start"
# キャラクタの定義
sprite 'chara' do
image 'chara_00'
origin :center
end
sprite 'Tge00' do
image 'Tge0'
origin :left_top
end
sprite 'Ive00' do
image 'Ive0'
origin :left_top
end
sprite 'Bom00' do
image 'Bom0'
origin :left_top
end
sprite 'Kro00' do
image 'Kuro'
origin :left_top
end
sprite 'Title' do
image 'タイトル'
origin :left_top
end
sprite 'Botanはじめから' do
image 'ボタンはじめから'
origin :left_top
end
sprite 'Botanつづきから' do
image 'ボタンつづきから'
origin :left_top
end
sprite 'Botan空' do
image 'ボタン空'
origin :left_top
end
#####テキストスプライト定義#####
text 'テスト' do
origin :left_top #原点を画像左上に設定
font_size 30
color '#EEEEEE' #白っぽい色
end
#関数
def Set_Exp()
NxExp = (Lv * (2 * 50 + (Lv - 1) * 10)) / 2
end
def Set_Tgt()
i=0
while i<5
TgHP[i]=TgLv*50
TgFit=TgLv*5
Tge_sp[i].velocity 0,0
i=i+1
end
Tge_sp[0].position 384, 160
Tge_sp[1].position 320, 96
Tge_sp[2].position 320, 224
Tge_sp[3].position 448, 96
Tge_sp[4].position 448, 224
Ive_sp[0].position 128,65
Ive_sp[1].position 384,65
Ive_sp[2].position 640,65
end
コード一覧
- start.rb
プレー内容を公開する
プレー履歴
プレー履歴はありません。
新着レビュー
レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?
フォロー/シェア
私のゲームも何故かフリーズするものがあります。
当たり判定が原因じゃないかと疑ってるんですが、まだ詳しい事はサッパリです。
おお、やっぱりフリーズしちゃうもんなんですね
現在疑似3Dダンジョンのゲームを作っているのですが
これまた原因不明のエラーが出て困ってます
プログラム自体は間違ってない自信はあるのですが
どうにも上手くいきませんね
なんかCoRは不具合があるように思います
めっちゃ複雑なゲームは作れない気がしますね
これからも光楼さんのプログラムは参考にしていきたいと思います
僕も及ばずながらプログラムは公開していくつもりなので
情報交換といきましょう
よろしくお願いします!