2013-02-22 46 views
0

我正在使用Pygame在Python中工作,我想知道如何繪製像素,具體取決於使用光標鍵移動某個對象嗎?通過移動對象來繪製像素

所以,我想要做的是繪製「運動軌跡」,所以對於一個例子,當玩家向右移動他的物體時,程序必須從運動開始到運動結束時,在這個物體後面畫出像素。

任何想法?謝謝!

+1

你有任何代碼來顯示我們? – Mizipzor 2013-02-22 14:19:46

+0

不完全...對象正在用光標鍵移動。帶有事件鍵的典型移動(event.key)。 我只是需要一些例子來繪製移動物體後面的像素。 – lbartolic 2013-02-22 15:48:43

+0

如果對象正在通過光標鍵輸入移動,您肯定有* some * code? – Mizipzor 2013-02-22 15:58:44

回答

0

最簡單的方法是用surface.set_at()

surface.set_at((x, y), color) 

x和y爲你的移動物體的位置。顏色是一個RGB三元組元素,如(100,0,200)

0

您可以跟蹤對象的過去位置。
在下面的代碼中,pygame.Rect正在用箭頭鍵移動。

你會感興趣的部分是在Player類,即

  1. lasts(名單)
    • 此列表保存玩家的先前的立場的記錄。
  2. update_list()(功能)
    • 此功能管理列表,
      • 將當前位置到列表中。
      • 刪除第一個元素,一旦列表長達fade
  3. draw()(功能)
    • 實際上只有for循環在這裏,它使用了索引,並提請衰落Rects。

注意:這是不是最有效的代碼。

守則

import pygame 

bg = (255, 255, 255) 

def add_colors(color1, color2): 
    retval = [] 
    for i in range(3): 
     c1 = color1[i] 
     c2 = color2[i] 
     c = c1+c2 
     if c > 255: # just basic handling 
      c -= 255 
     retval.append(round(int(c))) 
    return tuple(retval) 

def calc_colors(color, fade): 
    retval = [] 

    # calculating the color change rate 
    diff_color = [] 
    for i in range(3): 
     diff = bg[i] - color[i] 
     c_diff = diff/float(fade) 
     diff_color.append(c_diff) 
    diff_color = tuple(diff_color) 

    # get the fading colors 
    lastcolor = bg 
    for i in range(fade): 
     new_color = add_colors(lastcolor, diff_color) 
     retval.append(new_color) 
     lastcolor = new_color 

    return retval[::-1] 

class Player: 
    def __init__(self, color, fade, pygame_Rect_args): 
     """Give arguments as given to pygame.Rect""" 
     self.rect = pygame.Rect(*pygame_Rect_args) 
     self.size = self.rect.size 
     self.vx = 0.0 
     self.vy = 0.0 
     self.lasts = [] 

     self.maincolor = color 
     self.colors = calc_colors(color,fade) 
     self.fade = fade 


    def draw(self): 
     for i in range(len(self.lasts)): 
      pos = self.lasts[i] 
      c_color = self.colors[i] 
      pygame.draw.rect(screen, c_color, pygame.Rect(pos, self.size)) 
     pygame.draw.rect(screen, self.maincolor, self.rect) 

    def update_list(self): 
     self.lasts.append(self.rect.topleft) 
     if len(self.lasts) > self.fade: 
      self.lasts.remove(self.lasts[0]) 

    def update(self): 
     self.rect.x += int(round(self.vx)) 
     self.rect.y += int(round(self.vy)) 

    def handle_keys(self): 
     key = pygame.key.get_pressed() 
     if key[pygame.K_UP]: self.vy -= 0.1 
     if key[pygame.K_DOWN]: self.vy += 0.1 
     if key[pygame.K_LEFT]: self.vx -= 0.1 
     if key[pygame.K_RIGHT]: self.vx += 0.1 


player = Player((255,255,0), 10, (10,10,10,10)) 

pygame.init() 
screen = pygame.display.set_mode((640,480)) 
clock = pygame.time.Clock() 

running = True 
while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
      pygame.quit() 
      break 

    if not running: 
     break 

    player.handle_keys() 
    player.update_list() 
    player.update() 

    screen.fill(bg) 
    player.draw() 
    pygame.display.flip() 

    clock.tick(40) 

你也可以做this tutorial(不是整個事情,只是最後部分(#9))

相關問題