首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pygame_sdl2 - app在pygame.mouse.get_pressed()期间在手机上崩溃

pygame_sdl2 - app在pygame.mouse.get_pressed()期间在手机上崩溃
EN

Stack Overflow用户
提问于 2018-01-23 11:56:50
回答 1查看 403关注 0票数 1

我正在用pygamepygame_sdl2为安卓开发一个游戏,为部署开发rapt

目前,该游戏正处于发展的第一阶段。

我在屏幕的左下角画了一个joypad,当鼠标在joypad按钮的坐标下被按下时,一个字符会根据按钮被移动。鼠标事件作为触摸事件使用为在这个(工作)示例中

问题是:游戏在我的笔记本电脑上工作(我使用的是Ubuntu),而不是在我的移动设备上。当我开始游戏时,一切都如我所料,但只要我一触摸屏幕(不管它是在按钮上还是在其他地方),应用程序就会出现在后台。

我的游戏是在一个公共的github如果你想看到整个代码(所有相关的东西都在main.py文件中)。

我认为错误是由对pygame.mouse.get_pressed()的调用触发的。

下面是一些相关的代码,希望这些代码有助于理解问题。

Joypad类(btn_pressed方法)

代码语言:javascript
复制
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'

字符类(移动方法)

代码语言:javascript
复制
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

主回路

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 12:06:07

正如评论中所解释的,我的主循环中有一个问题。

我只需将代码更改为:

代码语言:javascript
复制
if not sleeping:
    if not sleeping:
        hero.move(joypad.btn_pressed(ev))

至:

代码语言:javascript
复制
if not sleeping:
    if ev.type == pygame.MOUSEMOTION or ev.type == pygame.MOUSEBUTTONUP:
        hero.move(joypad.btn_pressed(ev))

这样,"Joypad类(btn_pressed方法)“在事件发生时调用x, y = mouse_event.pos时不会出现错误(例如)退出,因此不返回任何坐标(还请参阅从游戏事件文档页面获取的图像)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48401162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档