

{"id":136,"date":"2021-06-29T00:07:23","date_gmt":"2021-06-28T16:07:23","guid":{"rendered":"https:\/\/www.52dixiaowo.com\/python\/?p=136"},"modified":"2021-06-29T00:45:37","modified_gmt":"2021-06-28T16:45:37","slug":"pygame-%e9%a3%9e%e6%9c%ba%e5%a4%a7%e6%88%98-%e8%83%8c%e6%99%af%e6%bb%9a%e5%8a%a8","status":"publish","type":"post","link":"https:\/\/www.52dixiaowo.com\/python\/post-136.html","title":{"rendered":"pygame \u98de\u673a\u5927\u6218 \u80cc\u666f\u6eda\u52a8"},"content":{"rendered":"\n<p>\u5728\u98de\u673a\u5927\u6218\u4e2d, \u80cc\u666f\u56fe\u50cf\u9ed8\u8ba4\u662f\u9759\u6b62\u7684, \u5728\u98de\u673a\u98de\u884c\u65f6, \u9700\u8981\u6e38\u620f\u80cc\u666f\u7684\u5411\u4e0b\u6eda\u52a8<\/p>\n\n\n\n<p>\u98de\u673a\u5411\u4e0a\u98de, \u80cc\u666f\u5f80\u4e0b\u6eda\u52a8, \u8fd9\u6837\u5c31\u663e\u5f97\u66f4\u5408\u7406<\/p>\n\n\n\n<h2>\u7406\u89e3\u601d\u8def<\/h2>\n\n\n\n<p>\u4f7f\u75282\u5f20\u80cc\u666f\u56fe\u7247, \u7b2c\u4e00\u5f20\u6b63\u5e38, \u7b2c\u4e8c\u5f20\u5728\u7b2c\u4e00\u5f20\u7684\u9876\u90e8<\/p>\n\n\n\n<p>\u4e24\u5f20\u80cc\u666f\u4e00\u8d77\u5411\u4e0b\u6eda\u52a8, \u9876\u90e8\u80cc\u666f\u53ef\u4ee5\u5f25\u8865\u7b2c\u4e00\u5f20\u5411\u4e0b\u6eda\u52a8\u65f6\u7684\u7a7a\u7f3a<\/p>\n\n\n\n<p>\u5f53\u7b2c\u4e00\u5f20\u80cc\u666f\u56fe\u5230\u8fbe\u5e95\u90e8, \u5c06\u8be5\u56fe\u7247\u8bbe\u7f6e\u5230\u9876\u90e8, \u5373\u53ef\u5b9e\u73b0\u6eda\u52a8\u4ea4\u66ff<\/p>\n\n\n\n<h2>\u8bbe\u8ba1\u80cc\u666f\u7c7b<\/h2>\n\n\n\n<p>\u5728plan_sprites\u6a21\u5757\u4e2d\u521b\u5efa Background \u7c7b, \u7ee7\u627fGameSprite\u7c7b, \u4ee3\u7801\u5982\u4e0b<\/p>\n\n\n\n<p>( \u524d\u4e00\u8282\u7684main.py\u4e2d\u7684\u5e38\u91cf, \u6539\u653e\u5728plan_sprites\u6a21\u5757\u4e2d)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Background(GameSprite):\n    \"\"\"\u6e38\u620f\u80cc\u666f\u7cbe\u7075\"\"\"\n\n    def __init__(self, is_alt=False):\n\n        # 1. \u8c03\u7528\u7236\u7c7b\u65b9\u6cd5\u5b9e\u73b0\u7cbe\u7075\u7684\u521b\u5efa(image\/rect\/speed)\n        super().__init__(\".\/images\/background.png\")\n\n        # 2. \u5224\u65ad\u662f\u5426\u662f\u4ea4\u66ff\u56fe\u50cf\uff0c\u5982\u679c\u662f\uff0c\u9700\u8981\u8bbe\u7f6e\u521d\u59cb\u4f4d\u7f6e\n        if is_alt:\n            self.rect.y = -self.rect.height\n\n    def update(self):\n\n        # 1. \u8c03\u7528\u7236\u7c7b\u7684\u65b9\u6cd5\u5b9e\u73b0\n        super().update()\n\n        # 2. \u5224\u65ad\u662f\u5426\u79fb\u51fa\u5c4f\u5e55\uff0c\u5982\u679c\u79fb\u51fa\u5c4f\u5e55\uff0c\u5c06\u56fe\u50cf\u8bbe\u7f6e\u5230\u5c4f\u5e55\u7684\u4e0a\u65b9\n        if self.rect.y >= SCREEN_RECT.height:\n            self.rect.y = -self.rect.height<\/code><\/pre>\n\n\n\n<p>\u5728main.py\u4e2d, \u5728PlangeGame\u7c7b\u4e2d, \u627e\u5230\u521b\u5efa\u7cbe\u7075\u65b9\u6cd5__create_sprites, \u521b\u5efa\u80cc\u666f\u7c7b, \u4ee5\u53ca\u7cbe\u7075\u7ec4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        # \u521b\u5efa\u80cc\u666f\u7cbe\u7075\u548c\u7cbe\u7075\u7ec4\n        bg1 = Background()\n        bg2 = Background(True)\n\n        self.back_group = pg.sprite.Group(bg1, bg2)<\/code><\/pre>\n\n\n\n<p>\u5728\u66f4\u65b0\u7cbe\u7075\u65b9\u6cd5__update_collide\u8c03\u7528\u66f4\u65b0\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        self.back_group.update()\n        self.back_group.draw(self.screen)<\/code><\/pre>\n\n\n\n<h2>\u4ee3\u7801\u5c0f\u7ed3<\/h2>\n\n\n\n<p>\u6b64\u7ae0\u8282\u4e2d,  plan_sprites\u6a21\u5757\u65b0\u589e\u4e86Background\u7c7b, (\u5e38\u91cf\u8fc1\u79fb)\u4ee3\u7801\u53c2\u8003\u524d\u9762<\/p>\n\n\n\n<p>\u6b64\u5916, main.py\u8fdb\u884c\u4e86\u4e00\u4e9b\u5176\u4ed6\u4fee\u6539, \u6539\u52a8\u5e45\u5ea6\u8f83\u5927, \u5b8c\u6574\u4ee3\u7801\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import pygame as pg  # \u5bfc\u5165pygame\u6a21\u5757\nfrom plane_sprites import *\n\n\nclass PlaneGame(object):\n    \"\"\"\u98de\u673a\u5927\u6218\u4e3b\u7a0b\u5e8f\"\"\"\n\n    def __init__(self):\n        print(\"\u6e38\u620f\u521d\u59cb\u5316\")\n        pg.init()\n        # 1. \u521b\u5efa\u6e38\u620f\u7684\u7a97\u53e3\n        self.screen = pg.display.set_mode(SCREEN_RECT.size)\n        # 2. \u521b\u5efa\u6e38\u620f\u7684\u65f6\u949f\n        self.clock = pg.time.Clock()\n        # 3. \u8c03\u7528\u79c1\u6709\u65b9\u6cd5\uff0c\u7cbe\u7075\u548c\u7cbe\u7075\u7ec4\u7684\u521b\u5efa\n        self.__create_sprites()\n\n    def __create_sprites(self):  # \u521b\u5efa\u7cbe\u7075\u7ec4\n        # \u521b\u5efa\u80cc\u666f\u7cbe\u7075\u548c\u7cbe\u7075\u7ec4\n        bg1 = Background()\n        bg2 = Background(True)\n\n        self.back_group = pg.sprite.Group(bg1, bg2)\n\n    def start_game(self):\n        print(\"\u6e38\u620f\u5f00\u59cb...\")\n\n        while True:\n            # 1. \u8bbe\u7f6e\u5237\u65b0\u5e27\u7387\n            self.clock.tick(FRAME_PER_SEC)\n            # 2. \u4e8b\u4ef6\u76d1\u542c\n            self.__event_handler()\n            # 3. \u78b0\u649e\u68c0\u6d4b\n            self.__check_collide()\n            # 4. \u66f4\u65b0\/\u7ed8\u5236\u7cbe\u7075\u7ec4\n            self.__update_sprites()\n            # 5. \u66f4\u65b0\u663e\u793a\n            pg.display.update()\n\n    def __event_handler(self):\n\n        for event in pg.event.get():\n\n            # \u5224\u65ad\u662f\u5426\u9000\u51fa\u6e38\u620f\n            if event.type == pg.QUIT:\n                PlaneGame.__game_over()\n\n    def __check_collide(self):  # \u78b0\u649e\u68c0\u6d4b\n        pass\n\n    def __update_sprites(self):\n\n        self.back_group.update()\n        self.back_group.draw(self.screen)\n\n    @staticmethod\n    def __game_over():\n        print(\"\u6e38\u620f\u7ed3\u675f\")\n\n        pg.quit()\n        exit()\n\nif __name__==\"__main__\":\n\n    # \u521b\u5efa\u6e38\u620f\u5bf9\u8c61\n    game = PlaneGame()\n    # \u5f00\u59cb\u6e38\u620f\n    game.start_game()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u98de\u673a\u5927\u6218\u4e2d, \u80cc\u666f\u56fe\u50cf\u9ed8\u8ba4\u662f\u9759\u6b62\u7684, \u5728\u98de\u673a\u98de\u884c\u65f6, \u9700\u8981\u6e38\u620f\u80cc\u666f\u7684\u5411\u4e0b\u6eda\u52a8 \u98de\u673a\u5411\u4e0a\u98de, \u80cc\u666f\u5f80\u4e0b\u6eda\u52a8, &hellip; <a href=\"https:\/\/www.52dixiaowo.com\/python\/post-136.html\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb <span class=\"screen-reader-text\">pygame \u98de\u673a\u5927\u6218 \u80cc\u666f\u6eda\u52a8<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[],"_links":{"self":[{"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/posts\/136"}],"collection":[{"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":0,"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52dixiaowo.com\/python\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}