On Sun, Jan 22, 2012 at 23:52, Michaël ELBAZ <mielbaz@xxxxxxxxx> 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 = Truewindow_size = (1024, 768)import sys, random, pygame, os, platformfrom pygame.locals import *from math import *delta=2delta_step=1circles = ((0, delta),)circle_scale = 0.3circle_radius = 8n_grid = 3grid_spacing = 0.2grid_length = 0.05grid_width = 2rotation_speed = pi/2grid_color = (100, 100, 255)fix_radius = 8bg_color = (0, 0, 0)circle_color = (255, 255, 0)disapp_frames = 1window_center = (window_size[0]/2.0, window_size[1]/2.0)window_scale = min(window_size)/2.0def 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, 0def set_rotation(angle):"""sets up rotation"""global g_cos, g_sing_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 initializationsframes, show = 0, Truetry: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, Falseelif event.type == MOUSEBUTTONUP: frames, show = 0, Truefor 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_frameslev = 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_stepif event.key == K_RIGHT:delta += delta_stepif show:col = (150, 150, 0)pygame.draw.circle(surf, col, coord(c), circle_radius, 0)else:step = 150/disapp_frameslev = 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 += 1finally: 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.key3) Call surf.fill() in each iteration############################################ -*- coding: cp1252 -*-full_screen = Falsewindow_size = (1024, 768)import sys, random, pygame, os, platformfrom pygame.locals import *from math import *delta=3delta_step=0.1circles = ((0, delta),)circle_scale = 0.3circle_radius = 8n_grid = 3grid_spacing = 0.2grid_length = 0.05grid_width = 2rotation_speed = pi/2grid_color = (100, 100, 255)fix_radius = 8bg_color = (0, 0, 0)circle_color = (255, 255, 0)disapp_frames = 1window_center = (window_size[0]/2.0, window_size[1]/2.0)window_scale = min(window_size)/2.0def 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, 0def set_rotation(angle):"""sets up rotation"""global g_cos, g_sing_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 initializationsframes, show = 0, Truetry: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_frameslev = 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, Falseelif event.type == MOUSEBUTTONUP: frames, show = 0, Trueif event.type == KEYDOWN and event.key == K_LEFT:delta -= delta_stepif event.type == KEYDOWN and event.key == K_RIGHT:delta += delta_stepif show:col = (150, 150, 0)pygame.draw.circle(surf, col, c, circle_radius, 0)else:step = 150/disapp_frameslev = max(0, 150 - frames*step)col = (lev, lev, 0)if lev > 0:pygame.draw.circle(surf, col, c, circle_radius, 0)# blue circlepygame.draw.circle(surf, grid_color, coord((0, 0)), fix_radius)pygame.display.flip()frames += 1finally: pygame.quit()###########################################Best,F----Franck Dernoncourt
franck.dernoncourt@xxxxxxxxx