Hi, It's resolved.
Thank you very much for your reply ! On Mon, Jan 23, 2012 at 00:34, Franck Dernoncourt < [email protected]> wrote: > > On Sun, Jan 22, 2012 at 23:52, Michaël ELBAZ <[email protected]> wrote: > >> Hello, >> >> How can we modify this script to be able to move the yellow dot with the >> keys of a keyboard? >> >> # -*- coding: cp1252 -*- >> >> full_screen = True >> window_size = (1024, 768) >> >> import sys, random, pygame, os, platform >> from pygame.locals import * >> from math import * >> >> delta=2 >> delta_step=1 >> >> circles = ((0, delta),) >> >> circle_scale = 0.3 >> circle_radius = 8 >> n_grid = 3 >> grid_spacing = 0.2 >> grid_length = 0.05 >> grid_width = 2 >> rotation_speed = pi/2 >> grid_color = (100, 100, 255) >> fix_radius = 8 >> bg_color = (0, 0, 0) >> circle_color = (255, 255, 0) >> disapp_frames = 1 >> >> window_center = (window_size[0]/2.0, window_size[1]/2.0) >> window_scale = min(window_size)/2.0 >> def coord(real): >> """takes real coordinates, returns pixel coordinates""" >> return (int(round(real[0]*window_scale + window_center[0])),\ >> int(round(-real[1]*window_scale + window_center[1]))) >> g_cos, g_sin = 1, 0 >> def set_rotation(angle): >> """sets up rotation""" >> global g_cos, g_sin >> g_cos, g_sin = cos(angle), sin(angle) >> def rotate(point): >> """rotates a 3D point about the Z-axis by given angle set by >> set_rotation()""" >> return (g_cos*point[0] + g_sin*point[1], -g_sin*point[0] + >> g_cos*point[1]) >> >> # graphics initializations >> frames, show = 0, True >> try: >> pygame.init() >> if full_screen: >> surf = pygame.display.set_mode(window_size, HWSURFACE | >> FULLSCREEN | DOUBLEBUF) >> else: >> surf = pygame.display.set_mode(window_size) >> >> t0 = pygame.time.get_ticks() >> while True: >> >> >> for event in pygame.event.get(): >> if event.type == KEYDOWN: >> if event.key == K_ESCAPE: >> raise Exception() >> elif event.type == MOUSEBUTTONDOWN: frames, show = 0, False >> elif event.type == MOUSEBUTTONUP: frames, show = 0, True >> >> >> >> for circ in circles: >> c = (circle_scale*circ[0], circle_scale*circ[1]) >> if show: >> col = (150, 150, 0) >> pygame.draw.circle(surf, col, coord(c), circle_radius, 0) >> else: >> step = 150/disapp_frames >> lev = max(0, 150 - frames*step) >> col = (lev, lev, 0) >> if lev > 0: >> pygame.draw.circle(surf, col, coord(c), >> circle_radius, 0) >> >> for event in pygame.event.get(): >> >> if event.key == K_LEFT: >> delta -= delta_step >> if event.key == K_RIGHT: >> delta += delta_step >> >> if show: >> col = (150, 150, 0) >> pygame.draw.circle(surf, col, coord(c), >> circle_radius, 0) >> else: >> step = 150/disapp_frames >> lev = max(0, 150 - frames*step) >> col = (lev, lev, 0) >> if lev > 0: >> pygame.draw.circle(surf, col, coord(c), >> circle_radius, 0) >> >> >> pygame.draw.circle(surf, grid_color, coord((0, 0)), fix_radius) >> pygame.display.flip() >> frames += 1 >> >> finally: pygame.quit() >> >> Thank you very much ! >> >> -- >> M.E. >> > > > > Hi Michaël, > > I quickly edited your code, here is a working version below (which still > needs some clean up). > > In short: > 1) Only loop once in pygame.event.get() > 2) Always check event.type == KEYDOWN before accessing event.key > 3) Call surf.fill() in each iteration > > > ########################################### > # -*- coding: cp1252 -*- > > full_screen = False > window_size = (1024, 768) > > import sys, random, pygame, os, platform > from pygame.locals import * > from math import * > > delta=3 > delta_step=0.1 > > circles = ((0, delta),) > > circle_scale = 0.3 > circle_radius = 8 > n_grid = 3 > grid_spacing = 0.2 > grid_length = 0.05 > grid_width = 2 > rotation_speed = pi/2 > grid_color = (100, 100, 255) > fix_radius = 8 > bg_color = (0, 0, 0) > circle_color = (255, 255, 0) > disapp_frames = 1 > > window_center = (window_size[0]/2.0, window_size[1]/2.0) > window_scale = min(window_size)/2.0 > def coord(real): > """takes real coordinates, returns pixel coordinates""" > return (int(round(real[0]*window_scale + window_center[0])),\ > int(round(-real[1]*window_scale + window_center[1]))) > g_cos, g_sin = 1, 0 > def set_rotation(angle): > """sets up rotation""" > global g_cos, g_sin > g_cos, g_sin = cos(angle), sin(angle) > def rotate(point): > """rotates a 3D point about the Z-axis by given angle set by > set_rotation()""" > return (g_cos*point[0] + g_sin*point[1], -g_sin*point[0] + > g_cos*point[1]) > > # graphics initializations > frames, show = 0, True > try: > pygame.init() > if full_screen: > surf = pygame.display.set_mode(window_size, HWSURFACE | FULLSCREEN > | DOUBLEBUF) > else: > surf = pygame.display.set_mode(window_size) > > t0 = pygame.time.get_ticks() > while True: > surf.fill((0, 0, 0)) > circles = ((delta, 0),) > for circ in circles: > > c = coord((circle_scale*circ[0], circle_scale*circ[1])) > if show: > col = (150, 150, 0) > pygame.draw.circle(surf, col, c, circle_radius, 0) > else: > step = 150/disapp_frames > lev = max(0, 150 - frames*step) > col = (lev, lev, 0) > if lev > 0: > pygame.draw.circle(surf, col, c, circle_radius, 0) > > for event in pygame.event.get(): > if event.type == KEYDOWN and event.key == K_ESCAPE: > raise Exception() > elif event.type == MOUSEBUTTONDOWN: frames, show = 0, False > elif event.type == MOUSEBUTTONUP: frames, show = 0, True > if event.type == KEYDOWN and event.key == K_LEFT: > delta -= delta_step > if event.type == KEYDOWN and event.key == K_RIGHT: > delta += delta_step > > if show: > col = (150, 150, 0) > pygame.draw.circle(surf, col, c, circle_radius, 0) > else: > step = 150/disapp_frames > lev = max(0, 150 - frames*step) > col = (lev, lev, 0) > if lev > 0: > pygame.draw.circle(surf, col, c, > circle_radius, 0) > > # blue circle > pygame.draw.circle(surf, grid_color, coord((0, 0)), fix_radius) > pygame.display.flip() > frames += 1 > > > > > finally: pygame.quit() > ########################################### > > > Best, > F > > ---- > Franck Dernoncourt > [email protected] > http://franck-dernoncourt.com > > > > > -- M.E.
