首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python带电线调整屏幕尺寸

Python带电线调整屏幕尺寸
EN

Stack Overflow用户
提问于 2018-06-01 20:14:21
回答 2查看 322关注 0票数 8

我正在尝试创建一个游戏,其中有多个层次的直播。在每个级别上,屏幕都需要不同的大小,所以要么我可以创建一个新屏幕,要么我可以调整它的大小。当我尝试一个新的屏幕时,像这样(mcve):

代码语言:javascript
复制
from livewires import games
games.init(screen_width = 500, screen_height=100, fps = 50)
#dosomething
games.screen.quit()
games.init(screen_width = 100, screen_height=500, fps = 50)    
games.screen.mainloop()

我知道错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Fred\Desktop\game\main.py", line 6, in <module>
    games.screen.mainloop()
  File "C:\Users\Fred\Desktop\game\livewires\games.py", line 308, in mainloop
    object._tick()
  File "C:\Users\Fred\Desktop\game\livewires\games.py", line 503, in _tick
    self.tick()
  File "C:\Users\Fred\Desktop\game\livewires\games.py", line 776, in tick
    self._after_death()
  File "C:\Users\Fred\Desktop\game\main.py", line 5, in <module>
    games.init(screen_width = 100, screen_height=500, fps = 50)
  File "C:\Users\Fred\Desktop\game\livewires\games.py", line 884, in init
    screen = Screen(screen_width, screen_height, fps)
  File "C:\Users\Fred\Desktop\game\livewires\games.py", line 159, in __init__
    raise GamesError("Cannot have more than on Screen object")

livewires.games.GamesError: Cannot have more than on Screen object

无法设置games.screen.widthheight (您只能获得它们),所以我不能这样做,当我将livewires.games中的add行更改为将屏幕计数重置为0时,我将得到一个错误。

有没有人知道如何调整屏幕的大小,或者破坏和重建现场直播的屏幕?

注:我使用的是迈克尔道森编辑的版本。下载游戏和生活电线使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-16 15:20:54

有一种方法可以探索,方法是从pygame调用方法display.set_mode,比如在Screen类构造函数中(从您提供的包中调用game.py中的1.165)。

代码语言:javascript
复制
games.init(screen_width = 500, screen_height=100, fps = 50)

#[...] level stuffs...

games.screen._width = 100  # this setup the width property directly in the screen
games.screen._height = 500 # this setup the height property 
games.screen._display = pygame.display.set_mode((100, 500)) # this update the display

此解决方案的一个缺点是,如果在屏幕更改期间保留一些活的精灵,它们将无法在显示时正确地更新擦除方法,这可能会在绘制过程中留下一些行。为了避免这种情况,您可以调用games.screen.clear(),或者如果需要进行选择性清理,可以使用一个overriden Sprite类,该类可以通过调用screen.blit_and_dirty来处理正确的方法。

代码语言:javascript
复制
class MySprite(games.Sprite):
    def __init__(self, screen, *args, **kwargs):
        self.screen = screen
        super().__init__(*args, **kwargs)

    def _erase(self):
        """
        This method overrides the class method by using blit_and_dirty instead of blit_background
        """
        self.screen.blit_and_dirty(self.screen._background, self._rect)

要使用这个类,只需继承它,并添加屏幕参数:

代码语言:javascript
复制
class Ball(MySprite):
    def __init__(self, screen):
        super().__init__(screen, games.load_image('ball.png'), x=40, y=40, dx=2, dy=2)

    def update(self): 
        if self.left<=0 or self.right>=self.screen.get_width():
            self.dx*=-1

        if self.top<=0 or self.bottom>=self.screen.get_height():
            self.dy*=-1

您可以声明如下所示的实例:

代码语言:javascript
复制
games.init(screen_width = 500, screen_height=100, fps = 50)
games.screen.add(Ball(games.screen) )
...
票数 3
EN

Stack Overflow用户

发布于 2018-06-09 17:56:21

你所需要做的就是打电话:

代码语言:javascript
复制
    games.screen.quit()

这将关闭屏幕,然后调用games.init()函数重新创建具有新大小的屏幕。您可能想要创建一个单独的值,在每次通过一个级别时都会增加。

代码语言:javascript
复制
    height = (original value) + (level * increase)
    width = (original value) + (level * increase)
    games.init(screen_height = height, screen.width = width, fps = 50)

或者别的什么。

希望这能有所帮助。

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

https://stackoverflow.com/questions/50650456

复制
相关文章

相似问题

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