Hi Gregor, On, Fri Jul 23, 2010, Gregor Lingl wrote: > > Hi Marcus, > > Hi Gregor, > > > ... > >> It seems to me that there is a certain lack of examples and ported > >> games to pygame2. Perhaps because porting seems to be quite tedious. > >> > > > > It's absolutely not tedious, but there is a decent lack of resources and > > time. pygame2 is currently developed by one person (me), who has a funny > > and incomplete time sharing model for free time to spend :-D. > > > Would your time sharing model allow for an easy and "asolutely not > tedious" converting the appended > script in a "quasi state of the art" way? It could serve me as a model > or pattern for trying to convert one > of my games, just as a first step to dive into pygame2. [...] Here we go with the "state of the art" conversion of your script :-). As you can see, it is mostly about exchanging the modules and certain API calls as well as changing some arguments (especially colors). I left out the time-based update, you are using with Clock.tick() and applied a static update cycle. To use an approach matching Clock.tick(), you could use sdl.time.get_ticks() and calculate the update delta yourself. Regards Marcus
SCREEN_SIZE = (800, 600) import math import random import pygame2 import pygame2.sprite import pygame2.sdl import pygame2.sdl.constants as sdlconst import pygame2.sdl.video as sdlvideo import pygame2.sdl.wm as sdlwm import pygame2.sdl.event as sdlevent import pygame2.sdl.time as sdltime import pygame2.sdlext.draw as sdlextdraw class Ball(pygame2.sprite.Sprite): def __init__(self, screen, pos): pygame2.sprite.Sprite.__init__(self) self.pos = pos self.r = random.randint(10, 25) self.image = sdlvideo.Surface((2*self.r, 2*self.r)).convert() self.image.set_colorkey(pygame2.Color(0, 0, 0)) sdlextdraw.circle(self.image, pygame2.Color (random.randint(0,255), random.randint(0,255), random.randint(0,255)), (self.r, self.r), self.r) self.rect = pygame2.Rect (self.image.size) phi = 2 * math.pi * random.random() v = random.randint(290, 305)#(50, 400) self.vx = v * math.cos(phi) self.vy = v * math.sin(phi) def update(self, t): x, y = self.pos x += t * self.vx y += t * self.vy if x + self.r > SCREEN_SIZE[0]: x = x - 2 * (x + self.r - SCREEN_SIZE[0]) self.vx = - self.vx elif x < self.r: x = 2 * self.r - x self.vx = - self.vx if y + self.r > SCREEN_SIZE[1]: y = y - 2 * (y + self.r - SCREEN_SIZE[1]) self.vy = - self.vy elif y < self.r: y = 2 * self.r - y self.vy = - self.vy self.rect.center = self.pos = (x, y) def main(): sdlvideo.init () screen = sdlvideo.set_mode(SCREEN_SIZE) sdlwm.set_caption("move some circles") background = sdlvideo.Surface(SCREEN_SIZE).convert() background.fill(pygame2.Color(128, 128, 128)) screen.blit(background, (0, 0)) balls = pygame2.sprite.Group() for i in range(12): balls.add(Ball(screen, (random.randint(20,SCREEN_SIZE[0]-25), random.randint(20,SCREEN_SIZE[1]-25)))) #clock = pygame.time.Clock() running = True while running: #t = clock.tick(60) for event in sdlevent.get(): if event.type == sdlconst.QUIT: running = False # add balls by left-clicking # remove balls by right-clicking if event.type == sdlconst.MOUSEBUTTONDOWN: if event.button == 1: balls.add(Ball(screen, event.pos)) elif event.button == 3: sprites = balls.sprites() if sprites: balls.remove(sprites[0]) balls.clear(screen, background) balls.update(0.016) # ~ 16/1000 balls.draw(screen) screen.flip() sdltime.delay (16) # ~ 60 fps if __name__ == "__main__": main()
Attachment:
pgpYe0aBRRlxg.pgp
Description: PGP signature