A little stuck and could do with any sudjestions.
Aim:-
When the character goes past the middle of the screen, the background & level
move downwards so the character can get to higher places, think sonic the
hedgehog.
This is the bit I'm having problems with, I can get the character to get to the
center, the background moves up & down but the character won't go back down
when the level returns to normal height.
if bkGroundRect['rect'].top < 0 and charRect['rect'].top <
winCenterRect.top:
bkGroundRect['rect'].top += spY
platRect['rect'].top += spY
jumpRect.top += spY
charRect['dir'] = STOP
if levelRect['rect'].bottom > winHeight and charRect['rect'].centery ==
winCenterx:
bkGroundRect['rect'].bottom -= spY
platRect['rect'].bottom -= spY
# jumpRect.bottom -= spY
charRect['dir'] = STOP
#--this won't execute ? --#
if levelRect['rect'].bottom <= winHeight:
if charRect['rect'].centery >= winCenterx and charRect['rect'].centerx
< jumpRect.centerx:
charRect['dir'] = DOWN
I've included the whole code as a note pad so the above makes more sense, don't
worry about all the comments, that's just for my convenience.
Thanks guys
Mark
'knight meets wall, wall won't let knight pass, knight says 'neh'
import pygame, sys, time
from pygame.locals import *
pygame.init()
#--Display--#
winWidth = 400
winHeight = 400
winCenterx = int(winWidth / 2)
winCentery = int(winHeight / 2)
window = pygame.display.set_mode((winWidth, winHeight), 0, 32)
#--Display--#
#--Images--#
BackgroundImage = pygame.image.load('Background.jpg')
FloorImage = pygame.image.load('Floor.jpg')
BallImage = pygame.image.load('Ball.jpg')
#--Images--#
#--Movement Variables--#
forward = False
backward = False
jump = False
UP = 8
DOWN = 2
STOP = 5
spX = 3
spY = 5
#--Movement Variables--#
#--Level Rects--#
bkGroundScImage = pygame.transform.scale(BackgroundImage, (1000, 1000))
bkGroundRect = {'rect':pygame.Rect(0, -650, 1000, 1000), 'dir':UP}
levelScImage = pygame.transform.scale(FloorImage, (1000, 50))
levelRect = {'rect':pygame.Rect(0, winHeight - 50, 1000, 50), 'dir':DOWN}
platScImage = pygame.transform.scale(FloorImage, (100, 25))
platRect = {'rect':pygame.Rect(75, 270, 100, 25), 'dir':DOWN}
platScImage1 = pygame.transform.scale(FloorImage, (100, 25))
platRect1 = {'rect':pygame.Rect(225, 250, 100, 25), 'dir':UP}
platScImage2 = pygame.transform.scale(FloorImage, (100, 25))
platRect2 = {'rect':pygame.Rect(375, 200, 100, 25), 'dir':UP}
platScImage3 = pygame.transform.scale(FloorImage, (100, 25))
platRect3 = {'rect':pygame.Rect(575, 150, 100, 25), 'dir':UP}
platScImage4 = pygame.transform.scale(FloorImage, (100, 25))
platRect4 = {'rect':pygame.Rect(675, 150, 100, 25), 'dir':UP}
platScImage5 = pygame.transform.scale(FloorImage, (100, 25))
platRect5 = {'rect':pygame.Rect(575, 0, 100, 25), 'dir':UP}
platScImage6 = pygame.transform.scale(FloorImage, (100, 25))
platRect6 = {'rect':pygame.Rect(375, 0, 100, 25), 'dir':UP}
#--Level Rects--#
#--Caracter Rects--#
charScImage = pygame.transform.scale(BallImage, (50, 50))
charRect = {'rect':pygame.Rect(20, 300, 50, 50), 'dir':DOWN}
jumpScImage = pygame.transform.scale(FloorImage, (50, 140))
jumpRect = pygame.Rect(20, 210, 50, 140)
winCenterRectScImage = pygame.transform.scale(FloorImage, (60, 60))
winCenterRect = pygame.Rect(winCenterx - 30, winCentery - 30, 60, 60)
#--Caracter Rects--#
#--Collision Variables--#
solidX = int(charRect['rect'].width - spX - spX - 2)
solidY = int(charRect['rect'].height - spY - spY- 1)
#--Collision Variables--#
while True:
#--Level & scenery--#
window.blit(bkGroundScImage, bkGroundRect['rect'])
window.blit(levelScImage, levelRect['rect'])
window.blit(platScImage, platRect['rect'])
window.blit(platScImage1, platRect1['rect'])
window.blit(platScImage2, platRect2['rect'])
window.blit(platScImage3, platRect3['rect'])
window.blit(platScImage4, platRect4['rect'])
window.blit(platScImage5, platRect5['rect'])
window.blit(platScImage6, platRect6['rect'])
levelRect['rect'].top = bkGroundRect['rect'].bottom
#--Level & scenery--#
#--Character--#
window.blit(winCenterRectScImage, winCenterRect)
winCenterRect.center = (winCenterx, winCentery)
window.blit(jumpScImage, jumpRect)
jumpRect.centerx = charRect['rect'].centerx
window.blit(charScImage, charRect['rect'])
#--Character--#
#--Input controls--#
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RIGHT:
forward = True
backward = False
if event.key == K_LEFT:
backward = True
forward = False
if event.key == K_UP:
jump = True
if event.type == KEYUP:
if event.key == K_RIGHT:
forward = False
if event.key == K_LEFT:
backward = False
if event.key == K_UP:
jump = False
#--Input controls--#
#--Movement--#
if charRect['dir'] == UP:
charRect['rect'].top -= spY
if charRect['dir'] == DOWN:
charRect['rect'].bottom += spY
#--Movement--#
#--Level movement--#
if charRect['rect'].centerx >= winCenterx:
if forward and levelRect['rect'].right > winWidth:
levelRect['rect'].right -= spX
platRect['rect'].right -= spX
platRect1['rect'].right -= spX
platRect2['rect'].right -= spX
platRect3['rect'].right -= spX
platRect4['rect'].right -= spX
platRect5['rect'].right -= spX
platRect6['rect'].right -= spX
if charRect['rect'].centerx <= winCenterx:
if backward and levelRect['rect'].left < 0:
levelRect['rect'].left += spX
platRect['rect'].left += spX
platRect1['rect'].left += spX
platRect2['rect'].right += spX
platRect3['rect'].right += spX
platRect4['rect'].right += spX
platRect5['rect'].right += spX
platRect6['rect'].right += spX
#--Level movement--#
if bkGroundRect['rect'].top < 0 and charRect['rect'].top <
winCenterRect.top:
bkGroundRect['rect'].top += spY
platRect['rect'].top += spY
jumpRect.top += spY
charRect['dir'] = STOP
if levelRect['rect'].bottom > winHeight and charRect['rect'].centery ==
winCenterx:
bkGroundRect['rect'].bottom -= spY
platRect['rect'].bottom -= spY
# jumpRect.bottom -= spY
charRect['dir'] = STOP
if levelRect['rect'].bottom <= winHeight:
if charRect['rect'].centery >= winCenterx and charRect['rect'].centerx
< jumpRect.centerx:
charRect['dir'] = DOWN
#--Character movement--#
if levelRect['rect'].left == 0:
if forward and charRect['rect'].centerx < winCenterx:
charRect['rect'].centerx += spX
if backward and charRect['rect'].left > 0:
charRect['rect'].left -= spX
if levelRect['rect'].right == winWidth:
if forward and charRect['rect'].right < winWidth:
charRect['rect'].right += spX
if backward and charRect['rect'].centerx > winCenterx:
charRect['rect'].centerx -= spX
if levelRect['rect'].left < 0:
if forward and charRect['rect'].right < winCenterRect.right:
charRect['rect'].centerx += spX
if levelRect['rect'].right > winWidth:
if backward and charRect['rect'].left > winCenterRect.left:
charRect['rect'].left -= spX
if charRect['rect'].top <= jumpRect.top:
charRect['dir'] = DOWN
#--Character movement--#
#--Collision detection--#
#--Level--#
if charRect['rect'].colliderect(levelRect['rect']):
if charRect['rect'].bottom > levelRect['rect'].top and
charRect['rect'].top < levelRect['rect'].top - solidY:
charRect['rect'].bottom = levelRect['rect'].top
jumpRect.bottom = levelRect['rect'].top
if charRect['rect'].left < levelRect['rect'].right and
charRect['rect'].right > levelRect['rect'].right + solidX:
charRect['rect'].left = levelRect['rect'].right
if charRect['rect'].right > levelRect['rect'].left and
charRect['rect'].left < levelRect['rect'].left - solidX:
charRect['rect'].right = levelRect['rect'].left
if charRect['rect'].top < levelRect['rect'].bottom and
charRect['rect'].bottom > levelRect['rect'].bottom + solidY:
charRect['rect'].top = levelRect['rect'].bottom
if charRect['rect'].bottom >= levelRect['rect'].top:
if jump == True:
charRect['dir'] = UP
#--Level--#
#--Platform--#
if charRect['rect'].colliderect(platRect['rect']):
if charRect['rect'].bottom > platRect['rect'].top and
charRect['rect'].top < platRect['rect'].top - solidY:
charRect['rect'].bottom = platRect['rect'].top
jumpRect.bottom = platRect['rect'].top
if charRect['rect'].left < platRect['rect'].right and
charRect['rect'].right > platRect['rect'].right + solidX:
charRect['rect'].left = platRect['rect'].right
if charRect['rect'].right > platRect['rect'].left and
charRect['rect'].left < platRect['rect'].left - solidX:
charRect['rect'].right = platRect['rect'].left
if charRect['rect'].top < platRect['rect'].bottom and
charRect['rect'].bottom > platRect['rect'].bottom + solidY:
charRect['rect'].top = platRect['rect'].bottom
if charRect['rect'].bottom == platRect['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect['rect'].bottom:
charRect['dir'] = DOWN
#--Platform--#
#--Platform1--#
if charRect['rect'].colliderect(platRect1['rect']):
if charRect['rect'].bottom > platRect1['rect'].top and
charRect['rect'].top < platRect1['rect'].top - solidY:
charRect['rect'].bottom = platRect1['rect'].top
jumpRect.bottom = platRect1['rect'].top
if charRect['rect'].left < platRect1['rect'].right and
charRect['rect'].right > platRect1['rect'].right + solidX:
charRect['rect'].left = platRect1['rect'].right
if charRect['rect'].right > platRect1['rect'].left and
charRect['rect'].left < platRect1['rect'].left - solidX:
charRect['rect'].right = platRect1['rect'].left
if charRect['rect'].top < platRect1['rect'].bottom and
charRect['rect'].bottom > platRect1['rect'].bottom + solidY:
charRect['rect'].top = platRect1['rect'].bottom
if charRect['rect'].bottom == platRect1['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect1['rect'].bottom:
charRect['dir'] = DOWN
#--Platform1--#
#--Platform2--#
if charRect['rect'].colliderect(platRect2['rect']):
if charRect['rect'].bottom > platRect2['rect'].top and
charRect['rect'].top < platRect2['rect'].top - solidY:
charRect['rect'].bottom = platRect2['rect'].top
jumpRect.bottom = platRect2['rect'].top
if charRect['rect'].left < platRect2['rect'].right and
charRect['rect'].right > platRect2['rect'].right + solidX:
charRect['rect'].left = platRect2['rect'].right
if charRect['rect'].right > platRect2['rect'].left and
charRect['rect'].left < platRect2['rect'].left - solidX:
charRect['rect'].right = platRect2['rect'].left
if charRect['rect'].top < platRect2['rect'].bottom and
charRect['rect'].bottom > platRect2['rect'].bottom + solidY:
charRect['rect'].top = platRect2['rect'].bottom
if charRect['rect'].bottom == platRect2['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect2['rect'].bottom:
charRect['dir'] = DOWN
#--Platform2--#
#--Platform3--#
if charRect['rect'].colliderect(platRect3['rect']):
if charRect['rect'].bottom > platRect3['rect'].top and
charRect['rect'].top < platRect3['rect'].top - solidY:
charRect['rect'].bottom = platRect3['rect'].top
jumpRect.bottom = platRect3['rect'].top
if charRect['rect'].left < platRect3['rect'].right and
charRect['rect'].right > platRect3['rect'].right + solidX:
charRect['rect'].left = platRect3['rect'].right
if charRect['rect'].right > platRect3['rect'].left and
charRect['rect'].left < platRect3['rect'].left - solidX:
charRect['rect'].right = platRect3['rect'].left
if charRect['rect'].top < platRect3['rect'].bottom and
charRect['rect'].bottom > platRect3['rect'].bottom + solidY:
charRect['rect'].top = platRect3['rect'].bottom
if charRect['rect'].bottom == platRect3['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect3['rect'].bottom:
charRect['dir'] = DOWN
#--Platform3--#
#--Platform4--#
if charRect['rect'].colliderect(platRect4['rect']):
if charRect['rect'].bottom > platRect4['rect'].top and
charRect['rect'].top < platRect4['rect'].top - solidY:
charRect['rect'].bottom = platRect4['rect'].top
jumpRect.bottom = platRect4['rect'].top
if charRect['rect'].left < platRect4['rect'].right and
charRect['rect'].right > platRect4['rect'].right + solidX:
charRect['rect'].left = platRect4['rect'].right
if charRect['rect'].right > platRect4['rect'].left and
charRect['rect'].left < platRect4['rect'].left - solidX:
charRect['rect'].right = platRect4['rect'].left
if charRect['rect'].bottom < platRect4['rect'].bottom :
charRect['rect'].bottom = platRect4['rect'].top
if charRect['rect'].bottom >= platRect4['rect'].top:
if jump == True:
charRect['dir'] = UP
#--Platform4--#
#--Platform5--#
if charRect['rect'].colliderect(platRect5['rect']):
if charRect['rect'].bottom > platRect5['rect'].top and
charRect['rect'].top < platRect5['rect'].top - solidY:
charRect['rect'].bottom = platRect5['rect'].top
jumpRect.bottom = platRect5['rect'].top
if charRect['rect'].left < platRect5['rect'].right and
charRect['rect'].right > platRect5['rect'].right + solidX:
charRect['rect'].left = platRect5['rect'].right
if charRect['rect'].right > platRect5['rect'].left and
charRect['rect'].left < platRect5['rect'].left - solidX:
charRect['rect'].right = platRect5['rect'].left
if charRect['rect'].top < platRect5['rect'].bottom and
charRect['rect'].bottom > platRect5['rect'].bottom + solidY:
charRect['rect'].top = platRect5['rect'].bottom
if charRect['rect'].bottom >= platRect5['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect5['rect'].bottom:
charRect['dir'] = DOWN
#--Platform5--#
#--Platform6--#
if charRect['rect'].colliderect(platRect6['rect']):
if charRect['rect'].bottom > platRect6['rect'].top and
charRect['rect'].top < platRect6['rect'].top - solidY:
charRect['rect'].bottom = platRect6['rect'].top
jumpRect.bottom = platRect6['rect'].top
if charRect['rect'].left < platRect6['rect'].right and
charRect['rect'].right > platRect6['rect'].right + solidX:
charRect['rect'].left = platRect6['rect'].right
if charRect['rect'].right > platRect6['rect'].left and
charRect['rect'].left < platRect6['rect'].left - solidX:
charRect['rect'].right = platRect6['rect'].left
if charRect['rect'].top < platRect6['rect'].bottom and
charRect['rect'].bottom > platRect6['rect'].bottom + solidY:
charRect['rect'].top = platRect6['rect'].bottom
if charRect['rect'].bottom >= platRect6['rect'].top:
if jump == True:
charRect['dir'] = UP
if charRect['rect'].top == platRect6['rect'].bottom:
charRect['dir'] = DOWN
#--Platform6--#
#--Collision detection--#
#--platRect4 movement--#
if platRect4['dir'] == UP:
platRect4['rect'].top -= 1
if platRect4['dir'] == DOWN:
platRect4['rect'].bottom += 1
if platRect4['rect'].top >= levelRect['rect'].top:
if platRect4['dir'] == DOWN:
platRect4['dir'] = UP
if platRect4['rect'].top <= bkGroundRect['rect'].top + 200:
if platRect4['dir'] == UP:
platRect4['dir'] = DOWN
#--PlatRect4 movement--#
pygame.display.update()
time.sleep(0.6)
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor