我一直在尝试开始一个基本的2d塔防游戏。我想通过在棕色背景上放置几十个35x35绿色块来设计地图。如何使用一个类来制作多个具有相同尺寸和颜色但位置不同的块?感谢
import pygame
pygame.init()
white = (255,255,255)
black = (0,0,0)
grass = (51,204,51)
dirt = (192,151,111)
gameDisplay = pygame.display.set_mode((1200,800))
pygame.display.set_caption('Tower Defense')
pygame.display.update()
gameExit = False
while not gameExit:
class Player(object):
def __init__(self):
self.rect = pygame.draw.rect((64, 54, 16, 16))
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
#print(event)
gameDisplay.fill(dirt)
pygame.draw.rect(gameDisplay,green, [600,400,35,35])
pygame.display.update()
pygame.quit()
quit()
答案 0 :(得分:0)
你需要使用一个精灵组,它可以容纳任意数量的精灵。使用pygame.rect可以将每个sprite设置为不同的坐标。 这是一个例子:
import pygame
pygame.init()
white = 255,255,255
black = 0,0,0
grass = 51,204,51w
dirt = 192,151,111
gameDisplay = pygame.display.set_mode((1200,800))
pygame.display.set_caption('Tower Defense')
class Player(pygame.sprite.Sprite):
def __init__(self):
self.image = pygame.Surface((35,35))
self.image.fill(color)
self.rect = self.image.get_rect()
Players = pygame.sprite.Group()
for i in range(#How many of them you want):
player = Player()
player.rect.x = i*35
player.rect.y = i*35
Players.add(player)
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
#print(event)
gameDisplay.fill(dirt)
Players.draw(window)
pygame.display.update()
pygame.quit()
quit()
这里发生的事情是我们创建了一个名为" Player"的类,在pygame中使用sprite模块,然后在最后我们添加了一行:
self.rect = self.image.get_rect()
允许自由编辑对象的x和y坐标
然后我们创建了一个精灵组,它可以容纳我们刚刚制作的所有这些对象。好的,一切都很好。现在我们使用for循环来创建任意数量的精灵(您可以将hashtag替换为您需要的玩家数量)。这一行:
player.rect.x = i*35
定义对象的x rect,因为i是每次for循环运行时都会更改的变量,所以它将类似于:
#first loop in the for loop:
player.rect.x = 0*35 = 0 #The x axis is 0
#second loop in the for loop
player.rect.x = 1*35 = 35 #The x axis is 35
#third loop in the for loop
player.rect.x = 2*35 = 70#The x axis is 70
依旧...... 同样的事情适用于y轴。我不太明白你的意思是什么?填满整个屏幕"与对象,因为这只会创建一个空背景。如果要为每个对象设置不同的特定坐标,请使用以下内容替换for循环,用x和y坐标替换主题标签:
player = Player()
player.rect.x = #x coordinate
player.rect.y = #y coordinate
Players.add(player)
你必须重复以下代码很多次,所以如果你想要三个不同的对象和你指定的坐标,那么你必须做这样的事情:
player = Player()
player.rect.x = #x coordinate
player.rect.y = #y coordinate
Players.add(player)
player.rect.x = #x coordinate
player.rect.y = #y coordinate
Players.add(player)
player.rect.x = #x coordinate
player.rect.y = #y coordinate
Players.add(player)
这是相当漫无边际的,所以简而言之:
很抱歉,如果这太难理解,但我希望它有所帮助!
P.S:确保在创建类时使用pygame.sprite.Sprite而不是对象创建它,就像在代码中一样。