我正在使用Pygame在Python中工作,我想知道如何繪製像素,具體取決於使用光標鍵移動某個對象嗎?通過移動對象來繪製像素
所以,我想要做的是繪製「運動軌跡」,所以對於一個例子,當玩家向右移動他的物體時,程序必須從運動開始到運動結束時,在這個物體後面畫出像素。
任何想法?謝謝!
我正在使用Pygame在Python中工作,我想知道如何繪製像素,具體取決於使用光標鍵移動某個對象嗎?通過移動對象來繪製像素
所以,我想要做的是繪製「運動軌跡」,所以對於一個例子,當玩家向右移動他的物體時,程序必須從運動開始到運動結束時,在這個物體後面畫出像素。
任何想法?謝謝!
您可以跟蹤對象的過去位置。
在下面的代碼中,pygame.Rect正在用箭頭鍵移動。
你會感興趣的部分是在Player
類,即
lasts
(名單)update_list()
(功能)
fade
。draw()
(功能)
注意:這是不是最有效的代碼。
守則
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))
你有任何代碼來顯示我們? – Mizipzor 2013-02-22 14:19:46
不完全...對象正在用光標鍵移動。帶有事件鍵的典型移動(event.key)。 我只是需要一些例子來繪製移動物體後面的像素。 – lbartolic 2013-02-22 15:48:43
如果對象正在通過光標鍵輸入移動,您肯定有* some * code? – Mizipzor 2013-02-22 15:58:44