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

在pyopenGL和pygame上更改视点时会出现奇怪的线条

谷梁襦宗
2023-03-14

所以我正在使用pyplay和PyopenGL制作一个二维游戏,我做了一些事情来使它可以调整窗口的大小。当窗口变大时,游戏也随之变大。这一切都很好。

我的游戏是一个基于瓷砖的游戏,可以上下滚动。

然而,问题是,当我调整屏幕大小时,如果我向上或向下滚动,磁贴之间会出现奇怪的线条。向左或向右滚动时不会发生这种情况,这很奇怪。这些线只在高分辨率时出现,在低分辨率时不存在。我的代码相当大,在多个文件中,所以我将在github上发布一个链接,但这是我的窗口代码,带有调整大小功能:

import numpy

import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

from . import batch
from . import GAH


class window_handler:
    def __init__(self,window_size=(640,360)):
        self.window_size = window_size
        self.main_window = pygame.display.set_mode(self.window_size, DOUBLEBUF|OPENGL|RESIZABLE)
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glViewport(0, 0, self.window_size[0], self.window_size[1])
        
        self.projection_matrix = numpy.array((
                (2/640, 0, 0, 0),
                (0, -2/360, 0, 0),
                (0, 0, 1, 0),
                (0, 0, 0, 1)
            ), numpy.float32)

        self.view_matrix = numpy.array((
                (1, 0, 0, 0),
                (0, 1, 0, 0),
                (0, 0, 1, 0),
                (-320, -180, 0, 1)
            ), numpy.float32)

        self.view_projection_matrix = numpy.dot(self.view_matrix,self.projection_matrix)
        batch.setup_shaders(vpMatrix = self.view_projection_matrix)
        self.renderer = batch.Batch()

    def rezise_request(self, event):
        self.window_size = event.w,event.h
        glViewport(0, 0, self.window_size[0], self.window_size[1])
        
    def update_display(self):
        pygame.display.flip()

    def draw_game(self,draw):
        glClearColor(0, 0, 0, 1)
        glClear(GL_COLOR_BUFFER_BIT)

        self.renderer.begin()
        
        for i in draw["background_0"]:
            self.renderer.draw(self.graphics_handler["Background_images"][i[1]][0],i[0][0],i[0][1])
        for i in draw["background_1"]:
            self.renderer.draw(self.graphics_handler["Background_images"][i[1]][0],i[0][0],i[0][1])
        for i in draw["background_2"]:
            self.renderer.draw(self.graphics_handler["Background_images"][i[1]][0],i[0][0],i[0][1])
        for i in draw["background_3"]:
            self.renderer.draw(self.graphics_handler["Background_images"][i[1]][0],i[0][0],i[0][1])

        for i in draw["tile_layer"]:
            self.renderer.draw(self.graphics_handler["Tileset"]["tileset_"+str(i[1][1])][i[1][0]],i[0][0],i[0][1])

        for i in draw["entity"].values():
            if i[1] != None:
                image = self.graphics_handler["Sprites"][i[1]][0]
                
                self.renderer.draw(image,i[0][0],i[0][1],i[2])
        self.renderer.end()

    def quit(self):
        self.renderer.delete()
        

        
        

这里有一个完整的代码链接:github。com/EvelynMitchell199/Yumi

共有1个答案

堵茂勋
2023-03-14

我发现我们的代码出了什么问题!所以,基本上,当我们设置分辨率时,如果分辨率不是这里用绿色突出显示的分辨率之一,那么所有东西都会奇怪地缩放,在瓷砖之间创建线条。https://pacoup.com/2011/06/12/list-of-true-169-resolutions/

分辨率必须可以被8整除,否则瓷砖之间的比例将不同,因此我们可以得到瓷砖之间的线条。

 类似资料:
  • 问题内容: 好的,所以当我想使用透明度时,我偶然发现了一个问题。 因此,用于更改悬停背景的代码是… 一开始,我为按钮设置了蓝色。 这是显示颜色变化的gif … GifMeme09541718022016.gif https://drive.google.com/file/d/0B9XFyaTVy8oYci1zMmRhMmtYcnM/view?usp=docslist_api 为什么会这样?如果这不

  • 有人知道这个黑色矩形是什么吗?这是我的主要任务。py: 这是我的马里奥。py: 最后,我的levels.py: 我使用的是Windows10计算机,python版本为3.8。3和pygame版本1.9。6.

  • 有没有一种方法可以成功地将所有剪辑拼接在一起,从而防止出现奇怪的小故障?我整理了一个

  • 我在打印报告时出现了一个奇怪的错误。

  • 问题内容: 我有这种方法,它使用字符串的可变参数,从中创建一个列表,然后尝试删除列表的第一个元素。 但是,一旦被调用,就会抛出一个。我的猜测是返回的List- Type不支持remove方法。我对么?我有什么选择? 问题答案: 仅在数组周围提供薄包装。该包装器使您可以使用API 对阵列执行 大多数 操作。JavaDoc的引文: 返回由指定数组支持的 固定大小的 列表。[…]此方法充当基于数组的AP

  • 问题内容: 我有这种方法,它使用字符串的可变参数,从中创建一个列表,然后尝试删除列表的第一个元素。 但是,一旦被调用,就会抛出一个。我的猜测是返回的List- Type不支持remove方法。我对么?我有什么选择? 问题答案: 仅在数组周围提供薄包装。该包装器使您可以使用API 对阵列执行 大多数 操作。JavaDoc的引文: 返回由指定数组支持的 固定大小的 列表。[…]此方法充当基于数组的AP