mieki256's diary



2018/11/16(金) [n年前の日記]

#1 [tic80] TIC-80でシューティングゲームっぽいものを書いてみる。その2

先日、TIC-80上で動く横スクロールシューティングっぽいモノを書き始めたけれど、アタリ判定もつけてみた。

stgsample5_ss1_opt.gif

ブラウザ上で動かしたいなら以下。

_stgsample5.tic.html

操作方法。

ソース。 :

ソースは以下。長くなり始めたので Gist にアップロードしてみた。

_TIC-80 shoot 'em up sample

スプライト画像は以下。

sprites.gif

_sprites.gif

ソースも画像も、CC0 / Public Domain ってことで。

ちなみに。
  • export sprites で、スプライト画像のエクスポート。
  • import sprites で、スプライト画像のインポート。
以下が参考になった。ありがたや。

_TIC-80 初心者講座: マップ・スプライト画像を画像ソフトで描いて取り込もう - Qiita

ソースの簡単な解説。 :

アタリ判定は、hitcheck()、hitcheckCirc() で処理をしている。
function hitcheckCirc(e,b)
 if not next(b.collision) then
  return false
 end
 local x,y,r
 x=e.collision[1]-b.collision[1]
 y=e.collision[2]-b.collision[2]
 r=e.collision[3]+b.collision[3]
 if x*x+y*y <=r*r then return true end
 return false
end

function hitcheck()
 -- enemys vs bullet
 for i,e in ipairs(enemys) do
  if e.alive and next(e.collision) then
   for j,b in ipairs(bullets) do
    if b.alive and hitcheckCirc(e,b) then
     e:hit(b)
     b:shot(e)
     break
    end
   end
  end
 end

 if player.alive==false or
    not next(player.collision) then
  return
 end

 -- enemys vs player
 -- ...

 -- enemy bullets vs player
 -- ...
end

判定の仕方は色々あるけど、今回は、点と点の距離で判定。
 if x*x+y*y<=r*r then return true end
 return false
敵と弾、敵と自機、等、x座標とy座標の差が得られれば、 _三平方の定理 で距離は求められる。式に平方根が入ってくるけど、今回は正確な距離を求めたいわけじゃなく、任意の距離より近いか遠いかを知りたいだけなので、判定に使う距離を二乗して比較に使えば平方根を求めなくて済む。

アタリ判定用のデータは、 _DXRuby Sprite#collision= を参考に、{x,y,r} を各クラスで持つことにした。

ちなみに、Lua で、テーブルが空かどうかを判定する際は next(テーブル名) が使えるらしい。

_Lua ちょっとしたコードチューニング - Qiita

以上です。

過去ログ表示

Prev - 2018/11 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project