忍者ブログ
Admin*Write*Comment
35歳からのC言語ゲームプログラミング
[8]  [9]  [10]  [11]  [12]  [13]  [14]  [15]  [16]  [17]  [18
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

敵弾と背景の当たり判定を実装

背景との当たり判定復活に伴って、敵弾と背景にも当たり判定を加えました。
これで敵弾が壁を突き抜けて自機を攻撃してくる事は無くなります。
これで当たり判定については現在必要なオブジェクト全てに実装されたことになります。
今後だいぶ先にパワーアップアイテム等を実装するまではこのまま行けるんじゃないかと。

あと、画面内限定で背景との当たり判定を行う事を考えていたんだけども、よく考えてみると四角形の接触判定は4組の数字の大きさを比較するだけで得られる極めて軽い処理で、これらの座標が画面内かどうかを判断する処理を付け加えるのは当たり判定そのものとたいして変らない条件分岐を増やすようなもん(X方向において画面と言う四角形と背景各ブロックの接触判定をするような感じ)なので、処理速度上はあんまり効果が無いんじゃないかと。
背景が相当大きな画像で、沢山のブロックに分けなきゃならないほど複雑な地形だった場合はまた別でしょうけど。
んなわけで、とりあえず今の処理のまま行けるとこまで行くつもりです。

で、今までは各キャラクターと背景の当たり判定を行う関数ごとに、当たり判定の処理を入れていたんだけど、その処理部分を当たっていればTRUEを返す専用の関数にして、判定したい対象オブジェクトのX0、Y0、X1、Y1の座標を渡せば結果が得られるようにしました。

90fbda76.PNG


















文章だとわかりにくいですが、ソースだとつまりこういう事です。
この形の方が後から判定したい対象(フォースと背景とか)が増えたりした場合に追加が楽になります。
判定対象のX0、Y0、X1、Y1を定義した上で、BG_Coll関数に渡すだけで判定結果がTRUEかFALSEで返ってきます。
PR

背景の当たり判定用データを別ファイル化

予告通りの仕事を終らせました(笑)
背景に関する当たり判定は以前の記事で書いた様に四角形の接触判定を用いています。
そのため、背景にはグラフィックデータの他に、各ブロックごとの四角形の左上と右下の座標のデータが必要になります。
それらの座標と、自機、波動砲の座標を比較して当たり判定を行うわけです。

で、背景との当たり判定を実装した段階では、とりあえず背景四角形の座標を入れる配列変数を用意して、そこにプログラム内で直接代入しておく方法をとっていました。
当たり判定がしっかり働くかどうかの実験が目的だったので。
ですが、その時点で既にデータは別ファイルにしておくべきだなと思っていました。
徐々に背景のグラフィックを描いてゆく今回のような制作スタイルの場合、区切りの良いところまで描き終わるごとに四角形の座標も追加してゆくことになります。
であれば、敵機のデータと同じく、いちいちデバッグの必要の無い別ファイルにデータを入れておいた方が良いだろうと。
また、今回は1ステージのみですが、複数ステージある場合や、今回の横スクロールシューティングのプログラムをベースに新たなゲームを作る場合に、別ファイルから読み込んだデータから当たり判定を行う方が流用も効きます。

プログラム自体は敵データのファイル読み込みと同じことだし、背景との当たり判定を行う関数は機能させていないだけで既に出来ていたので、あっさり実装できました。
でも、現在のバージョンは画面外も含めて全ての背景ブロックと毎フレーム当たり判定を行っています。
そのことによる処理の遅れは今のところ見られませんが、今後背景を書き足していった時どうなるかわかりません。
それにやはり画面に表示されていないものと当たっているか判定するのはナンセンスです。
なので、次はこの当たり判定を画面内のオブジェクトに対してのみ行うようにしようと思います。
43f14a1d.JPG




ドット絵エディタに表示した背景の各ブロックの角座標にマウスカーソルを合わせて、表示される座標をノートに書き出します。
これをテキストファイルに打ち込んで、読み込むデータファイルを作ります。
マップエディタとか作る技術が無いので、非常にアナログな作業になります(笑)
いや、これはこれでなかなか楽しかったり。







では久々の更新なので実行ファイルを。
いつも通りソーステキスト同梱です。
http://multip.net/view/H3OtLqfSd1

ダウンロードや操作方法については前の方の記事を参照してください。
 

まだ仕事中で、休憩中に携帯から書いてます。
最悪に忙しい状態は何とか脱しました。
今夜からまた少しずつ実装を進められそうです。
4日くらいPC触ってなかったので、良い感じに人肌(PC肌?)恋しくなってます(笑)
とりあえず背景の当たり判定データを外部ファイル化する所から手をつける予定です。
見た目に影響する部分じゃないので、ブログを見ている人にはつまらないと思いますが、いずれ必ずやっておかなきゃと思っていた処理なので面倒になる前にやっちまいます。
ぜんぜん更新できてないのにたくさんアクセスがあって有難いやら申し訳ないやら。
アクセスやコメントが確実にモチベーションにつながってると思うので、そういう意味では学習開始と同時にブログを立ち上げて正解でした。
ありがとうございます、頑張ります。
昨日の(ああ、もう一昨日か)午後から今まで、途中睡眠2時間はさんでずっと仕事してました。
このまま少し寝て、朝からまた仕事です。
スロット屋さんにはたまにこういう瞬間風速的に忙しい時があります。
自分で選んだ仕事だからしかたないんですが、さすがに電池切れです。
今現在布団の上で大の字になってこの記事を携帯からかいていますが、もう手足が動きません(笑)
更新できなくてすいません。
充電が完了したらまた頑張ります。
おやすみなさい
僕にとって一番古いゲームの記憶と言うと、それは当時喫茶店のテーブル替わりに置かれていて両親がやっていたパックマンやインベーダーになる。
あとは任天堂のゲームウォッチとか。
でもやはり、しっかり記憶に残っている最初のゲームは、僕らの世代のほとんどの人がそうであるように、ファミコンで最初に買ってもらったソフトになる。
僕にとってのそれはアスキーが発売した『コスモジェネシス』というソフトだ。
近所のスーパーむらかみのレジの横にファミコンソフトの棚があって、そこに一際輝いて見えたのがコスモジェネシスだった。
今、ネットで調べて見てもなかなかカッコイイパッケージだ。
裏面の画面写真も純真な子供を騙すに十分なカッコ良さである。
中身はコックピット視点の疑似3Dシューティングであると同時に戦略シミュレーション要素も取り入れた、かなり挑戦的なゲームだった。
ファミコン世代であると同時にスターウォーズ世代でもある僕はそのパッケージにXウィングに乗り込んでデススターを破壊する自分の姿を想像した。
しかしそれは小学生の子供にはあまりに難しく、さらにいわゆるクソゲーであった。
画面だけを見ればナムコの名作スターラスターを思わせるのだが、出来には雲泥の差があった。

それでも僕は狂ったようにコスモジェネシスをプレイした。
なにせそれしかソフトは無いのだ。
手に入れたばかりのファミコンにポジティブ補正がかかりまくっていたってのもある。
自分が手に入れたゲームがつまらないとは思いたくなく、学校で「面白い」と宣伝しまくった。
ひどい話だ。
アスキーからは是非宣伝料をいただきたい。
さらに言うならアイデアだけは見るべきところもあったよ。
是非今の技術で面白いゲームとしてリメイクしてくれ。

他に記憶に残る名作はファミコンに数多くあるわけだけど、何が一番記憶に残っているかと尋ねられたら、まず僕の頭に浮かぶのはコスモジェネシスなのだ。
源体験がクソゲー。
こんな僕に面白いゲームを作れるんだろうか。
  • ABOUT
やってやれないことはないっ!たぶん・・・
  • カレンダー
04 2025/05 06
S M T W T F S
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 31
  • 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
  • プロフィール
HN:
Call my name
年齢:
50
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
  • バーコード
  • ブログ内検索
  • カウンター
  • アクセス解析
Copyright © 35歳からのC言語ゲームプログラミング All Rights Reserved.*Powered by NinjaBlog
Graphics By R-C free web graphics*material by 工房たま素材館*Template by Kaie
忍者ブログ [PR]