2017-01-10 5 views
1

Я пытаюсь использовать pygame и pygame_sdl2 для создания игры для android, а затем использовать pgs4a для ее компиляции в apk.Pygame - действительно медленные блиские изображения на android

Вначале я использовал .fill(), и он работал нормально, но когда я попытался разжечь изображение в качестве фона, моя программа стала очень ломающейся на моем телефоне. Все работает отлично на ПК.

Вот мой код.

Это просто показывает ваш палец и подсчитывает, сколько раз вы касались экрана.

import pygame_sdl2 
pygame_sdl2.import_as_pygame() 

import pygame 
import os 

def main(): 
    pygame.init() 
    screen = pygame.display.set_mode((360,640)) 
    sleeping = False 
    running = True 
    clock = pygame.time.Clock() 
    font = pygame.font.Font("data/DejaVuSans.ttf", 48) 
    background = pygame.image.load("image/background.jpg").convert() 
    background = pygame.transform.scale(background, (screen.get_width(),screen.get_width())) 
    press = 0 

    while running: 
     clock.tick(60) 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       running = False 
      elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 
       running = False 
      elif event.type == pygame.KEYDOWN and event.key == pygame.K_AC_BACK: 
       running = False 

      elif event.type == pygame.APP_WILLENTERBACKGROUND: 
       sleeping = True 
      elif event.type == pygame.APP_DIDENTERFOREGROUND: 
       sleeping = False 
       screen = pygame.display.set_mode((360,640)) 

      elif event.type == pygame.FINGERDOWN: 
       press += 1 

     if not sleeping: 
      x, y = pygame.mouse.get_pos() 
      screen.blit(background, (0.5*(screen.get_width()-background.get_width()),0.5*(screen.get_height()-background.get_height()))) 
      text = font.render(str((x,y,press)), True, (255,255,255)) 
      screen.blit(text, (0.5*(screen.get_width()-text.get_width()),0.5*(screen.get_height()-text.get_height()))) 
      pygame.display.flip() 

if __name__ == "__main__": 
    main() 

Я видел, как многие люди делают свои игры через pygame и, кажется, работают отлично. Что-то не так с моим кодом или чем-то, что я должен сделать?

ответ

1

pygame_sdl2 на Android имеет другое поведение!

screen = pygame.display.set_mode((360,640)) 

В Windows эта линия создает окно размером 360x640.

на Android, окно всегда полноэкранное с родным разрешением устройства. Например: 1080x1920.

Таким образом, blitting on Windows требует 360x640 = 230400 пикселей для рисования.

На Android: 1080x1920 = 2073600 пикселей для рисования, что в 9 раз больше.

У меня такая же проблема! Я спросил девцов о github. Но все еще не удовлетворительное решение. https://github.com/renpy/pygame_sdl2/issues/69