当前位置: 首页 > 知识库问答 >
问题:

游戏表面。使用面积参数时的BLIT

高才
2023-03-14

我正在尝试使用surface。使用area参数来提高代码的性能。当我为BLIT使用area参数时,我遇到以下错误:

系统错误:

如果我删除了area参数,BLIT将像我预期的那样工作。你知道我做错了什么吗?下面是我的用例和错误的示例代码。

import sys
import random

import pygame
pygame.init()

tilemap = pygame.image.load('pattern.jpg')

tilesize = 64
size = 4
w, h = size*64, size*64
screen = pygame.display.set_mode((w, h))

while True:
    screen.fill((0, 0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    blit_list = []
    for i in range(size):
        for j in range(size):
            xi, yi = random.randint(0, size), random.randint(0, size)
            blit_args = (tilemap, (i*tilesize, j*tilesize),
                        (xi*tilesize, yi*tilesize, tilesize, tilesize))

            # calling screen.blit here works correctly
            screen.blit(*blit_args)

            blit_list.append(blit_args)


    # instead of using multiple blit calls above, calling screen.blits here fails
    # remove the area argument (3rd arg) from each blit_arg tuple works
    # screen.blits(blit_list)

    pygame.display.flip()

    # wait a second
    pygame.time.wait(1000)

这是我使用的图像(https://www.behance.net/gallery/19447645/Summer-patterns):

共有1个答案

商开宇
2023-03-14

这是C代码中的一个bug。在表面上。c行2258,对于冲浪有以下测试:

    if (dest->flags & SDL_OPENGL &&
        !(dest->flags & (SDL_OPENGLBLIT & ~SDL_OPENGL))) {
        bliterrornum = BLITS_ERR_NO_OPENGL_SURF;
        goto bliterror;
    }

而在表面上。c第2118行,对于surf_blit代码为:

#if IS_SDLv1
    if (dest->flags & SDL_OPENGL &&
        !(dest->flags & (SDL_OPENGLBLIT & ~SDL_OPENGL)))
        return RAISE(pgExc_SDLError,
                     "Cannot blit to OPENGL Surfaces (OPENGLBLIT is ok)");
#endif /* IS_SDLv1 */

注意#ifIS_SDLv1

问题似乎来自于现在被弃用的SDL\u OPENGLBLIT

不要使用已弃用的SDL_OPENGLBLIT模式,该模式过去允许闪存和使用OpenGL。由于很多原因,这个标志被弃用了。在许多情况下,使用SDL_OPENGLBLIT会损坏OpenGL状态。

不幸的是,我不是OpenGL的专家,我无法进一步解释。希望有人能给出更准确的答案。

我可以肯定的是,我可以在之前提出BLITS\u ERR\u SEQUENCE\u SURF(例如,通过将pygame.Rect作为blit\u args中的第一个对象),而我不能在之后提出BLITS\u ERR\u INVALID\u DESTINATION

这让我觉得上面的几句话是怎么回事。

编辑

我可以确认,如果我在上面的测试周围添加#if IS_SDLv1,并重新编译pygame,它会工作。不知道为什么!☺

我在GitHub上提出了这个问题。

 类似资料:
  • 首先参加了笔试,笔试通过后,参加面试。 面试问题(回忆版): 1.平常玩什么游戏? 2.这个游戏有什么做的好的活动? 3对于XX这样一款运营了很多年的游戏,你觉得还有哪些方面需要改进和考虑? 4..其他游戏遇到的问题,如果你负责XX社区运营应该怎么处理? 5.如果让你运营一款XXXX游戏,你会怎么做? 6.你认为运营人员担当怎样的角色? 7.反问环节 总的来说,感觉这些问题都是考察逻辑思维和组织能

  • 目录/时间线 (返回汇总帖) 09261700 一面 0927 流程结束 09261700 一面 总共26min。 面试官自我介绍 所属北京快手游戏棋牌中心(斗地主、麻将、台球、五子棋) 和杭州那边是完全独立开来的,比如不归大师管 自我介绍。 (问题很少,就不分类了) 为什么实习没有转正 Lua有哪些数据类型 UGUI的层级控制是怎样的,是哪个组件控制的 弹窗界面怎么屏蔽其下所有界面的点击响应 热

  • 你的常用的数据结构都有什么? HashMap和HashSet的区别? 怎么构造一个HashMap HashMap优势是什么? 还有什么需要注意的? 扩容机制,hash冲突? 如果你去设计一个Hash函数怎么设计呢? 一般 HashMap多线程情况下会出现什么问题? 怎么解决扩容死链的? 尾插会有什么问题? 数据错乱问题以外还有什么其他问题? 怎么解决这个问题? councurrentHashMap

  • 这里给大家分享一下我学弟最近的一次Android面试: 我走的是途游游戏的内推,隔了两天就安排面试了,我是线上面的,用的微信视频,一面说是技术面,但也聊到了其他的内容,比如对游戏开发的理解,怎么理解Android的发展方向之类的,从一面到hr面也就一个星期吧,效率还是挺高的,我就只有一轮技术面,一些没想起来的题面试官也不会引导我,更别说给我讲解一下了,其他还好,拿到意向了,但我没打算去。 一面丨4

  • 大概30min,面试平台使用的是腾讯会议 1、自我介绍; 2、介绍一下简历上写的项目(五子棋):怎么判断用户的登录状态,五子棋判定输赢的规则是怎样的? 3、讲一下实习经历,这段实习经历带给你的收获; 4、讲一下归并排序,如果让你用伪代码写归并排序,你会怎么写? 5、队列和栈的区别; 6、List、Map和Set的区别; 7、说一下面向对象编程的思想,什么语言是面向过程编程的?这个语言能实现面向对象

  • 最近收到了funplus游戏数分的面试邀请,距离笔试有一个月的时间,等的我是花儿都要谢了。。。 下面列举面试官期间的一些提问 1.简单的介绍了个人情况 从个人基础情况+校园经历+实习经历+未来展望等方面介绍 2.你有了解Funplus是个什么类型的公司嘛? SLG类出海手游 3.在你的认知里面,游戏数分的职责是什么?以及需要掌握的东西? 广告投放渠道的内容分析 用户留存分析,流失归因分析 日常用户