У меня есть этот код, который работает как брелок на моей Linux машине (импорт пропущен):
class Background(Widget):
def __init__(self, source):
super(Background, self).__init__()
self.image = Sprite(source=source)
self.add_widget(self.image)
self.size = self.image.size
self.image_copy = Sprite(source=source, x=self.width)
self.add_widget(self.image_copy)
class Sprite(Image):
def __init__(self, **kwargs):
super(Sprite, self).__init__(**kwargs)
self.size = self.texture_size
class Game(Widget):
def __init__(self):
super(Game, self).__init__()
self.background = Background(
source='assets/images/bg.jpg')
self.size = self.background.size
class TrackerWarsApp(App):
def build(self):
game = Game()
Window.size = game.size
return game
Это дает мне фон, приятно растянутый на ноутбуке, но когда я пытаюсь играть в игру в Android фоновое изображение телефона уменьшено.
Как мне устранить эту проблему?
Рекомендуемое изменение:
class Background(Widget):
def __init__(self, source):
super(Background, self).__init__()
self.image = Sprite(source=source)
self.image.allow_stretch = True # <==
self.add_widget(self.image)
self.size = self.image.size
self.image_copy = Sprite(source=source, x=self.width)
self.add_widget(self.image_copy)
другое редактирование :
class Background(Widget):
def __init__(self, source):
super(Background, self).__init__()
self.image = Sprite(
source=source, allow_stretch=True)
self.add_widget(self.image)
self.size = self.image.size
self.image_copy = Sprite(
source=source, allow_stretch=True, x=self.width)
self.add_widget(self.image_copy)
class Sprite(Image):
def __init__(self, **kwargs):
super(Sprite, self).__init__(**kwargs)
self.size = self.texture_size
x, y = dp(self.size[0]), dp(self.size[1])
self.size = (x, y)
self.size_hint = (None, None)
class Game(Widget):
def __init__(self):
super(Game, self).__init__()
self.background = Background(
source='assets/images/bg.jpg')
self.size = self.background.size
self.add_widget(self.background)
class TrackerWarsApp(App):
def build(self):
game = Game()
Window.size = game.size
self.icon = 'assets/images/logo.png'
return game
Здесь я пытаюсь преобразовать размер всех спрайтов (включая фоновое изображение) в независимые от пикселей значения. У меня перегруженный фон.