Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图画出精灵或改变图片派格莱特_Python_Sprite_Pyglet - Fatal编程技术网

Python 试图画出精灵或改变图片派格莱特

Python 试图画出精灵或改变图片派格莱特,python,sprite,pyglet,Python,Sprite,Pyglet,我正试图学习pyglet,并用一个调查问卷练习一些python编码,但我找不到一种方法可以让背景图片被移除或在上面画10秒钟。我是新来的,缺乏很多我需要的知识,谢谢你们的帮助 import pyglet from pyglet.window import Window from pyglet.window import key from pyglet import image import time card1 = False cat_image = pyglet.image.load("ca

我正试图学习pyglet,并用一个调查问卷练习一些python编码,但我找不到一种方法可以让背景图片被移除或在上面画10秒钟。我是新来的,缺乏很多我需要的知识,谢谢你们的帮助

import pyglet
from pyglet.window import Window
from pyglet.window import key
from pyglet import image
import time

card1 = False
cat_image = pyglet.image.load("cat.png")
dog_image = pyglet.image.load("dog.png")
image = pyglet.image.load("backg.png")
background_sprite = pyglet.sprite.Sprite(image)
cat = pyglet.sprite.Sprite(cat_image)
dog = pyglet.sprite.Sprite(dog_image)
window = pyglet.window.Window(638, 404, "Life")
mouse_pos_x = 0
mouse_pos_y = 0
catmeme = pyglet.image.load("catmeme.png")
sprite_catmeme = pyglet.sprite.Sprite(catmeme)

@window.event
def on_draw():
    window.clear()
    background_sprite.draw()
    card_draw1(63, 192, 385, 192)
def card1():
    while time.time() < (time.time() + 10):
        window.clear()
        sprite_catmeme.draw()
@window.event
def card_draw1(x1, y1, x2, y2):
    cat.set_position(x1, y1)
    dog.set_position(x2, y2)
    cat.draw()
    dog.draw()
def card_draw2():
    pass
@window.event
def on_mouse_press(x, y, button, modifiers):
    if x > cat.x and x < (cat.x + cat.width):
        if y > cat.y and y < (cat.y + cat.height):
            card1()
game = True
while game:
    on_draw()
    pyglet.app.run()
导入pyglet 从pyglet.window导入窗口 从pyglet.window导入密钥 从pyglet导入图像 导入时间 card1=假 cat_image=pyglet.image.load(“cat.png”) dog_image=pyglet.image.load(“dog.png”) image=pyglet.image.load(“backg.png”) background\u sprite=pyglet.sprite.sprite(图像) cat=pyglet.sprite.sprite(cat_图像) dog=pyglet.sprite.sprite(dog\u图像) window=pyglet.window.window(638404,“生活”) 鼠标位置x=0 鼠标位置y=0 catmeme=pyglet.image.load(“catmeme.png”) sprite_catmeme=pyglet.sprite.sprite(catmeme) @窗口事件 def on_draw(): window.clear() 背景_sprite.draw() 信用卡提款1(63192385192) def card1(): 而time.time()<(time.time()+10): window.clear() sprite_catmeme.draw() @窗口事件 def卡1(x1、y1、x2、y2): 类别设置位置(x1,y1) 定位爪位置(x2,y2) 猫画() 狗画 def卡_draw2(): 通过 @窗口事件 按鼠标上的def键(x、y、按钮、修改器): 如果x>类别x和x<(类别x+类别宽度): 如果y>y类且y<(y类+高度): card1() 游戏=真实 游戏时: on_draw() pyglet.app.run()文件
做事的顺序和方式有一些缺陷。
我会尽我最大的努力来描述它们,并为您提供一段代码,它可能会更好地满足您的需求

我还认为你对这个问题的描述有点夸张,当你在复杂的问题上寻求帮助时,这是很常见的,你认为你已经接近解决方案,所以你是在寻求你提出的解决方案的帮助,而不是问题

我假设你想显示10秒钟的“闪屏”,这恰好是你的背景?然后在其顶部显示
cat.png
dog.png
,对吗

如果是这样的话,您可能需要在此处进行更改,以使其正常工作:

函数的
draw()

它实际上并没有对屏幕进行太多的更新,只是向图形内存中添加了一些内容。更新屏幕的是您或其他人告诉图形库您已完成向屏幕添加内容,现在是更新所有内容的时候了。
.draw()
'n。因此,循环中最不需要的是
window.flip()
,以便实际显示所绘制的内容

你的东西可能会显示,如果你试图晃动窗口,它会触发场景的重新绘制,因为pyglet的内部机制是如何工作的

如果不调用
.flip()
,则可能永远不会调用
重画()
,这也是Pyglet/GL的内部机制,它告诉图形卡某些内容已更新,我们已完成更新,是时候重画场景了

一个场景

这是最常用于描述用户所看到的内容的词。
我可能会在我的文本中经常提到这一点,因此很高兴知道这是用户看到的,而不是您所看到的
.draw()
'n或已删除的内容,这是图形卡到监视器的最后一次当前渲染

但由于图形缓冲区的工作方式,我们可能已经删除或添加了内容到内存中,而没有实际绘制它。记住这一点

调用
pyglet.app.run()

这本身就是一个永无止境的循环,因此在
游戏中使用它:
循环没有真正的意义,因为
.run()
将“挂起”整个应用程序,您要执行的任何代码都需要在
def on_draw
中,或者在图形代码本身中生成的
事件中

为了更好地理解这一点,请看一下我的代码,多年来我在这里粘贴了几次,这是两个自定义类的基本模型,继承了Pyglet的行为,但允许您设计自己的类,使其行为略有不同

大多数功能都在
on_???
functions下,这几乎总是一个用于捕获的函数。Pyglet有很多内置的,我们将用我们自己的覆盖它们(但名称必须相同)

导入pyglet 从pyglet.gl导入* key=pyglet.window.key 类CustomSprite(pyglet.sprite.sprite): def uuu init uuu(self,纹理文件,x=0,y=0): ##初始化类之前必须将纹理作为图像资源加载:Sprite() self.texture=pyglet.image.load(纹理文件) 超级(自定义sprite,self)。\uuuu init\uuuu(self.texture) self.x=x self.y=y def_牵引(自): self.draw() 类主屏幕(pyglet.window.window): 定义初始化(自): 超级(主屏幕,自我)。\uuuuu初始(800600,全屏=假) self.x,self.y=0,0 self.bg=CustomSprite('bg.jpg') self.sprites={} self.alive=1 def on_牵引(自): self.render() def on_关闭(自身): self.alive=0 def on_键按(自身、符号、修改器): 如果symbol==key.ESCAPE:#[ESC] self.alive=0 elif symbol==key.C: 打印('Rendering cat') self.sprite['cat']=CustomSprite('cat.png',x=10,y=10) elif symbol==键D: self.sprite['dog']=CustomSprite('dog.png',x=100,y=100) def渲染(自): self.clear() self.bg.draw() 对于sprite_name,在self.sprites.items()中选择sprite_obj: 雪碧 self.flip() def运行(自): 当self.alive==1时: self.render()
import pyglet
from pyglet.gl import *

key = pyglet.window.key

class CustomSprite(pyglet.sprite.Sprite):
    def __init__(self, texture_file, x=0, y=0):
        ## Must load the texture as a image resource before initializing class:Sprite()
        self.texture = pyglet.image.load(texture_file)

        super(CustomSprite, self).__init__(self.texture)
        self.x = x
        self.y = y

    def _draw(self):
        self.draw()

class MainScreen(pyglet.window.Window):
    def __init__ (self):
        super(MainScreen, self).__init__(800, 600, fullscreen = False)
        self.x, self.y = 0, 0

        self.bg = CustomSprite('bg.jpg')
        self.sprites = {}
        self.alive = 1

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def on_key_press(self, symbol, modifiers):
        if symbol == key.ESCAPE: # [ESC]
            self.alive = 0
        elif symbol == key.C:
            print('Rendering cat')
            self.sprites['cat'] = CustomSprite('cat.png', x=10, y=10)
        elif symbol == key.D:
            self.sprites['dog'] = CustomSprite('dog.png', x=100, y=100)

    def render(self):
        self.clear()
        self.bg.draw()

        for sprite_name, sprite_obj in self.sprites.items():
            sprite_obj._draw()

        self.flip()

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

            # -----------> This is key <----------
            # This is what replaces pyglet.app.run()
            # but is required for the GUI to not freeze
            #
            event = self.dispatch_events()

x = MainScreen()
x.run()