PyODE Tutorial1 + pygame

PyODEっていう物理演算用のモジュールがあります。
そのPyODE Tutorial1が数字だけでつまらないのでpygameで作ってみた。
まぁ次の章で使うんだけどね。
コードと感想は続きを読むで。
Require: pygame, pyode, gameutil

# 1m = 200px
import ode
import pygame
from pygame import *
import gameutil as gu

class VisibleBody(ode.Body, pygame.sprite.Sprite):
	def __init__(self, world):
		ode.Body.__init__(self, world)
		pygame.sprite.Sprite.__init__(self)
		self.image = pygame.Surface((10, 10))
		self.image.fill((255, 255, 255))
		self.rect = self.image.get_rect()
		pygame.draw.circle(self.image, (255, 0, 0), (5, 5), 5)
	def update(self):
		x, y = body.getPosition()[0:2]
		self.rect.center = (x*200+320, y*200-120)
		print self.rect.center

#Prepare SDL
SCREEN_SIZE = (640, 480)
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
pygame.display.set_caption('')
background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((255, 255, 255))
screen.blit(background, (0, 0))
pygame.display.flip()
clock = pygame.time.Clock()
#Prepare physical world
world = ode.World()
world.setGravity((0, -9.81, 0))
body = VisibleBody(world)
M = ode.Mass()
M.setSphere(2500.0, 0.02)
M.mass = 1.0
body.setMass(M)
body.setPosition((0, 2, 0))
body.addForce((0, 200, 0))
#Prepare sprites
tb = gu.TextBoard(gu.TextRender(gu.load_font(24, "tahoma.ttf"), (0, 0, 0)))
spr = pygame.sprite.RenderPlain([body])
tx = pygame.sprite.RenderPlain([tb])

dt = 0.01
nowtime = 0.0
while 1:
	clock.tick(100/2)
	screen.blit(background, (0, 0))
	for e in pygame.event.get():
		gu.quit(e)
	world.step(dt)
	nowtime += dt
	tb.render(str(nowtime) + "sec.")
	tb.rect.topleft = (0, 0)
	spr.update()
	spr.draw(screen)
	screen.blit(pygame.transform.flip(screen, False, True), (0, 0))
	tx.update()
	tx.draw(screen)
	pygame.display.flip()

当たり前といってしまえば当たり前なんだけど、やっぱり目に見えるって言うのは楽しいなぁ。
あと、やっぱり継承便利。今回は多重継承(?)を使ってみた。できない言語多いんだってね。
インターフェース?なにそれおいしいの?せっかく以前習得した座標変換使用せず。
そのうち使うように書き直す。