<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                 通過之前的準備,已經成功加載了程序資源并使得程序能夠順利運行,接下來開始編寫我方小飛機的模塊。在工程目錄下創建一個名為myplane.py的文件,導入pygame模塊(注意文件編碼問題)   1、精靈   Pygame中所有移動對象都可看做是一個精靈(sprite),精靈之間能夠進行相互的交互通信,例如碰撞檢測等等,對于pygame模塊中精靈的介紹網上有很多資源,例如[《Pygame之精靈》](http://www.cnblogs.com/xiaowuyi/archive/2012/06/26/2563990.html "Pygame之精靈")在這里我方飛機就是一個精靈對象,因此其類定義應繼承于pygame的精靈類: ~~~ class MyPlane(pygame.sprite.Sprite): ~~~   2、myplane的初始化   游戲運行的第一步就是生成我方飛機。我方飛機在生成時需要給定一些具體參數,如飛機的形狀、飛機的生成位置,這些都屬于myplane類的成員變量(Python是一門面向對象的變成語言)。Python對成員變量的初始化都是在__init__(self)函數中完成的,類似于C++語言中的構造函數,其中self則形如一個顯式的this指針,代表當前類的一個抽象對象。init()函數的具體形式如下: ~~~ def __init__(self, bg_size): pygame.sprite.Sprite.__init__(self) self.image1 = pygame.image.load("image/hero1.png") # 加載飛機圖片1 self.rect = self.image1.get_rect() # 得到當前我方飛機的位置 self.width, self.height = bg_size[0], bg_size[1] # 本地化背景圖片的尺寸 self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60) # 定義飛機初始化位置,底部預留60像素 self.speed = 10 # 設置飛機移動速度 ~~~   首先在初始化時需要先調用基類(pygame.sprite.Sprite)的init()函數。注意由于在確定飛機的初始化位置時需要知道當前背景的尺寸,因此通過形參bg_size將當前背景尺寸傳進來(為了方便,轉換成width和height兩個變量),然后是加載我方飛機的圖片,并通過image的成員函數get_rect()得到我方飛機的圖片尺寸。在指定飛機位置時,只需要對飛機這個精靈對象的rect屬性進行設置,rect有許多有趣的屬性(center、topmid等),在此只需指定其left(左邊框坐標)和top(頂部邊框坐標)來實現圖片位置的定位,注意需要在底部預留一段空白區域(此處為60個像素)。最后,指定我方飛機的移動速度,這里暫時設置為10,稍后用到。   3、定義我方飛機移動函數   在對我方飛機完成初始化之后,需要定義飛機的移動操作,通過WASD或者上下左右鍵實現對飛機的控制。以向上移動(move_up()函數)為例,代碼如下: ~~~ def move_up(self): # 飛機向上移動的操作函數,其余移動函數方法類似 if self.rect.top > 0: # 如果飛機尚未移動出背景區域 self.rect.top -= self.speed else: # 若即將移動出背景區域,則及時糾正為背景邊緣位置 self.rect.top = 0 ~~~   對飛機的移動是通過將對應邊框坐標加減speed來完成的,例如向上移動的話就是self.rect.top - self.speed,注意此處需要對飛機當前的位置進行越界檢測,如果此時self.rect.to<0了,即說明飛機已經超出圖像的上界,即將top值置為零,即如論在如何向上移動,飛機都只停留在北京的上邊緣。其余三個方向的移動函數原理類似,這里不再贅述: ~~~ def move_down(self): if self.rect.bottom < self.height - 60: self.rect.top += self.speed else: self.rect.bottom = self.height - 60 def move_left(self): if self.rect.left > 0: self.rect.left -= self.speed else: self.rect.left = 0 def move_right(self): if self.rect.right < self.width: self.rect.right += self.speed else: self.rect.right = self.width ~~~   4、在主函數mian中實例化我方飛機   在初步編寫好我方飛機模塊myplane.py之后,需要在主程序中進行實例化,以顯示我方靈活的小飛機。首先在主程序中加載我方飛機模塊: ~~~ import myplane ~~~   然后在mian()函數中完成飛機的實例化操作: ~~~ me = myplane.MyPlane(bg_size) # 生成我方飛機 ~~~   強調由于整個程序運行只需要進行一次實例化,因此應將此操作放在main()函數中的whlie循環之外。在實例化完成后,需要將我方飛機繪制到屏幕上進行顯示: ~~~ screen.blit(me.image1, me.rect) ~~~   注意由于飛機是實時移動的,需要在每幀圖像中都對飛機進行重新繪制,因此繪制飛機的blit()操作應該寫在main()函數的while循環之內   5、檢測用戶按鍵消息并控制飛機移動   在控制飛機移動時需要響應用戶的鼠標鍵盤事件。這里介紹Pygame中兩種事件響應機制,一是形如“for event in pygame.event.get():”的形式,只需要驗證“event.type”的鍵值即可得到當前用戶發出的事件類型,這種消息處理機制適合處理偶然發生的事件,如用戶的暫停操作、關閉操作等。另外一種則是下面將要用到的“pygame.key.get_pressed()”,這種形式下會將指定類型的用戶操作保存為一個列表,只需判斷列表中對應時間消息的標志位的真假即可判斷某類時間是否發生,適合處理頻繁出現的事件操作(如鍵盤的方向控制事件),詳情如下: ~~~ key_pressed = pygame.key.get_pressed() # 獲得用戶所有的鍵盤輸入序列 if key_pressed[K_w] or key_pressed[K_UP]: # 如果用戶通過鍵盤發出“向上”的指令,其他類似 me.move_up() if key_pressed[K_s] or key_pressed[K_DOWN]: me.move_down() if key_pressed[K_a] or key_pressed[K_LEFT]: me.move_left() if key_pressed[K_d] or key_pressed[K_RIGHT]: me.move_right() ~~~   當然,這些操作應該放置在while循環內部,因為這是一個實時檢測實時刷新的過程。到此我們的程序的基本框架就完成了,循環播放背景音樂,小飛機能夠靈活控制移動(不會越界),但我方小飛機還不會噴氣、不會發生子彈,這些功能我們在下一篇博文中再介紹吧。 ?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看