标签位置,调整背景大小和隐藏标题栏

时间:2018-01-15 22:42:00

标签: python pyglet

我试图更好地理解Pyglet,并且我在上一个问题中使用了Torxed发布的脚本。我开始修改它,直到我达到这一点:

import pyglet, datetime, os
from pyglet.gl import *
from collections import OrderedDict
from time import time
from pathlib import Path

key = pyglet.window.key

class main(pyglet.window.Window):

    #Variable Display
    Fullscreen = False
    CountDisplay = 0
    setDisplay0 = (1024, 576)
    setDisplay1 = (800, 600)
    setDisplay2 = (1024, 768)
    setDisplay3 = (1280, 720)
    setDisplay4 = (1280, 1024)
    setDisplay5 = (1366, 768)
    setDisplay6 = (1920, 1080)

    #Variable Info
    infoHidden = False
    title = "Pokémon Life And Death: Esploratori Del Proprio Destino"
    build = "Versione: 0.0.0"
    keyPrint = "Nessuno"
    MousekeyPrint = "Nessuno"
    infoFullscreen = "Disattivo"
    infoDisplay = "1024, 576"

    def __init__ (self, width=1024, height=576, fullscreen=False, *args, **kwargs):
        super(main, self).__init__(width, height, fullscreen, *args, **kwargs)

        platform = pyglet.window.get_platform()
        display = platform.get_default_display()
        screen = display.get_default_screen()
        self.infoScreen = (screen.width, screen.height)

        self.xDisplay = int(screen.width / 2 - self.width / 2)
        self.yDisplay = int(screen.height / 2 - self.height / 2)
        self.set_location(self.xDisplay, self.yDisplay)

        self.sprites = OrderedDict()
        self.spritesInfo = OrderedDict()

        #Information Hidden
        #Title
        self.spritesInfo["title_label"] = pyglet.text.Label(self.title, x=self.infoPos("x", 0), y=self.infoPos("y", 0))
        #Build Version
        self.spritesInfo["build_label"] = pyglet.text.Label(self.build, x=self.infoPos("x", 0), y=self.infoPos("y", 20))
        #Fullscreen
        self.spritesInfo["fullscreen_label"] = pyglet.text.Label("Fullscreen: " + self.infoFullscreen, x=self.infoPos("x", 0), y=self.infoPos("y", 40))
        #Display
        self.spritesInfo["screen_label"] = pyglet.text.Label("Display: " + self.infoDisplay, x=self.infoPos("x", 0), y=self.infoPos("y", 60))
        #FPS
        self.spritesInfo["fps_label"] = pyglet.text.Label("FPS: 0", x=self.infoPos("x", 0), y=self.infoPos("y", 80))
        self.last_update = time()
        self.fps_count = 0
        #Mouse Position
        self.mouse_x = 0
        self.mouse_y = 0
        self.spritesInfo["mouse_label"] = pyglet.text.Label(("Mouse Position (X,Y): " + str(self.mouse_x) + "," + str(self.mouse_y)), x=self.infoPos("x", 0), y=self.infoPos("y", 100))
        #Player Position
        self.player_x = 0
        self.player_y = 0
        self.spritesInfo["player_label"] = pyglet.text.Label(("Player Position (X,Y): " + str(self.player_x) + "," + str(self.player_y)), x=self.infoPos("x", 0), y=self.infoPos("y", 120))
        #Key Press
        self.keys = OrderedDict()
        self.spritesInfo["key_label"] = pyglet.text.Label(("Key Press: " + self.keyPrint), x=self.infoPos("x", 0), y=self.infoPos("y", 140))
        #Mouse Press
        self.spritesInfo["MouseKey_label"] = pyglet.text.Label(("Mouse Key Press: " + self.MousekeyPrint), x=self.infoPos("x", 0), y=self.infoPos("y", 160))

        self.alive = 1

    def infoPos(self, object, ny):
        posInfo = self.get_size()
        if object is "x":
            elab = 10
        elif object is "y":
            elab = posInfo[1] - 20 - ny
        else:
            elab = 0
        return elab

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_mouse_motion(self, x, y, dx, dy):
        self.mouse_x = x
        self.mouse_y = y

    def on_mouse_release(self, x, y, button, modifiers):
        self.MousekeyPrint = "Nessuno"

    def on_mouse_press(self, x, y, button, modifiers):
        self.MousekeyPrint = str(button)

    def on_mouse_drag(self, x, y, dx, dy, button, modifiers):
        self.drag = True
        print('Dragging mouse at {}x{}'.format(x, y))

    def on_key_release(self, symbol, modifiers):
        self.keyPrint = "Nessuno"
        try:
            del self.keys[symbol]
        except:
            pass

    def on_key_press(self, symbol, modifiers):
        if symbol == key.ESCAPE:
            self.alive = 0
        if symbol == key.F2:
            datanow = datetime.datetime.now()
            if not Path("Screenshot").is_dir():
                os.makedirs("Screenshot")
            pyglet.image.get_buffer_manager().get_color_buffer().save("Screenshot/"+str(datanow.day)+"-"+str(datanow.month)+"-"+str(datanow.year)+"_"+str(datanow.hour)+"."+str(datanow.minute)+"."+str(datanow.second)+".png")
        if symbol == key.F3:
            if self.infoHidden:
                self.infoHidden = False
            else:
                self.infoHidden = True
        if symbol == key.F10:
            self.CountDisplay += 1
            if self.CountDisplay == 1:
                size = self.setDisplay1
            elif self.CountDisplay == 2:
                size = self.setDisplay2
            elif self.CountDisplay == 3:
                size = self.setDisplay3
            elif self.CountDisplay == 4:
                size = self.setDisplay4
            elif self.CountDisplay == 5:
                size = self.setDisplay5
            elif self.CountDisplay == 6:
                size = self.setDisplay6
            else:
                self.CountDisplay = 0
                size = self.setDisplay0

            self.set_size(size[0], size[1])
            self.infoDisplay = str(size[0]) + "," + str(size[1])
            pos = (int(self.infoScreen[0] / 2 - size[0] / 2), int(self.infoScreen[1] / 2 - size[1] / 2))
            self.set_location(pos[0], pos[1])
        if symbol == key.F11:
            if self.Fullscreen:
                self.Fullscreen = False
                self.set_fullscreen(False)
                self.infoFullscreen = "Disattivo"
            else:
                self.Fullscreen = True
                self.set_fullscreen(True)
                self.infoFullscreen = "Attivo"

        self.keyPrint = str(symbol)
        self.keys[symbol] = True

    def pre_render(self):
        pass

    def render(self):
        self.clear()

        #FPS
        self.fps_count += 1
        if time() - self.last_update > 1:
            self.spritesInfo["fps_label"].text = "FPS: " + str(self.fps_count)
            self.fps_count = 0
            self.last_update = time()
        #Mouse Position
        self.spritesInfo["mouse_label"].text = "Mouse Position (X,Y): " + str(self.mouse_x) + "," + str(self.mouse_y)
        #Player Position
        self.spritesInfo["player_label"].text = "Player Position (X,Y): " + str(self.player_x) + "," + str(self.player_y)
        #Key Press
        self.spritesInfo["key_label"].text = "Key Press: " + self.keyPrint
        #Mouse Press
        self.spritesInfo["MouseKey_label"].text = "Mouse Key Press: " + self.MousekeyPrint
        #Fullscreen
        self.spritesInfo["fullscreen_label"].text = "Fullscreen: " + self.infoFullscreen
        #Display
        self.spritesInfo["screen_label"].text = "Display: " + self.infoDisplay

        #self.bg.draw()
        self.pre_render()

        for sprite in self.sprites:
            self.sprites[sprite].draw()

        if self.infoHidden:
            for spriteInfo in self.spritesInfo:
                self.spritesInfo[spriteInfo].draw()

        self.flip()

    def run(self):
        while self.alive == 1:
            self.render()

            event = self.dispatch_events()

