我将如何随机旋转和缩放从 pygame 中的 class 创建的每个精灵
How would I randomly rotate and scale each sprite created from a class in pygame
我正在尝试清理我的代码,并将脚本移动到不同的文件。我想将我的图像(在本例中为流星)放在随机位置,随机旋转和大小。我可以让它去随机的地方,但就是不知道如何随机缩放和旋转它。
这是我曾经使用过的东西,它给了我想要的东西,一个随机大小和随机位置旋转的流星。
import pygame, random
screen = pygame.display.set_mode((1280, 720))
pic = pygame.image.load('assets/meteor.png').convert_alpha()
rotimage = pygame.transform.rotozoom(pic, random.randint(0, 359), random.randint(1, 2))
random_x = random.randint(0, 1280)
random_y = random.randint(0, 720)
while True:
screen.blit(rotimage, (random_x, random_y))
pygame.display.update()
像这样工作得很好,但我不知道如何在另一个文件中应用它。我的第二个 python 文件看起来像这样。
import random
import pygame
display_width = 1280
display_height = 720
rotation = random.randint(0, 359)
size = random.randint(1, 2)
pic = pygame.image.load('assets/meteor.png')
pygame.init()
class Meteor(pygame.sprite.Sprite):
def __init__(self, x=0, y=0):
pygame.sprite.Sprite.__init__(self)
self.image = pic
self.rect = self.image.get_rect()
self.rect.center = (x, y)
all_meteors = pygame.sprite.Group()
for i in range(3):
new_x = random.randrange(0, display_width)
new_y = random.randrange(0, display_height)
pygame.transform.rotozoom(pic, rotation, size) # How do I put this in
all_meteors.add(Meteor(new_x, new_y)) #this only allows x and y
我的新主文件看起来像这样
while True:
meteors.all_meteors.update()
meteors.all_meteors.draw(screen)
pygame.display.update()
如何让图像在 meteor 文件中随机旋转和缩放?
我认为首先创建一个 Meteor 对象,然后在将其添加到 all_meteors 之前更新它的图片应该可以解决问题。也许用这样的东西替换 for 循环:
for i in range(3):
new_x = random.randrange(0, display_width)
new_y = random.randrange(0, display_height)
met = Meteor(new_x, new_y)
rotation = random.randint(0, 359) # Some line here to pick a random rotation
size = random.randint(1, 3) # some line here to pick a random scale
met.pic = pygame.transform.rotozoom(met.pic, rotation, size) # How do I put this in
all_meteors.add(met) #this only allows x and y
注意:我忘记了pygame.transform.rotozoom()
是否是就地操作。如果是这样,则将 met.pic = pygame.transform.rotozoom()
替换为 pygame.transform.rotozoom()
-- 删除 met.pic =
.
另一种解决方法是直接调整 class:
class Meteor(pygame.sprite.Sprite):
def __init__(self, x=0, y=0):
pygame.sprite.Sprite.__init__(self)
self.rotation = random.randint(0, 359)
self.size = random.randint(1, 2)
self.image = pic
self.image = pygame.transform.rotozoom(self.image, self.rotation, self.size)
self.rect = self.image.get_rect()
self.rect.center = (x, y)
我正在尝试清理我的代码,并将脚本移动到不同的文件。我想将我的图像(在本例中为流星)放在随机位置,随机旋转和大小。我可以让它去随机的地方,但就是不知道如何随机缩放和旋转它。 这是我曾经使用过的东西,它给了我想要的东西,一个随机大小和随机位置旋转的流星。
import pygame, random
screen = pygame.display.set_mode((1280, 720))
pic = pygame.image.load('assets/meteor.png').convert_alpha()
rotimage = pygame.transform.rotozoom(pic, random.randint(0, 359), random.randint(1, 2))
random_x = random.randint(0, 1280)
random_y = random.randint(0, 720)
while True:
screen.blit(rotimage, (random_x, random_y))
pygame.display.update()
像这样工作得很好,但我不知道如何在另一个文件中应用它。我的第二个 python 文件看起来像这样。
import random
import pygame
display_width = 1280
display_height = 720
rotation = random.randint(0, 359)
size = random.randint(1, 2)
pic = pygame.image.load('assets/meteor.png')
pygame.init()
class Meteor(pygame.sprite.Sprite):
def __init__(self, x=0, y=0):
pygame.sprite.Sprite.__init__(self)
self.image = pic
self.rect = self.image.get_rect()
self.rect.center = (x, y)
all_meteors = pygame.sprite.Group()
for i in range(3):
new_x = random.randrange(0, display_width)
new_y = random.randrange(0, display_height)
pygame.transform.rotozoom(pic, rotation, size) # How do I put this in
all_meteors.add(Meteor(new_x, new_y)) #this only allows x and y
我的新主文件看起来像这样
while True:
meteors.all_meteors.update()
meteors.all_meteors.draw(screen)
pygame.display.update()
如何让图像在 meteor 文件中随机旋转和缩放?
我认为首先创建一个 Meteor 对象,然后在将其添加到 all_meteors 之前更新它的图片应该可以解决问题。也许用这样的东西替换 for 循环:
for i in range(3):
new_x = random.randrange(0, display_width)
new_y = random.randrange(0, display_height)
met = Meteor(new_x, new_y)
rotation = random.randint(0, 359) # Some line here to pick a random rotation
size = random.randint(1, 3) # some line here to pick a random scale
met.pic = pygame.transform.rotozoom(met.pic, rotation, size) # How do I put this in
all_meteors.add(met) #this only allows x and y
注意:我忘记了pygame.transform.rotozoom()
是否是就地操作。如果是这样,则将 met.pic = pygame.transform.rotozoom()
替换为 pygame.transform.rotozoom()
-- 删除 met.pic =
.
另一种解决方法是直接调整 class:
class Meteor(pygame.sprite.Sprite):
def __init__(self, x=0, y=0):
pygame.sprite.Sprite.__init__(self)
self.rotation = random.randint(0, 359)
self.size = random.randint(1, 2)
self.image = pic
self.image = pygame.transform.rotozoom(self.image, self.rotation, self.size)
self.rect = self.image.get_rect()
self.rect.center = (x, y)