|
Programming Guru
Join Date: Apr 2005
Location: Waterloo, Ontario
Posts: 1,885
Rep Power: 5 
|
Weird Problem
events.py
from pygame.image import load
#from pygame.draw import circle
from random import randrange
class Snow:
def __init__(self, snowfall, speed, spinspeed, size):
self.snow = []
self.width = size[0]
self.height = size[1]
for i in range(snowfall):
self.snow.append( [ randrange(self.width),
randrange(self.height),
randrange(1,4),
randrange(1,3),
randrange(2),
randrange(1,4)] )
self.snowflakes = { 1:load('images/snowflake1.bmp'), 2:load('images/snowflake2.bmp'), 3:load('images/snowflake3.bmp') }
self.speed = speed
self.spinspeed = spinspeed
self.i = 0
self.ii = 0
def routine(self, image, x, y, to_type, to_place):
# assume it's an "area", and check to see if on screen by
# using the x, y and the same image blit formula
for f in range(len(self.snow)):
image.blit( self.snowflakes[self.snow[f][5]], (self.snow[f][0]-4, self.snow[f][1]-4))
#circle( image, (200, 200, 200), (self.snow[f][0], self.snow[f][1]), 3, 0 )
self.i += 1
if self.i == self.speed:
self.i = 0
spin = False
self.ii += 1
if self.ii == self.spinspeed:
self.ii = 0
spin = True
for f in range(len(self.snow)):
if self.snow[f][4] == 0:
self.snow[f][0] -= self.snow[f][3]
else:
self.snow[f][0] += self.snow[f][3]
self.snow[f][1] += self.snow[f][2]
if spin:
self.snow[f][5] = [2, 3, 1][self.snow[f][5]-1]
if self.snow[f][0] > self.width+4 or self.snow[f][0] < -4 or\
self.snow[f][1] > self.height+4 or self.snow[f][1] < -4:
self.snow[f] = [ randrange(self.width),
-4,
randrange(1,4),
randrange(1,3),
randrange(2),
randrange(1,4)]
return image
main.py
from pygame import init
from pygame.image import load
from pygame.display import set_mode, flip, quit
from sys import exit
from pygame.event import get
from pygame.locals import QUIT
from events import Snow
from time import sleep
class Soulodine:
def __init__(self):
self.screen = set_mode((324, 295))
self.events = [Snow(100, 1, 4, map.get_size())]
def ingame(self):
map = load("images/area1.png")
while 1:
map = load("images/area1.png") ### THIS LINE
for event in self.events:
newmap = event.routine(map, 0, 0, 0, 0)
self.screen.blit( newmap, (0, 0) )
flip()
for event in get():
if event.type == QUIT:
quit()
exit()
Soulodine().ingame()
Look at the line commented "THIS LINE", if you take that out, the variable will not reset itself as it logically should. And therefore the snowflakes continue overlapping the screen. Replace the image names with some fake stuff to test it out.
Help? 
|