2017-03-02 6 views
2

スペースインベーダーでは、エイリアン弾があなたの防御拠点に当たると、それらはゆっくりと劣化します。どのようにゲームがそれを行うのか誰でも説明できますか?スペースインベーダーベースの劣化

私は彼らがベースに画像を使用していないと思いますし、境界の矩形の衝突検出もしていないと思いますか?

答えて

1

ウェイバックマシンでダイヤルします。元々の宇宙の侵略者は単純なビットマスクを使って基地にダメージを与えた。画像は基本的な1ビット幅の画像で、幅1バイト、下8バイト(8×8ピクセル)の画像です。

ダメージを適用するには、左にシフトされたマスク[0b11111001,0b11110000]があります最下位のビット)を、ベースバイトでマスクします。 pixelByte &= maskByte。その後、損傷のパターンを切り取ってください。いずれかのピクセルが残っていて、爆弾の道に爆弾が置かれている場合は、爆撃が続けられます。

ベースヒットを検出するために、マスクも使用されました。 bombMask = 0b00000011は左にシフトした(またはルックアップされている可能性があります)ので、x posに一致します。ヒットがあるかどうかを確認するには、ベースビットのマスクpixelByte & bombMaskが0でなければベースがヒットしているかどうかを確認してください。

これはすべてアセンブリで書かれており、当時はプログラムマスタであった。私はまだ考えて覚えている、 "どうしてそんなに多くのピクセルをすばやく動かすことができますか?"

今日でも同じ方法を使用できますが、それほど詳細なことはほとんどありません。現代のゲームは、短期間で傷つきやすく、多くの画像を持っているだけです。

ヒットボックスやサークルに基づいてダメージカウントを取得して、ダメージ状態、正常、軽微な損傷、重大な損傷、および破壊を示す画像を表示します。簡単に実装できます!ゲームにはいい?まあそれはまったく別の問題です。

1

私はそれが元々どのように行われているのか正確にはわかりませんが、それを機能させる1つの方法は、それぞれ独自の健康価値を持つ多数のブロックで構成されるバリアを持つことです。ブロックに十分なヒットがある場合は、それを削除します。

これは、障壁が徐々に劣化することを可能にするはずです。

編集:明確にするために、それぞれの壁は複数の別々の画像で構成されています(私はそれらが元の平面色であると信じています)。そして、それぞれの画像は砲弾が衝突し、バリアの断面。

+0

、そのための感謝として、1ページ目に表示されます。オリジナルでは、作品が完全に破壊されるまでに2ヒットがかかりました。この作品は、最初にわずかに劣化し、次のヒットで削除されます。私はあなたが最初のヒットでイメージを交換し、2番目に削除すると思います。 – Kosie

+0

ええ、あなたはこれを修正することができました。少し変更したい場合は、周囲の部分に何らかのスプラッシュダメージを加えることさえできます。主要な部分は、障壁を小さなヒットボックスに分割しています。 – Matt

+0

素晴らしい、議論する時間を取ってくれてありがとう:) – Kosie

0

元の宇宙の侵略者には、一度に画面上に3つ以上の侵入者爆弾がありませんでしたので、単純な矩形の衝突は問題ありません。

私がやったやり方は、IDを持つ個々のブロック/ピクセルからベースを作成することでした。爆弾がベースに当たったとき、私は最初のピクセルヒットのIDを、その時点で壊れている逆ループによって取得します。

そのピクセルから、上下左右のピクセル数をおおよそ爆発の形で数え、そのベースピクセルを除去してベースにすき間を残しました。

ベースで撮影しているレーザーキャノンと同じ方法が使用されます。

残念ながら、最大文字数の制限を超えてゲームコードを投稿することはできません。私はCodepenでゲームを持っていますが、私は上記のように大きすぎるいくつかのコードなしでリンクを投稿することはできません!あなたがCodepenに移動し、スペース侵略者のための検索を行う場合

はしかし、それは「スペースインベーダー(台東区)1978」理にかなって

関連する問題