pygame教程示例中用图片替换矩形

问题描述

我正在通过 Tim 的教程关注 Tech

https://github.com/techwithtim/Network-Game-Tutorial

关于使用 pygame 和套接字的联网 python 游戏。我和我认为这是一个简单的问题,但因为我才刚刚开始,我不知道该怎么做。在本教程中,他为网络上的每个玩家绘制了两个红色方块(矩形)。每个玩家都可以用箭头控制他们的方格并改变他们的 x,y 坐标。服务器保持两个客户端同步。主要游戏代码如下。

如何用我选择的 png 图像替换红色方块?我知道我需要加载图像,以某种方式使用 blit 来显示表面,然后显示和更新,但坚持到底如何!非常感谢。

导入pygame 从网络导入网络

类播放器(): 宽度 = 高度 = 50

def __init__(self,startx,starty,color=(255,0)):
    self.x = startx
    self.y = starty
    self.veLocity = 2
    self.color = color

def draw(self,g):
    pygame.draw.rect(g,self.color,(self.x,self.y,self.width,self.height),0)

def move(self,dirn):
    """
    :param dirn: 0 - 3 (right,left,up,down)
    :return: None
    """

    if dirn == 0:
        self.x += self.veLocity
    elif dirn == 1:
        self.x -= self.veLocity
    elif dirn == 2:
        self.y -= self.veLocity
    else:
        self.y += self.veLocity

类游戏:

def __init__(self,w,h):
    self.net = Network()
    self.width = w
    self.height = h
    self.player = Player(50,50)
    self.player2 = Player(100,100)
    self.canvas = Canvas(self.width,self.height,"Testing...")

def run(self):
    clock = pygame.time.Clock()
    run = True
    while run:
        clock.tick(60)

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

            if event.type == pygame.K_ESCAPE:
                run = False

        keys = pygame.key.get_pressed()

        if keys[pygame.K_RIGHT]:
            if self.player.x <= self.width - self.player.veLocity:
                self.player.move(0)

        if keys[pygame.K_LEFT]:
            if self.player.x >= self.player.veLocity:
                self.player.move(1)

        if keys[pygame.K_UP]:
            if self.player.y >= self.player.veLocity:
                self.player.move(2)

        if keys[pygame.K_DOWN]:
            if self.player.y <= self.height - self.player.veLocity:
                self.player.move(3)

        # Send Network Stuff
        self.player2.x,self.player2.y = self.parse_data(self.send_data())

        # Update Canvas
        self.canvas.draw_background()
        self.player.draw(self.canvas.get_canvas())
        self.player2.draw(self.canvas.get_canvas())
        self.canvas.update()

    pygame.quit()

def send_data(self):
    """
    Send position to server
    :return: None
    """
    data = str(self.net.id) + ":" + str(self.player.x) + "," + str(self.player.y)
    reply = self.net.send(data)
    return reply

@staticmethod
def parse_data(data):
    try:
        d = data.split(":")[1].split(",")
        return int(d[0]),int(d[1])
    except:
        return 0,0

类画布:

def __init__(self,h,name="None"):
    self.width = w
    self.height = h
    self.screen = pygame.display.set_mode((w,h))
    pygame.display.set_caption(name)

@staticmethod
def update():
    pygame.display.update()

def draw_text(self,text,size,x,y):
    pygame.font.init()
    font = pygame.font.SysFont("comicsans",size)
    render = font.render(text,1,(0,0))

    self.screen.draw(render,(x,y))

def get_canvas(self):
    return self.screen

def draw_background(self):
    self.screen.fill((255,255,255))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...