2017-02-24 78 views
0

現在,我所做的只是創建一個精靈,如圖所示。 進一步做一些有趣的事情,想到線程我添加了一個線程,將檢查光標位置,因此更新全球x & y導致改變精靈位置由display.update 提前如何在pygame中使用光標移動來移動Sprite圖像?

from pygame import * 
    from main import * 
    import threading 
    import sys 
    #lets add our sprites 

    (x,y) = (0, 0) 

    class threading1(threading.Thread): 


     def run(self): 
      global x,y 
      clockobj1 = pygame.time.Clock() 
      while (True): 

       clockobj1.tick(6) 
       (x,y)=pygame.mouse.get_pos() 
       display.update() 


    class sprites(pygame.sprite.Sprite): 

     def __init__(self,color= redd, width=120, height=120): 
      super(sprites,self).__init__() 
      self.image = pygame.Surface((width,height)) 
      self.image.fill(color) 

      self.rect=self.image.get_rect() 
      self.rect.move_ip(x,y) 
      display.update() 



    if __name__ == '__main__': 
     clockobj = pygame.time.Clock() 


     init() 
     mainwin = pygame.display.set_mode((720,640)) 

     sprite1 = sprites() 


     spritegrp = pygame.sprite.Group() 
     spritegrp.add(sprite1) 
     spritegrp.update() 
     mainwin.fill(blue) 
     spritegrp.draw(mainwin) 
     threadingobj = threading1() 
     threadingobj.start() 


     x = True 
     while(x): 
      display.update() 

      for evt in event.get() : 
      if (evt.type == QUIT) : 
       quit() 
       x=False 
      clockobj.tick(40) 

trigered我是新手,所以我可能我錯在很多方面......所以請大家多多包涵我.... 一個感謝很多***下面是我最新的代碼----------根據答案更新***請檢查

import pygame 
    from main import * 
    import threading 
    import sys 

    # lets add our sprites 


    class Sprites(pygame.sprite.Sprite): 
     def __init__(self, color=redd, width=120, height=120): 
      super().__init__() 
      self.image = pygame.Surface((width, height)) 
      self.image.fill(color) 
      self.rect = self.image.get_rect() 

     def updaterect(self): 
      print("i m in updatereact") 
      print(pygame.mouse.get_pos()) 
      self.rect.center= pygame.mouse.get_pos() 
      pygame.display.update() 
    if __name__ == '__main__': 
     clockobj = pygame.time.Clock() 
     pygame.init() 
     mainwin = pygame.display.set_mode((720,640)) 
     sprite1 = Sprites() 
     sprite1.updaterect() 
     spritegrp = pygame.sprite.Group() 
     spritegrp.add(sprite1) 
     spritegrp.update() 
     mainwin.fill(blue) 
     spritegrp.draw(mainwin) 
     x = True 
     while x: 
      sprite1.updaterect() 
      pygame.display.update() 
      for evt in pygame.event.get() : 
      if evt.type == pygame.QUIT : 
       quit() 
       x=False   
+0

我不使用Python中的Pygame的精靈,也沒有階級,所以我不能修復您的代碼,但嘗試將精靈位置傳送到每個循環的光標位置。每個循環都使它們的x和y位置相同。 – Douglas

+0

請檢查我的更新 –

回答

0

線程只會讓事情變得複雜。擺脫它,並採取self.rect.move_ip(x,y)display.update()__init__爲類。在類中創建一個名爲update()的函數。只是說這個函數會移動矩形。 self.rect.center = pygame.mouse.get_pos()。然後在主遊戲循環中,將sprite1.update()放在那裏,或者通過使用組名替代(如您對spritegrp.update()所做的那樣),然後在那裏調用display.update()而不是在函數中更新它。

其他的事情:

  • super().__init__()不需要任何ARGS
  • ifwhile循環不需要括號
  • 你不需要導入主(我可能是錯的這個但我不這麼認爲)
  • from module import *是一個不好的習慣,但如果你打算這樣做(我不推薦它),你不能把module.method放在任何地方。你做了from pygame import *,但仍然把pygame.mouse和其他類似的。也許你的意思是from pygame.locals import *
  • 冒號在它們和單詞之間沒有空格,即for evt in event.get() :不好
  • 縮進也應該是一個製表符或四個空格的長度。 (什麼是您使用IDE中的大部分自動做呢?)
  • 變量賦值有空格:x = False
+0

先生請檢查我​​的更新,我現在面臨的問題是,它不是更新,在開始時它移動到光標位置這就是所有..它正在做 –

+0

@KunalSikri代碼不可運行,可以請使用可運行代碼更新,並更改上述內容。 – Cole128

+0

我已經重新審查了pycharm上的代碼,它運行良好,沒有任何錯誤,但代碼的動機仍然沒有達到。謝謝 –