CoRサンプル集: ギガブロイゼンCoR

フィールドマップのテスト
まだ全然ゲームになってませんが
進捗的な感じで公開

キャラをマウスで移動できるようにしよと思ったら
意外に難しかった。
画面上の座標とマップ上の座標と違うのが原因であると思われる。
誰か解決できる人ご教授願います。
てだ~れも教えてくれないのな。
なんかフリーズします。
原因不明。
何が原因なのか教えてくれる人なんているわけがない。
いろいろ試してみましたが
どうも仕様だと思う・・・
CoRて長時間作動できないんじゃね?
あとデータのロードセーブにけっこう時間かかります。
敵がマップにめり込むのも仕様です
というわけでRmakeマップを使うといろいろとリスクがあります
プレー:206 (人数:10) クリア: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
投稿者:Rmakeic1 mini muga 対象Lv1 公開日:2021年01月26日 02:43:05
プレー内容を公開する

違反を通報する

コメントする

コメントするには、ログインする必要があります。

コメント一覧

    mini 光楼(114)(投稿日:2021/02/03 23:02, 履歴)
日々進化してますね!

私のゲームも何故かフリーズするものがあります。
当たり判定が原因じゃないかと疑ってるんですが、まだ詳しい事はサッパリです。
Rmakeic1 mini muga(投稿日:2021/02/04 00:28, 履歴)
光楼さん、プレイ・コメントありがとうございます!
おお、やっぱりフリーズしちゃうもんなんですね
現在疑似3Dダンジョンのゲームを作っているのですが
これまた原因不明のエラーが出て困ってます
プログラム自体は間違ってない自信はあるのですが
どうにも上手くいきませんね
なんかCoRは不具合があるように思います
めっちゃ複雑なゲームは作れない気がしますね
これからも光楼さんのプログラムは参考にしていきたいと思います
僕も及ばずながらプログラムは公開していくつもりなので
情報交換といきましょう
よろしくお願いします!
プレー履歴

プレー履歴はありません。

全てのプレー履歴を見る

新着レビュー

レビューはまだ投稿されていません。 作品の感想を作者に伝えるためにレビューを投稿してみませんか?

全てのレビュー

フォロー/シェア

ブログ/Wiki/掲示板で共有する

Rmake内(ブログ/Wiki/掲示板)に貼り付ける場合は以下のタグを利用してください。

リンク

プレイヤー

外部ホームページに貼り付ける

外部ホームページに貼り付ける場合は以下のタグを利用してください。