标签: blit

有没有办法"清除"表面?

有什么方法可以清除任何已经被打开的表面?

python pygame blit geometry-surface

6
推荐指数
3
解决办法
2万
查看次数

如何删除/替换pygame中的文本

我是pygame的新手,我打了我的第一个树桩,我找不到答案..

blitting文本后,然后更改同一个变量的字符串,游戏而不是用新的替换原始文本,重叠两个文本..?

text pygame blit

6
推荐指数
1
解决办法
1万
查看次数

glBlitFramebuffer无效操作

我一直在搞乱框架缓冲区并渲染到纹理,我遇到了blit它们的需要.在某些机器上,我GL_INVALID_OPERATIONglBlitFramebuffer通话结束后立即得到了一个.绑定到帧缓冲区的每个纹理都以完全相同的方式设置,所有相同的大小和参数.此外,当我尝试将一个完整的纹理(先前成功渲染到)另一个帧缓冲区blit时,只有要写入的目标"矩形"小于要读取的矩形(例如,当我想将其渲染到四分之一时屏幕),它也抛出一个GL_INVALID_OPERATION.

编辑: 实际上它总是抛出错误,每当矩形读取和绘制具有不同的大小,所以我不能blit到不同大小的纹理,或相同的大小,但不同大小的"渲染到"区域. ..?

每次我对手动生成的帧缓冲区进行blit时都会检查状态,glCheckFramebufferStatus并且它总是返回GL_FRAMEBUFFER_COMPLETE.

-BIGGEST SNIP EVER-,请参阅下面的更短'源代码',显然有几个C++错误而且不完整,但它仅适用于GL调用

当我使用屏幕帧缓冲区作为目标(通过传递NULL)调用视口的最后一个方法(Viewport :: blit)时,会发生OpenGL错误.它首先设置自己的帧缓冲区的读缓冲区(已经设置了绘制缓冲区)然后调用RenderTarget :: blit调用它glBlitFramebuffer.在blit方法中它绑定两个缓冲区,你可以看到它调用glCheckFramebufferStatus那里不会返回错误.

我一直在读这个,但我似乎无法找到导致它的错误.当我使用GL_LINEAR我使用的GL_NEAREST颜色缓冲区时,我使用所有颜色缓冲区GL_RGB32F作为内部格式使用深度缓冲区(我从不blit)使用GL_DEPTH_COMPONENT32F

编辑,一个较短的例子,刚刚接受了所有GL调用并填写了我使用的参数

glBindFramebuffer(GL_READ_FRAMEBUFFER, _GL_Framebuffer);
glReadBuffer(GL_COLOR_ATTACHMENT0 + index);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);

// OpenGL error check, does not return an error

glBindFramebuffer(GL_READ_FRAMEBUFFER, _GL_Framebuffer);
GLenum status = glCheckFramebufferStatus(GL_READ_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE)
{
    // Some error checking, fortunately status always turns out to be complete
}
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

