我在Python中使用Pygame库制作了一个游戏。在它里面,我有两个类,Main类,它会导致屏幕出现,blits图像等等,以及Monster类,它创建并呈现我的怪物精灵,在这里它们是:
主要课程:
import pygame, sys, random
from monster import *
pygame.init()
class Main:
clock = pygame.time.Clock()
screenSize = (500,500)
background = pygame.image.load("C:/Users/Nathan/PycharmProjects/Monsters II A Dark Descent/images/background.jpg")
screen = pygame.display.set_mode(screenSize)
pygame.display.set_caption("MONSTERS!")
monsters = pygame.sprite.Group()
counter = 0
x = 450
while counter < 5:
y = random.randint(50,450)
monster = Monster(x,y)
monsters.add(monster)
counter = counter + 1
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.blit(background,(0,0))
for monster in monsters:
monster.render(screen)
x=x-1 #This doesn't move the sprites
clock.tick(60)
pygame.display.flip()
Main()
怪物类:
import random, pygame
class Monster(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.image = pygame.image.load("C:\Users\Nathan\PycharmProjects\Monsters II A Dark Descent\images\monster.png")
def render(self, screen):
screen.blit(self.image, (self.x, self.y))
我希望怪物连续向左移动x值,直到它们到达屏幕的另一侧。在那之后,我希望他们传送回他们的起点再做一次。在主类中,我尝试在主循环中添加“x = x + 1”以至少让它们移动一个,但它不起作用。我也尝试用“x = x + 1”制作一个不同的循环,但这个循环不起作用。如果您需要更多详细信息,请通知我。谢谢你的时间。
答案 0 :(得分:3)
您正在修改x变量,该变量仅用于创建对象。要修改Monster对象的成员,您需要更改它们:
monster.x += 1
我建议创建一个新的函数来移动精灵,并将其重置回位置。这些方面的东西:
def move(self):
if(self.x > 500):
self.x = 0
self.x += 1
答案 1 :(得分:0)
在主循环中,您需要更新怪物中的x值。你可以在遍布怪物的循环中完成它:
for monster in monsters:
monster.x = monster.x-1
monster.render(screen)
注意,monster.x
表示更改此特定怪物的x值。如果你只做x
,python不知道你在谈论怪物里面的x值。