繁体   English   中英

如何使Sprite出现在窗口中?

[英]How do I make my Sprite appear in my window?

我在游戏中制作了一个敌人精灵,但是它没有显示在屏幕上。 我想知道如何显示它?

尝试更新该类中的pygame显示,但仍不会显示图像。 我计划使精灵显示,以使其(水平)移动到网格线的末端,然后在到达水平点的末端时垂直向下移动。

import pygame
pygame.init()

window = pygame.display.set_mode((650, 630))

pygame.display.set_caption("PeaShooters")

avatar = pygame.image.load('Sprite 1 Red.png')
background = pygame.image.load('Bg.jpg')
white = (255, 255, 255)

class player(object):
    def __init__(self, x, y, width, height, shots):
        self.x = 300
        self.y = 500
        self.width = 40
        self.height = 60
        self.vel = shots



def drawGrid():
    window.blit(background, (0,0))
    window.blit(avatar, (av.x, av.y))
    pygame.draw.line(window, white, [50,50], [50, 600], 5)
    pygame.draw.line(window, white, [50,50], [600, 50], 5)
    pygame.draw.line(window, white, [600,600], [600, 50], 5)
    pygame.draw.line(window, white, [50,600], [600, 600], 5)
    pygame.draw.line(window, white, [50,450], [600, 450], 5)
    for bullet in bullets:
        bullet.draw(window)
    pygame.display.update()


class shots(object):
    def __init__(self, x, y, radius, colour):
        self.x = x
        self.y = y
        self.radius = radius
        self.colour = colour
        self.vel = shots

    def draw(self, window):
        pygame.draw.circle(window, self.colour, (self.x,self.y), self.radius)

class enemy(object):
    enemy = pygame.image.load('Sprite 3 Red.png')
    pygame.display.update()

    def __init__(self, x, y, width, height, end):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.end = end
        self.path = [self. x, self.end]
        self.vel = 4

    def draw(self,window):
        self.move()
        pass

    def move(self):
        pass

av = player(300, 500, 40, 60, 9)
bullets = []
running = True
while running:
    pygame.time.delay(100) 

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for bullet in bullets:
        if bullet.y < 600 and bullet.y > 70:
            bullet.y -= 8
        else:
            bullets.pop(bullets.index(bullet))

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w] and av.y > 440:
        av.y -= av.vel

    if keys[pygame.K_a] and av.x > 65:
        av.x -= av.vel

    if keys[pygame.K_s] and av.y < 535:
        av.y += av.vel

    if keys[pygame.K_d] and av.x < 530:
        av.x += av.vel

    if keys[pygame.K_SPACE]:
        if len(bullets) < 5:
            bullets.append(shots(round(av.x + av.width//2), round(av.y + av.height//2), 6, (0,0,0)))


    drawGrid()

window.blit(avatar, (x,y))

pygame.quit()

我希望该头像会出现在屏幕上,以便我可以移动它。

所有绘制都应在while循环中完成。 或者直接在各种Sprite上调用window.blit函数,或者将其包装在Sprite方法中,该方法在循环期间会被调用(我看到您有一个draw()方法,但现在它什么都不做)。 选择一种方法并遵循。 我个人更喜欢第二个,它更面向对象,但这是我的观点。
如果要给人一种运动感,请记住要清除先前的位置。
display.update()应该在每次迭代之后一次调用一次,通常在最后一次,所有sprites都被blit之后。

您的敌人没有出现,因为您从未消灭过它的形象。 实际上,您永远不会创建敌人,只定义了类。 因此,首先创建一个敌人并添加一条线,使en = enemy(ex, ey, w, h, end) exey这里应该是敌人在屏幕上的位置,选择您喜欢的东西。 wh图像的宽度和高度。 end我不知道(您的课程,您添加了它,您应该知道它的用途是什么)。 您可以在创建avatar后添加此行。
然后从类中删除display.update() ,并在while循环中添加一个调用window.blit(en, (en.x, en.y)) 或在drawGrid() ,它实际上是在绘制图形,而不仅仅是在绘制网格。

要移动敌人,您应该像使用化身一样在while循环中编辑敌人的位置( en.xen.y ),但不要响应按键。 只需设置某种路径即可。 在每次迭代中,敌人的坐标都应更改以遵循此路径,例如en.x += en.vel或类似内容。 实际路径可能更复杂,但这取决于您。 逻辑是:在循环的每次迭代中更改敌人坐标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM