我會盡量重構我的問題作爲一個更簡潔和具體的問題。下面是一對夫婦更多打印指令到終端,我試圖用理清什麼錯誤的英雄職業:Pygame雪碧運動,未能更新
代碼:
class Hero(pygame.sprite.Sprite):
"""Moves the hero around the screen, following the mouse"""
#male = load_image("malehero-64.png", -1)
#female = load_image("girlhero-64.png", -1)
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image("girlhero-64.png", -1)
self.rect = self.image.get_rect()
self.rect.topleft = (384,0)
self.target = self.movetarget()
#def setgender(self, gender):
#if gender == "male":
#self.image, self.rect = self.male
#if gender == "female":
#self.image, self.rect = self.female
#self.startingpos = (480, 640)
#self.rect.topleft = (480,640)
#self.target = self.rect.topleft
def movetarget(self):
self.pos = pygame.mouse.get_pos()
self.rect = self.image.get_rect()
self.target = self.rect.topleft
self.targetx,self.targety = self.target
self.oldx, self.oldy = self.rect.topleft
if self.oldx + tilesize < self.pos[0]:
self.targetx = self.oldx + tilesize
if self.oldx > self.pos[0]:
self.targetx = self.oldx - tilesize
if self.oldx + tilesize >= self.pos[0] and self.oldx < self.pos[0]:
self.targetx = self.oldx
if self.oldy + tilesize < self.pos[1]:
self.targety = self.oldy + tilesize
if self.oldy > self.pos[1]:
self.targety = self.oldy - tilesize
if self.oldy + tilesize >= self.pos[1] and self.oldy < self.pos[1]:
self.targety = self.oldy
self.target = (self.targetx,self.targety)
print("NOW THE TARGET IS SET!!!!!!!!")
print(self.targetx,self.targety)
return self.target
def update(self):
"Move the hero closer to the last mouse position clicked self.target"
self.rect = self.image.get_rect()
print("topleft before")
print(self.rect.topleft)
self.xmove = 0
self.ymove = 0
print("update target is")
print(self.target)
if self.rect.topleft[0] > 960:
self.rect.topleft = (960, self.rect.topleft[1])
if self.rect.topleft[0] < 0:
self.rect.topleft = (0, self.rect.topleft[1])
if self.rect.topleft[0] >= 0 and self.rect.topleft[0] <= 960:
if self.rect.topleft[0] < self.target[0]:
self.xmove = 4
if self.rect.topleft[1] < self.target[1]:
self.ymove = 4
if self.rect.topleft[0] > self.target[0]:
self.xmove = -4
if self.rect.topleft[1] > self.target[1]:
self.ymove = -4
self.newx=self.rect.topleft[0]+self.xmove
self.newy=self.rect.topleft[1]+self.ymove
print("newx and newy")
print (self.newx,self.newy)
self.rect.topleft = (self.newx,self.newy)
print("topleft after")
print(self.rect.topleft)
運行時,將終端的片斷是如下:
代碼:
NOW THE TARGET IS SET!!!!!!!!
64 64
NOW THE TARGET IS SET!!!!!!!!
64 64
NOW THE TARGET IS SET!!!!!!!!
64 64
NOW THE TARGET IS SET!!!!!!!!
64 64
topleft before
(0, 0)
update target is
(0, 0)
newx and newy
0 0
topleft after
(0, 0)
topleft before
(0, 0)
update target is
(0, 0)
newx and newy
0 0
topleft after
(0, 0)
topleft before
(0, 0)
update target is
(0, 0)
newx and newy
0 0
topleft after
(0, 0)
什麼,我試圖做到: 當單擊遊戲地圖上的鼠標,Hero.movetarget是CAL引導,並設置一個遠離當前矩形的移動目標。然後,當字符串組在組中的所有精靈上調用更新方法(這裏是正確的術語?)時,他們應該向該目標方塊移動幾個像素。
當更新方法只是簡單地將所有精靈移動到一個平鋪中時,我就有了這樣的精靈。我試圖改變它,讓精靈們滑過幾幀到他們新的目標磚塊,而不是簡單地在那裏跳躍。
當我讀到上面的終端打印輸出時,Hero.movetarget中設置的self.target變量與Hero.update開始處打印到終端的self.target不同。
我不明白爲什麼在Hero.movetarget中改變self.target不會改變Hero.update中的self.target。
請原諒我對問題措辭的任何無知,並預先感謝您提供的任何見解。
的load_image類是從Pygame的黑猩猩教程採取: 代碼: 代碼:
def load_image(name, colorkey=None):
fullname = os.path.join('data', name)
try:
image = pygame.image.load(fullname)
except pygame.error as message:
print ('Cannot load image:', name)
raise SystemExit(message)
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
調用英雄類別的節目,編輯什麼,我認爲是相關部分的主體
hero = Hero()
charactersprites = pygame.sprite.Group((hero))
mathsterGroup = pygame.sprite.Group()
mathster = Mathster((0, 0))
mathsterGroup.add((mathster))
charactersprites.add((mathster))
mathster = Mathster((128, 256))
mathsterGroup.add((mathster))
charactersprites.add((mathster))
mathster = Mathster((512, 320))
mathsterGroup.add((mathster))
charactersprites.add((mathster))
inventory = TextObject("Hit a mathster!", Font, (0,0,0), (1024,50))
charactersprites.add((inventory))
nextproblem = Input(x=825, color=(255,25,25),
heroGroup = pygame.sprite.Group()
heroGroup.add(hero)
clock = pygame.time.Clock()
while 1:
events1 = pygame.event.get()
for event in events1:
if event.type == pygame.QUIT: sys.exit()
if not menu:
for events in events1:
if event.type == MOUSEBUTTONDOWN:
mouseclick = 1
if not collisiontest and mouseclick:
for heros in charactersprites:
hero.movetarget()
for mathsters in mathsterGroup:
mathster.movetarget()
mouseclick = 0
screen.fill((50,100,200))
gamebackground = GameMap()
if not mapdrawn:
levelmap = gamebackground.drawmap()
mapdrawn = 1
screen.blit(levelmap, (0,0))
wallGroup.draw(screen)
nextproblem.update()
nextproblem.draw(screen)
charactersprites.update()
charactersprites.draw(screen)
screen.fill((50,100,200))
screen.blit(menubackground, (0,0))
menusprites.update()
menusprites.draw(screen)
pygame.display.flip()
clock.tick(120)
在此先感謝任何看看並願意伸出援助之手的人。我一直在閱讀大量的教程來嘗試教育自己,但我一直無法找到我出錯的地方。
提高我的代碼的任何提示都是值得歡迎的,儘管修復我的不動的英雄是我的首要任務。
編輯來制定一個更具體的問題。
我解決了這個問題,但我仍然不確定它爲什麼不起作用。 charactersprites.update和charactersprites.draw沒有更新和繪製所有組成員,因此我將精靈分成更小的組,並且它們更新並正確繪製。 –