[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[pygame] Re: question about scrolling the world
- To: pygame-users@xxxxxxxx
- Subject: [pygame] Re: question about scrolling the world
- From: Michael Fiano <michael.fiano@xxxxxxxxx>
- Date: Fri, 21 Mar 2008 23:48:30 -0400
- Delivered-to: archiver@xxxxxxxx
- Delivered-to: pygame-users-outgoing@xxxxxxxx
- Delivered-to: pygame-users@xxxxxxxx
- Delivery-date: Fri, 21 Mar 2008 23:48:32 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:date:from:to:subject:message-id:in-reply-to:references:x-mailer:mime-version:content-type:content-transfer-encoding; bh=V8mVSaLaRlGuLW86ORUNS/0d/enthEtpvKJY23+zL+I=; b=PRGJ3z7RpD67mRuXj0ep4k9abzHsWX4B2Zf0In7iBA/NZUbuOYuBPfDfnBK7Zz9V79fFkVOBGNE5u7NjKzbHNjABPrywvVevDCPz+kEzntZO393eQz8YErZb/j97jx+lK6OsehMKGZumOlZkxgSwQvReMeJXgJCRTHH4XcDB94Y=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=date:from:to:subject:message-id:in-reply-to:references:x-mailer:mime-version:content-type:content-transfer-encoding; b=J/fPoU7Un5qP3fyUtOw9x5rKnnzn3CFI6CkQxtjqzUD/+ItTaZiZekq/pSIf17bEL/JDn8QV5sFYIgfEYIBOpdTgnvMjY9ijswDoYZUvcwrMyCwB32DN2JQrXJzh3HGS/HZ0BVVNoR13OE944w4FPCex3G0GDMBZRB/K+E/Hp4I=
- In-reply-to: <20080320132903.7042c386@xxxxxxxxxxxxx>
- References: <20080320132903.7042c386@xxxxxxxxxxxxx>
- Reply-to: pygame-users@xxxxxxxx
- Sender: owner-pygame-users@xxxxxxxx
On Thu, 20 Mar 2008 13:29:03 -0400
Michael Fiano <michael.fiano@xxxxxxxxx> wrote:
I got it to scroll finally. The only problem I'm having now is making
the scrolling stop so the player doesn't fall off the world :) The
player stops at the north and west edges...but continues to scroll,
walking off the world in the other 2 directions. Can anyone give me
some pointers? The relevant code is in the update() function (yes, i
know my update function is very inefficient...I'm trying to get it to
work before I rewrite it). Thanks for all the help.
import os, sys, random
import pygame
from pygame.locals import *
import config
from data import *
class Player:
def __init__(self, screen, background, topx, topy):
# We need access to the screen
self.screen = screen
# We need access to the background surface
self.background = background
# Get the screen's dimensions from the config file
self.SCREENWIDTH = config.screen_size[0]
self.SCREENHEIGHT = config.screen_size[1]
# Position the player in the center of the background
# facing south
self.x = self.SCREENWIDTH/2
self.y = self.SCREENHEIGHT/2
self.rect = pygame.Rect(self.x, self.y, 24, 32)
self.frame = 3
# Define some needed variables
self.topx = topx
self.topy = topy
self.move = ""
self.speed = 1
self.dirtyrects = []
self.scrollpos = [ 0, 0 ]
# Define the graphic containing the player's sprites
self.sprites_player = SpriteSheet('player.png')
# Define the various frames within the player's spritesheet
self.playerimgs = self.sprites_player.imgsat([ \
(24, 5, 24, 26), # Frame 0: North1
(0, 6, 24, 26), # Frame 1: North2
(48, 6, 24, 26), # Frame 2: North3
(24, 69, 24, 26), # Frame 3: South1
(0, 70, 24, 26), # Frame 4: South2
(48, 70, 24, 26), # Frame 5: South3
(24, 101, 24, 26), # Frame 6: West1
(0, 102, 24, 26), # Frame 7: West2
(48, 102, 24, 26), # Frame 8: West3
(24, 37, 24, 26), # Frame 9: East1
(0, 38, 24, 26), # Frame 10: East2
(48, 38, 24, 26)],-1) # Frame 11: East3
def draw(self):
# Define the shadow graphic
shadow,null = load_graphic("shadow.png")
# Draw the player's shadow
self.screen.blit(shadow, (self.x, self.y+13))
# Draw the player to the screen
self.screen.blit(self.playerimgs[self.frame], (self.x,self.y))
self.dirtyrects.append(self.rect)
def update(self, direction):
# Move the player in the specified direction
self.dirtyrects = []
if direction is "north":
self.frame = 0
for x in range(24):
self.screen.fill((0,0,0))
self.screen.blit(self.background, self.scrollpos)
self.y = self.y-self.speed
if self.y < self.SCREENHEIGHT/4:
self.y = self.SCREENHEIGHT/4
if self.y > self.scrollpos[1]:
self.scrollpos[1]+=self.speed
print self.background.get_height()
self.rect[1] = self.y
self.draw()
if x % 12 == 0:
self.frame+=1
if self.frame > 2:
self.frame = 1
if x == 23:
self.frame = 0
pygame.time.delay(5)
pygame.display.update()
if direction is "south":
self.frame = 3
for x in range(24):
self.screen.fill((0,0,0))
self.screen.blit(self.background, self.scrollpos)
self.y = self.y+self.speed
if self.y > self.SCREENHEIGHT - self.SCREENHEIGHT/4:
self.y = self.SCREENHEIGHT - self.SCREENHEIGHT/4
if self.y > self.scrollpos[1]:
self.scrollpos[1]-=self.speed
self.rect[1] = self.y
self.draw()
if x % 12 == 0:
self.frame+=1
if self.frame > 5:
self.frame = 4
if x == 23:
self.frame = 3
pygame.time.delay(5)
pygame.display.update()
if direction is "west":
self.frame = 6
for x in range(24):
self.screen.fill((0,0,0))
self.screen.blit(self.background, self.scrollpos)
self.x = self.x-self.speed
if self.x < self.SCREENWIDTH/4:
self.x = self.SCREENWIDTH/4
if self.x > self.scrollpos[0]:
self.scrollpos[0]+=self.speed
self.rect[0] = self.x+self.speed
self.draw()
if x % 12 == 0:
self.frame+=1
if self.frame > 8:
self.frame = 7
if x == 23:
self.frame = 6
pygame.time.delay(5)
pygame.display.update()
if direction is "east":
self.frame = 9
for x in range(24):
self.screen.fill((0,0,0))
self.screen.blit(self.background, self.scrollpos)
self.x = self.x+self.speed
if self.x >= self.SCREENWIDTH - self.SCREENWIDTH/4:
self.x = self.SCREENWIDTH - self.SCREENWIDTH/4
if self.x > self.scrollpos[0]:
scroll_temp = self.scrollpos[0]
self.scrollpos[0]-=self.speed
self.rect[0] = self.x-self.speed
self.draw()
if x % 12 == 0:
self.frame+=1
if self.frame > 11:
self.frame = 10
if x == 23:
self.frame = 9
pygame.time.delay(5)
pygame.display.update()