プログラミング未経験だけどゲームつくる - 8 : 当たり判定のある石ころをランダムに配置【LOVE2d】

こんばんは、サトウダイスケです。

今日は当たり判定のある石ころをランダム生成したいと思います。

今までは決め打ちで座標を決めていた石ころですが、とりあえずランダムでひとつだけ配置します。

乱数を取るには、乱数を取るにはmath.random(最小値,最大値)を使うようです。なので、

  ishikoro_x = math.random(100,window_w) 
  ishikoro_w = 10
  ishikoro_center = ishikoro_x + ishikoro_w/2

といった感じで、設定してみました。
ishikoro_centerでx軸の中心座標を取っているのは、当たり判定で使用するためです。

  -- 石ころの開始座標は (ishikoro_x , zimen_h - ishikoro_w)
  -- 石ころの大きさは (ishikoro_w,ishikoro_w)
  -- 石ころのx軸の中心座標 (ishikoro_center = ishikoro_x + ishikoro_w/2)
  love.graphics.rectangle("fill",ishikoro_x , zimen_h - ishikoro_w,ishikoro_w,ishikoro_w)

こんな感じで自動で配置描写するところまでできました。

次は、当たり判定を設定します。

そのまえに、いくつか前の記事で当たり判定の位置を適当に設定していましたが、イラストのドット単位で計算することができるのに気づいたので、改めて設定します。

  -- 当たり判定の位置描写
  love.graphics.setColor(255, 0, 0,0.5)

  if dir == 1 then
      love.graphics.rectangle("fill", neko_x + x + scale * 3 , neko_center_y - 10, scale * 9, 10)  
    elseif dir == -1 then
      love.graphics.rectangle("fill", neko_x + x + scale * 4 - chara_w_h*scale, neko_center_y - 10, scale * 9, 10)  
    end

とりあえず当たり判定がどこなのか見えたほうが良いので赤く描写します。わからない変数などは過去の記事をご参照ください。

これで猫のスケールを変えたとしてもピッタリの当たり判定が設定できました。

次は、石ころにぶつかった場合の処理を書いていきます。

    --  ダメージを受けた際の計算
    if damage_muteki == 0 then
      if math.abs(neko_center_x-ishikoro_center)  -- 猫のx軸の中心と石ころのx軸の中心の差の絶対値
        < 
        scale * 9 / 2 + ishikoro_w/2  -- 猫の石ころの当たり判定となる半径の和
        then
          if neko_center_y == zimen_h then
            damage = damage + 1
            damage_muteki = 1
            nokori_soul = nokori_soul - 1
            love.audio.play(snd_damage)
            damage_muteki_time_remaing = damage_muteki_time
          end
      end
    end

絶対値を取るにはmath.abs()を使うようです。
ちょっと数学っぽいですが、猫と石ころの中心(x軸)の差の絶対値が、猫と石ころそれぞれの半径の和より小さくなった場合にダメージを食らう、という処理です。

これで、ランダムで石ころを配置して、当たり判定を設定することができました。

次回は石ころを複数配置してみたいと思います。そうしたら、石ころを動かしてネズミ的な感じにして、そして最後に魚をアイテムとして配置してスコア表示をできるようにすれば一応ゲームとして成立するようになるのかなーと思ったりしています。

では!



この記事が気に入ったらサポートをしてみませんか?