问题标签 [blit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
297 浏览

sdl - SDL C 程序在 sdl_blitsurface 上冻结

我正在处理的程序有问题。有时,它会冻结。没有错误或任何东西。

该游戏是一款多人游戏,您可以在其中驾驶一艘船。其他玩家和道具的照片会根据您的位置进出视野。在大多数情况下,它工作得很好,但在某些情况下,它会锁定。

我已经追踪到它何时将一个表面 BLIT 到另一个表面上。(SDL_BlitSurface)。

如果我注释掉它 blits (SDL_BlitSurface) 的单行代码,并用一个简单的圆圈替换图形,它在任何情况下都不会冻结。但是,注释掉圆圈并再次用blitting图形替换它,它会随机冻结。令人沮丧的是,有时会,有时不会。有时图形会在屏幕上停留片刻然后冻结,有时它会在它出现的那一刻冻结。有时,它根本不会冻结。我根本无法追踪到任何特别的事情。

我有大量的代码可以检查 NULL 表面,但似乎并没有阻止它。我还将它设置为将有关所有图形的信息输出到文件(例如宽度、高度、内存中的位置、x、y 等),并且没有什么不寻常的。

我的主要问题是,表面会导致 SDL_BlitSurface 冻结怎么办?我还可以为表面添加哪些其他检查,以确保它不会尝试涂抹坏表面?

代码太长无法列出,但它是如何工作的:

我注意到当两个或更多玩家彼此靠近并试图在他们的两个屏幕上绘制相同的加电时,它通常会冻结。但是再次......并非总是如此!

0 投票
2 回答
3787 浏览

python - pygame中的文本

我正在制作一个游戏来练习 mygame 并创建一个高分屏幕,但我似乎无法正确地按我想要的方式对文本进行 blit

这是高分方法

这会从 .txt 文件中获取高分并对其进行 blits,但是当我希望每个分数从其上方的分数向下移动约 100 像素时,它会将它们放在一行上

那么我怎样才能使它从文件中分割文本并将每个分数降低 100 像素?

谢谢你

——克里斯蒂安·卡雷加

0 投票
1 回答
542 浏览

c++ - SDL 背景 blitting 减慢游戏速度

我已经解决了有关此问题的其他问题,但似乎无法得到我正在寻找的答案。我当前的游戏以 60 fps 的速度运行,在调试模式下需要 9.5 毫秒/帧(在发布模式下为 3.8 毫秒/帧)。这是玩家、敌人和地图都在屏幕上闪烁,这似乎根本不会导致 fps 下降,但是当我对 1024x768 BG 图像进行 blit 时,它会下降到 27-30 FPS,现在渲染每一帧33 毫秒/帧。这是游戏循环---

所以那个img的一个片段设法将fps降低了一半,我一定错过了什么?顺便说一句,我不认为它是 SDL_DisplayFormat,我已经有了该代码,这是处理 img 加载的代码片段 ---

我想偶尔或每隔一段时间对其进行一次blit,但每一帧都有角色移动,所以等待移动然后重新blit是没有用的。我是否必须在单独的表面上使用 setVideoMode 作为背景或其他东西?谁能帮我?

0 投票
3 回答
46472 浏览

python - 有点混淆 blitting (Pygame)

我刚刚开始学习一些 pygame(对整体编程来说非常新),并且我对它的工作原理有一些非常基本的问题。

我还没有找到一个地方来解释我何时需要使用 blit 或不包括屏幕上的某个表面。比如画圆的时候:

我不需要这样做screen.blit(circle),但是在显示文本时:

如果我不 blit,文本将不会出现。

老实说,除了将所需的表面“粘贴”到屏幕上之外,我真的不知道 blitting 应该做什么。我希望我已经足够清楚了。

0 投票
3 回答
3658 浏览

c - SDL - 将浮点值作为矩形参数传递的 Blit Surface

我需要根据某些水平和垂直速度在屏幕上移动表面。我需要这些速度是完全随机的。我的想法是生成随机浮点数(我成功了)并将它们用作速度。这样我可以有许多不同的速度,永远不会太快或太慢。问题是:SDL_BlitSurface只接受 aSDL_Rect作为参数来确定绘制表面的新矩形,并且SDL_Rect是一个由 4 个组成的结构int:两个用于坐标,两个用于维度;

恢复:在 SDL 上对曲面进行 blitting 时如何精确工作?

0 投票
2 回答
1750 浏览

python - 在 pygame 中,我可以使用一个列表只用一行代码多次对一个对象进行 blit 吗?

我正在尝试使用 pygame 在 python 2.7 中制作一个平台游戏。我在 python 中使用列表非常缺乏经验。我想让平台可以平铺,这样它们就可以是任何长度。假设我希望它长 250 像素,每张图像长 50,我可以这样做:

另外,我认为这部分很简单,但是我将如何制作一个特定整数长度的列表。所以如果整数是 3,我怎样才能使列表 [0,1,2]?

0 投票
2 回答
6715 浏览

opengl - 如果指定了 GL_COLOR_BUFFER_BIT 掩码,glBlitFramebuffer 是否会复制所有颜色附件?

如果我将像素从一个 FBO 复制到另一个 FBO,并且每个像素都有多个(不一定是相同数量)颜色附件,如果我的蒙版是GL_COLOR_BUFFER_BIT,它会复制哪种颜色附件(GL_COLOR_ATTACHMENT0GL_COLOR_ATTACHMENT1、 ....、GL_COLOR_ATTACHMENTi)?他们全部?如果是,如果这些 FBO 附加了不同数量的颜色缓冲区怎么办?

假设有 2 个 FBO 以这种方式绑定:

请注意,fbo1有 2 个颜色附件和fbo24 个颜色附件。

那么glBlitFrameBuffer在这种情况下,blit 颜色附件如何?

我在 OpenGL 文档中的任何地方都找不到这个。

0 投票
2 回答
90 浏览

python - Blit Bug:没有出现

我正在尝试创建一个类似于 Hangman 的游戏,我注意到screen.blit.

在“加拿大”这个词中,有三个 A。我已经成功创建了一个包含所有字母的列表,当我点击“C”时,它实际上将“C”转移到了指定的位置。但是,当您单击“A”时,只会显示第一个“A”。

这是我的代码:

绝对其他一切都有效,但“A”问题。

帮助!

0 投票
1 回答
210 浏览

python - Pygame - 即使在按下键后也会显示文本

所以我试图在“场景”类中创建一个函数,以便在您按下“z”时弹出文本并继续播放一段时间。

如果我使用 pygame.key.get_pressed() 它只会在按下 Z 时闪击。我希望它在按下 Z 时弹出并继续在屏幕上停留一段时间。

以防万一我之前没有说清楚:我基本上希望它的文本即使在我放开“z”之后也能被传送几帧。

提前致谢。

0 投票
2 回答
1299 浏览

core-graphics - 如何使用Core Animation在屏幕上显示重复绘制的CoreGraphics位图上下文而不闪烁?

我有一个大的NSView,它显示了一个自定义 Quartz2D 绘图,它以高帧速率反复变化。但是,只有绘图的某些部分可能会因帧而异。到目前为止,我的方法是首先绘制到屏幕外位图上下文,然后从该上下文创建图像,最后使用该图像更新视图的 CoreAnimation 层的内容。

我的第一个问题是,这种方法通常是否有意义,在性能方面是否可行?

绘制到屏幕外位图上下文的速度足够快,并且经过优化以仅重绘脏区域。所以在这一步之后,我有一组矩形,它们标记了屏幕外缓冲区中应该显示在屏幕上的区域。现在,我只需使用从屏幕外位图上下文创建的图像更新 CoreAnimation 层的内容,这基本上可以正常工作,但我会闪烁,看起来新帧很快显示在屏幕上,但不完全(或不在全部)绘制了。我玩过CATransaction lock/unlock/begin/end/flush, NSView lockFocus/unlockFocusNSDisableScreenUpdates/NSEnableScreenUpdates但还没有找到解决闪烁的方法,所以我想知道真正正确的同步顺序是什么?

这是初始化代码的草图:

这里是绘图代码的草图:

我还想利用有关脏区的知识。有没有办法使用这种方法只更新屏幕上的脏区域?

谢谢你的帮助!

更新:我想我发现了导致闪烁的问题。我使用来自位图上下文的像素缓冲区创建图像CGImageCreate(...)。如果我CGBitmapContextCreateImage(...)改用它,它会起作用。CGBitmapContextCreateImage写时复制,所以如果我理解正确,它会在位图上下文再次更新时写入像素,这可以解释为什么它不能更早地工作。我读过CGBitmapContextCreateImage应该小心使用的地方,因为它调用内核可能会影响性能,所以我想我会简单地将相关像素复制到新的图像缓冲区中,同时考虑到脏区。这有意义吗?