Pygameでパックマン風ゲームを作る②

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Pygameでパックマン風ゲームを作る②

投稿記事 by keito94 » 8年前

Pygameを取り扱っている方のブログの衝突判定の記事を参考にして、
当たり判定を作ってみた。
ブログのように

CODE:

    def x_collision(self):
        width = self.rect.width
        height = self.rect.height

        # 移動先の矩形と座標を求めます。
        newx = self.fpx+self.fpvx
        newrect =Rect(newx,self.fpy,width,height)
        for block in self.blocks:
            collide = newrect.colliderect(block.rect)
            if collide:
                if self.fpvx > 0:
                    self.fpx = block.rect.left - width
                    self.fpvx = 0
                elif self.fpvx  0:
                    self.fpy = block.rect.top - height
                    self.fpvy = 0
                elif self.fpvy < 0:
                    self.fpy = block.rect.bottom
                    self.fpvy = 0
                break
            else:
                self.fpy = newy
が正しいのだが、

CODE:

            else:
                self.fpx = newy
にすると、新しいY座標がX座標に上書きされて移動できなくなるので注意!!
以下の画像は、上記のミスをして実行した場面。
追記:naohiroさんのご指摘に従い、パックマン風ゲームにしました。
添付ファイル
pac2.PNG
pac2.PNG (7.83 KiB) 閲覧数: 484 回
最後に編集したユーザー keito94 on 2017年7月13日(木) 17:28 [ 編集 2 回目 ]

naohiro19
記事: 256
登録日時: 14年前

Re: Pygameでパックマンを作る②

投稿記事 by naohiro19 » 8年前

「パックマン」という名称はバンダイナムコエンターテイメントが商標登録されていますので
自作ゲームのタイトルに使うことはできません。
商標権侵害となります。

ISLe
記事: 2650
登録日時: 14年前

Re: Pygameでパックマン風ゲームを作る②

投稿記事 by ISLe » 8年前

また移動先座標で移動量をもとに判定しているサンプルコードを参考にするんですね。

アバター
usao
記事: 1889
登録日時: 12年前

Re: Pygameでパックマン風ゲームを作る②

投稿記事 by usao » 8年前

というか,「パックマン」であれば,この手の当たり判定は不要だったりはしませんかね.

パックマンの動きの記憶が曖昧ですけど,
マップは「通路」で構成されていて,広い場所を好き勝手に(≒見た目的に画素単位で)動ける感じじゃなかったような記憶.
パックマンは「グラフ上を動く」とでもいうか,
FC時代のDQみたいな「マス単位の移動」に「マスからマスへの移動中に方向反転だけは可能」という要素を付け加えたような.

(パックマン「風」 なので,添付画像のような広大な空間を好き勝手に動き回れるものを作っているのかもしれないけど)


※ここでいう「好き勝手に動く」とは,「任意のタイミングにて移動方向を,直前までの移動方向とは90度異なる方向へと変更できる」ということ.
 対して,前記「FC時代のDQみたいな~」の場合には,90度方向転換できるタイミングは限定されている.
最後に編集したユーザー usao on 2017年7月14日(金) 09:52 [ 編集 1 回目 ]