簡體   English   中英

pygame_sdl2-應用在pygame.mouse.get_pressed()期間在移動設備上崩潰

[英]pygame_sdl2 - app is crashing on mobile during pygame.mouse.get_pressed()

我開發的Android游戲pygamepygame_sdl2 ,並rapt的部署。

目前,該游戲還處於開發的第一階段。

我在屏幕的左下方繪制了一個游戲手柄,然后,當在游戲手柄的按鈕坐標中按下鼠標時,將根據按鈕的方向移動一個字符。 鼠標事件用作此(工作)示例中的觸摸事件。

問題是:游戲可以在我的筆記本電腦上運行(我正在使用Ubuntu),但不能在移動設備上運行。 當我開始游戲時,一切都會按預期顯示,但是一旦我觸摸屏幕(無論它在按鈕上還是其他地方),該應用程序就會在后台運行。

如果您想查看整個代碼,則我的游戲在公共github存儲庫中(所有相關內容都在main.py文件中)。

我認為錯誤是由pygame.mouse.get_pressed()的調用觸發的。

這是一些相關的代碼,希望可以幫助您理解問題。

Joypad類(btn_pressed方法)

def btn_pressed(self, mouse_event):
    # check if left mouse is being pressed
    if pygame.mouse.get_pressed()[0]:
        x, y  = mouse_event.pos
        if self.btn_up.rect.collidepoint(x, y):
            return 'UP'
        elif self.btn_down.rect.collidepoint(x, y):
            return 'DOWN'
        elif self.btn_left.rect.collidepoint(x, y):
            return 'LEFT'
        elif self.btn_right.rect.collidepoint(x, y):
            return 'RIGHT'

角色類(移動方法)

def move(self, joypad_direction):
    """
    move the character
    to be used along with Joypad.btn_pressed returns
    ('UP', 'DOWN' 'LEFT', 'RIGHT')
    """

    self.dx = 0
    self.dy = 0

    # check for horizontal move
    if joypad_direction == 'LEFT':
        self.dx = -self.speed
        self.rect.move_ip(-self.speed, 0)
    if joypad_direction == 'RIGHT':
        self.dx = +self.speed
        self.rect.move_ip(self.speed, 0)

    self.dx = 0

    # check for vertical move
    if joypad_direction == 'UP':
        self.dy = -self.speed
        self.rect.move_ip(0, -self.speed)
    if joypad_direction == 'DOWN':
        self.dy = +self.speed
        self.rect.move_ip(0, self.speed)
        self.dy = 0

主循環

while True:

    ev = pygame.event.wait()

    # If not sleeping, draw the screen.
    if not sleeping:
        hero.move(joypad.btn_pressed(ev))
        screen.fill((0, 0, 0, 255))

        joypad.buttons.draw(screen)

        if x is not None:
            screen.blit(hero.image, (x, y))

        pygame.display.flip()

如評論中所述,我的主循環中存在一個問題。

我只需要更改以下代碼即可:

if not sleeping:
    if not sleeping:
        hero.move(joypad.btn_pressed(ev))

至:

if not sleeping:
    if ev.type == pygame.MOUSEMOTION or ev.type == pygame.MOUSEBUTTONUP:
        hero.move(joypad.btn_pressed(ev))

這樣,當事件為(例如)QUIT時,調用x, y = mouse_event.pos時,“ Joypad類(btn_pressed方法)”不會出錯,因此不返回任何坐標(另請參見以下來自pygame事件文檔的圖像)頁 )。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM