Спрайты, не появляющиеся в pygame на пи малины - PullRequest
0 голосов
/ 25 мая 2018

У меня есть игра-пигмей, и она отлично работает на моем ноутбуке, но когда я перевожу ее на свой малиновый пи, многие спрайты не появляются.Они там, потому что я все еще могу нажать на них, но они, кажется, на самом деле не нарисованы.Я подумал, что это может быть из-за того, что пи не может обрабатывать сотни png, поэтому я сжал их все, но результаты все равно не изменились.Это не одни и те же спрайты каждый раз, когда они не появляются.Если я перезапущу сценарий или даже просто обновлю экран, это другие изображения, которые решат появиться.Затем я нарисовал его на емкостном TFT-экране от Adafruit, и результаты остались прежними.Мышь тоже перевернута, что немного раздражает, но я пойму другую проблему.Спрайты определенно есть, потому что я все еще могу щелкнуть их, они просто не видны, как будто они не могут загрузить изображение, но это не выдает ошибку.

import pygame
class base_sprite(pygame.sprite.Sprite):
        def __init__(self, color=(0,0,0), width=0, height=0, image=None,x=0,y=0, scale=None):
            pygame.sprite.Sprite.__init__(self)
            if "Surface" in type(image).__name__:
                self.image = image
            else:
                self.image = pygame.image.load(image)
            if scale != None:
                self.image = pygame.transform.scale(self.image, (scale[0], scale[1]))
            pygame.draw.rect(self.image, color, [5000000,5000000,width,height])
            self.rect = self.image.get_rect()
            self.rect.x = x
            self.rect.y = y

pygame.init()
width = 320
height = 240
s = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()

gameGroup = pygame.sprite.Group()
inventoryGroup = pygame.sprite.Group()

back = base_sprite(width=320, height=240, image="images/back.png", x=0, y=0)

headBorder = base_sprite(width=64, height=64, image="images/ItemBorder.png", x=180, y=10, scale=[50, 50])
handBorder = base_sprite(width=64, height=64, image="images/ItemBorder.png", x=250, y=94, scale=[50, 50])
bodyBorder = base_sprite(width=64, height=64, image="images/ItemBorder.png", x=180, y=94, scale=[50, 50])
feetBorder = base_sprite(width=64, height=64, image="images/ItemBorder.png", x=180, y=178, scale=[50, 50])
spellBorder = base_sprite(width=64, height=64, image="images/ItemBorder.png", x=110, y=10, scale=[50, 50])
symbol =  base_sprite(width=100, height=100, image="images/mageSmall.png", x=5, y=(height/2)-50)

gameGroup.add(back)

inInventory = False
running = True
while running:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_i:
                inInventory = not inInventory

    gameGroup.draw(s)
    if inInventory:
        inventoryGroup.add(back)
        inventoryGroup.add(symbol)
        inventoryGroup.add(headBorder)
        inventoryGroup.add(handBorder)
        inventoryGroup.add(bodyBorder)
        inventoryGroup.add(feetBorder)
        inventoryGroup.add(spellBorder)
        inventoryGroup.add(base_sprite(width=64, height=64, image="images/items/BasicHat.png", x=180, y=10, scale=[50, 50]))
        inventoryGroup.add(base_sprite(width=64, height=64, image="images/items/BasicThingToHitPeopleWith.png", x=250, y=94, scale=[50, 50]))
        inventoryGroup.add(base_sprite(width=64, height=64, image="images/items/BasicShirt.png", x=180, y=94, scale=[50, 50]))
        inventoryGroup.add(base_sprite(width=64, height=64, image="images/items/BasicShoes.png", x=180, y=178, scale=[50, 50]))
        inventoryGroup.add(base_sprite(width=64, height=64, image="images/items/BasicBook.png", x=110, y=10, scale=[50, 50]))
        inventoryGroup.draw(s)
    clock.tick(60)
    pygame.display.flip()

1 Ответ

0 голосов
/ 02 июня 2018

Я должен согласиться.Это надежный способ решения вашей проблемы, и это самый простой способ обойти решение проблем рендеринга.Вот мой код без спрайтов:

 import pygame

pygame.init()
game_display = pygame.display.set_mode((800, 800))


# fixed variables at the start
x_pos = 400
y_pos = 400
current_speed = 15

def jump_coords(y_position, speed):
    if speed >= 0:
        #to move up, reduce the y-coordinate
        y_position -= speed
    return y_position

game_exit = False

# main loop
while not game_exit: 
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                y_pos = jump_coords(y_pos, current_speed)
                # 1 represents gravity value
                current_speed -= 1

    rect_one = pygame.Rect(x_pos, y_pos, 10, 10)  
    pygame.draw.rect(game_display, (255, 0, 0), rect_one)
    pygame.display.update()`enter code here`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...