if __name__ == '__main__':
    x = main()
    x.run()

但是现在我发现自己处于一个无法单独进行Pyglet的地方。

我无法理解如何更改"标签的坐标"每次窗口大小改变时。

我希望能够将图像用作背景并使其适应窗口的大小(基本图像是1920x1080,即最大窗口大小)。问题是我在这个问题上找不到多少。我声明我正在研究的是2D,而不是3D。我在另一个问题中找到了一个可能的解决方案,Torxed总是回答图像的大小调整,但在此之前的一些测试中,在调整它之后,它没有用。所以我不知道在哪里真诚地敲我的脑袋。在Pygame中,它很容易使用" pygame.transform.scale",但在Pyglet中我不知道。

最后,我在Pyglet wiki和网络上都试过了,但我没有找到任何东西。如何删除或隐藏窗口标题栏?在Pygame中,你可以使用旗帜。是否可以使用Pyglet执行此操作?

编辑:
我忘了问另一个问题。当我按下键盘或鼠标上的某个键时,用F3显示的信息将打印在相应的键编号中。有没有办法用按钮名称替换号码?例如,97替换为" A"?显然,我的意思是,如果有一种方法,而不必列出所有的键,并把" if"每个人的声明。

EDIT2:
好像发布了脚本,def on_resize (self, width, height)部分不太喜欢它。让我解释一下,如果它本身功能正常。问题是,如果我插入它,标签,一旦按下F3,就不会出现。我尝试在几个地方使用print测试它,似乎唯一没有执行的指令是self.spritesInfo [spriteInfo] .draw ()

0 个答案:

没有答案