glBlitFramebuffer(0, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl render blit

6
推荐指数
1
解决办法
4308
查看次数

PyGame:使用alpha对图像应用透明度?

我想显示具有指定透明度的alpha图像,但无法弄清楚如何操作.

为了详细说明我是如何努力的,下面的模糊是这个SO答案的一个稍微修改的代码块,但如果你运行它,你会看到"图像"丢失它的原生alpha,而" image2"永远不会改变!呸.

#!/usr/bin/env python

import pygame, sys

pygame.init()

window = pygame.display.set_mode((200, 200))
background = pygame.Surface((window.get_size()))
background.fill((255, 255, 255))
image = image2 = pygame.image.load('alpha.png')

image = image.convert()
rect = image.get_rect()

image2 = image2.convert_alpha()
rect2 = image2.get_rect()

rect2.left = rect.width + 1

i = 0
while True:
  for event in pygame.event.get():
    if event.type == 12:
      pygame.quit()
      sys.exit()

  image.set_alpha(i)
  image2.set_alpha(i)

  window.fill((255, 255, 255))
  window.blit(background, background.get_rect())
  window.blit(image, rect)
  window.blit(image2, rect2)

  if i == 255:
    i = 0
  else:
    i …
Run Code Online (Sandbox Code Playgroud)

python pygame alpha blit geometry-surface

6
推荐指数
4
解决办法
2万
查看次数

在pygame中将矩形转换为曲面

在我的代码中它不断给我错误:

pygame.surface.Surface.blit(a, (x1, y1))

类型错误:描述符“blit”需要“pygame.Surface”对象,但收到“pygame.Rect”。

帮助!

这是我的代码:

import pygame
import time

pygame.init()

screen = pygame.display.set_mode()

display_width = 1366
display_height = 768

white = (255,255,255)
red = (255,0,0)
green = (0,255,0)

gameDisplay = pygame.display.set_mode((display_width,display_height))
clock = pygame.time.Clock()

global x1
global y1
global x2
global y2

x1 = 683
y1 = 384
x2 = 0
y2 = 500


def game():
    y1 = 384
    gameDisplay.fill(white)
    a = pygame.draw.rect(gameDisplay, red, (x1,y1,250,250), 0)
    b = pygame.draw.rect(gameDisplay, green, (x2,y2,100,100), 0)
    pygame.display.update()
    gameStart = True
    while gameStart …
Run Code Online (Sandbox Code Playgroud)

python pygame surface rect blit

6
推荐指数
1
解决办法
1万
查看次数

比条件+指针增量快吗?

这是我简单的blitting功能:

static void blit8(unsigned char* dest, unsigned char* src)
{
    byte i;
    for (i = 0; i < 8; ++i) {
        if (*src != 0) {
            *dest = *src;
        }
        ++dest;
        ++src;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经在-O3,blit8并被内联.restrict(gcc)在这里没有效果.也没有以任何不同的方式递增指针,或使用另一个数字作为透明度,或另一种类型i...我甚至尝试传递一个1字节的位掩码并检查而不是解除引用src.增加i16 的限制似乎提供了一个非常小的加速(~4-6%),但我正在使用8字节而不是16字节的块.

我的瓶颈?实际上没有任何线索,我不认为这是缓存行,因为我的错过率很低(?)和64(我的缓存行大小)在改变事物时没有特别的意义.但是我不认为它的内存速度memcpy也是如此(因为速度更快,稍微更多).

cg_annotate这说blit8(没有内联):

Ir    I1mr   ILmr            Dr      D1mr   DLmr          Dw       D1mw    DLmw  file:function
3,747,585,536      62      1 1,252,173,824 2,097,653      0 674,067,968          0       0  ppu.c:blit8.constprop.0
Run Code Online (Sandbox Code Playgroud)

常规 …

c optimization performance memcpy blit

6
推荐指数
1
解决办法
118
查看次数

软件设计与开发专业:Pygame Smudge Trails

首先,我在网上搜索了这个网站的解决方案和我尝试过的那些都没有用,所以我决定发布我的个人问题和代码.该程序是使用Python 3.2.2和pygame的相应兼容版本创建的.我还意识到一个更有效的方法是使用精灵,精灵组和'脏矩形'更新,但我无法转换程序,所以我将继续没有这些功能的额外好处.

问题:"小行星"移动的污迹落后.
假设:背景在屏幕上显示,但小行星在背景上显示.

请回复 - 顺便说一句,我是AUS的高中生:D

import pygame
import random
import math
pygame.init()

height = 550
width = 750
screen = pygame.display.set_mode((width, height))
background = pygame.image.load("Planet.jpg")
Clock = pygame.time.Clock()


class asteroid(pygame.sprite.Sprite):
    def __init__(self, x, y, size):
        pygame.sprite.Sprite.__init__(self)
        self.x = x
        self.y = y
        self.size = 15
        self.speed = 0.0
        self.angle = 0
        self.colour = (171, 130, 255)
        self.thickness = 0

def display(self):
     pygame.draw.circle(background, self.colour, (int(self.x),int(self.y)), self.size, self.thickness)

     pygame.draw.circle(background, (255, 255, 255), (int(self.x),int(self.y)), self.size, 1)

def move(self):
    self.x += math.sin(self.angle) …
Run Code Online (Sandbox Code Playgroud)

python pygame trail blit

5
推荐指数
1
解决办法
722
查看次数

不能在pyglet中绘制()精灵

出于某种原因,我无法得到pyglet来绘制精灵.这是我的代码:

import pyglet

game = pyglet.window.Window(640, 480, "I'm a window")

batch = pyglet.graphics.Batch()

pyglet.resource.path = ["."]
pyglet.resource.reindex()

image = pyglet.resource.image("hextile.png")
pyglet.sprite.Sprite(image, x=200, y=300, batch=batch)
pyglet.text.Label('DING', font_name='Arial', font_size=24, x=100, y=100, batch=batch)

@game.event
def on_draw():

    game.clear()
    batch.draw()
    #image.blit(0, 0)

pyglet.app.run()
Run Code Online (Sandbox Code Playgroud)

现在,当我绘制批处理时,文本标签会正确显示.我在窗户上看到"DING".但是,未显示图像"hextile.png".我尝试独立绘制精灵,但这也不起作用.然而,模糊图像(如注释行中所示)似乎工作得很好,但显然这不是我在此之后的功能.我无法想出这个.我错过了什么?

python pyglet sprite draw blit

4
推荐指数
1
解决办法
2228
查看次数

pygame的.如何调整曲面大小并使所有对象与新窗口大小成比例?

如果我将pygame窗口设置为可调整大小,然后单击并拖动窗口的边框,窗口将变大,但表面上的任何blit都不会随之变大.(这是可以理解的)我怎么做到这样,当我调整窗口大小时,所有blit对象调整大小并正确填充窗口?

例如:假设我有一个200 x 200的窗口,我在window_width/2和window_height/2处按下了一个按钮.按钮将位于窗口的中心,为100 x 100.现在,如果我将窗口调整为300 x 300,则按钮将保持为100 x 100而不是150 x 150.

我试过搞乱pygame.Surface.get_width等,但没有运气.基本上我正在尝试调整程序窗口的大小,并使所有blit图像保持成比例.

python pygame surface blit resizable

4
推荐指数
1
解决办法
4379
查看次数

如何将我的 Pygame 游戏“blit”到 OpenGL 表面上?

我围绕 Pygame 构建了整个游戏,并希望将其放在 Steam 上。最后我了解到我需要 OpenGL 支持才能运行 Steam 的 Overlay。初始化显示的代码:

screen = pygame.display.set_mode((screen_width, screen_height), HWSURFACE | DOUBLEBUF | OPENGL)

有什么方法可以创建一个 OpenGL 表面并将整个游戏传输到该表面上,这样我就可以获得 OpenGL 功能(Steam Overlay),而无需重做大量代码并重新创建大量游戏?游戏不会使用很多资源,所以我认为不会有太多延迟(希望如此),所以这绝对是我想尝试的路线。

除了在不同的库中重做游戏之外,我还有其他选择吗?

python opengl pygame blit

4
推荐指数
1
解决办法
1873
查看次数