python - 在 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,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, w, 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,0))
self.screen.draw(render, (x,y))
def get_canvas(self):
return self.screen
def draw_background(self):
self.screen.fill((255,255,255))
解决方案
推荐阅读
- c++ - C++读取功能改进,可以读取多个文件
- android - 当我单击打开弹出窗口的按钮时应用程序崩溃
- reactjs - Webpack URIError:无法解码参数'/%PUBLIC_URL%/favicon.ico'
- python - 在python中存储DNA矩阵的最佳方法
- python - Python:合并排序数据输入
- javascript - Jquery UI Slider,手柄跟随光标
- spring - 如何在 Spring Cloud Gateway 中为发现定位器编写复杂的谓词?
- spring - 如何在 REST API 级别处理来自客户端的连续汇款请求(秒/毫秒内)
- javascript - 允许在客户端编写的 JavaScript 在服务器上执行的最安全方法是什么?
- google-compute-engine - 谷歌云 | 计算引擎 | 虚拟机卡住了