Reputation: 119
So I'm trying make it so my water rise like lava at the speed of 1 but every time my screen goes up:
# Mkaing screen go up
if playerman.y < 250:
playerman.y += 9
for Platform in platforms:
Platform.y += 9
for Platform2 in Platforms:
Platform2.y += 9
for Dirt in dirts:
Dirt.y += 9
The water sprite will get faster. https://gyazo.com/1bdd7b513a06f6a80832e565255e9fb0 How do I make it so the water sprite will keep on moving the same speed even if the screen moves. No matter how fast I keep moving up the water will just stay in the same spot and keep rising
My full code
import pygame
import random
pygame.init()
window = pygame.display.set_mode((500,500))
pygame.display.set_caption(("Noobs First Game"))
# Player class
class Player:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 6
self.fall = 0
self.idle = [pygame.image.load("Player_idle1.png"),
pygame.image.load("Player_idle2.png"),
pygame.image.load("Player_idle3.png"),
pygame.image.load("Player_idle4.png"),
pygame.image.load("Player_idle5.png"),
pygame.image.load("Player_idle6.png"),
pygame.image.load("Player_idle7.png"),
pygame.image.load("Player_idle8.png"),
pygame.image.load("Player_idle9.png"),
pygame.image.load("Player_idle10.png")]
self.idlel = [pygame.image.load("Player_lidle1.png"),
pygame.image.load("Player_lidle2.png"),
pygame.image.load("Player_lidle3.png"),
pygame.image.load("Player_lidle4.png"),
pygame.image.load("Player_lidle5.png"),
pygame.image.load("Player_lidle6.png"),
pygame.image.load("Player_lidle7.png"),
pygame.image.load("Player_lidle8.png"),
pygame.image.load("Player_lidle9.png"),
pygame.image.load("Player_lidle10.png")]
self.run = [pygame.image.load("Player_run1.png"),
pygame.image.load("Player_run2.png"),
pygame.image.load("Player_run3.png"),
pygame.image.load("Player_run4.png"),
pygame.image.load("Player_run5.png"),
pygame.image.load("Player_run6.png"),
pygame.image.load("Player_run7.png"),
pygame.image.load("Player_run8.png")]
self.jump = [pygame.image.load("Player_Jump.png")]
self.lrun = [pygame.image.load("Player_lrun1.png"),
pygame.image.load("Player_lrun2.png"),
pygame.image.load("Player_lrun3.png"),
pygame.image.load("Player_lrun4.png"),
pygame.image.load("Player_lrun5.png"),
pygame.image.load("Player_lrun6.png"),
pygame.image.load("Player_lrun7.png"),
pygame.image.load("Player_lrun8.png")]
self.ljump = [pygame.image.load("Player_lJump.png")]
self.direction = "run"
self.direction = "jump"
self.direction = "lrun"
self.direction = "ljump"
self.direction = "idle"
self.direction = "idlel"
self.run = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.run]
self.jump = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.jump]
self.lrun = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.lrun]
self.ljump = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.ljump]
self.idle = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.idle]
self.idlel = [pygame.transform.scale(image,(image.get_width()//6,image.get_height()//6))for image in self.idlel]
self.isJump = False
self.JumpCount = 10
self.rect = pygame.Rect(x,y,width,height)
self.next_frame_time = 0
self.fps = 10
self.clock = pygame.time.Clock()
self.anim_index = 0
self.jump_height = 2
def get_rect(self):
self.rect.topleft = (self.x,self.y)
return self.rect
def draw(self):
if self.direction == "run":
image_list = self.run
if self.direction == "jump":
image_list = self.jump
if self.direction == "lrun":
image_list = self.lrun
if self.direction == "ljump":
image_list = self.ljump
if self.direction == "idle":
image_list = self.idle
if self.direction == "idlel":
image_list = self.idlel
# Is it time to show next frame?
time_now = pygame.time.get_ticks()
if (time_now > self.next_frame_time):
# seconds till next frame
inter_time_delay = 1000 // self.fps
self.next_frame_time = time_now + inter_time_delay
# switch to next frame
self.anim_index += 1
if self.anim_index >= len(image_list):
self.anim_index = 0
if self.anim_index >= len(image_list):
self.anim_index = 0
player_image = image_list[self.anim_index]
pygame.draw.rect( window, self.color, self.get_rect(), 2 )
player_image = image_list[self.anim_index]
player_rect = player_image.get_rect(center = self.get_rect().center)
player_rect.centerx += 3
player_rect.centery -= 17
window.blit(player_image, player_rect)
# Platform class
class Platform:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.log = pygame.image.load("log.png")
self.rect = pygame.Rect(x,y,width,height)
self.log = pygame.transform.scale(self.log,(self.log.get_width()//4,self.log.get_height()//6))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
platform_rect = self.log.get_rect(center = self.rect.center)
platform_rect.centerx += 60
platform_rect.centery -= 2
window.blit(self.log,platform_rect)
# Platform2 class
class Platform2:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.log = pygame.image.load("Grass_1.png")
self.rect = pygame.Rect(x,y,width,height)
self.log = pygame.transform.scale(self.log,(self.log.get_width()-90,self.log.get_height()-91))
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
platform_rect = self.log.get_rect(center = self.rect.center)
platform_rect.centerx += 2
platform_rect.centery += 0.2
window.blit(self.log,platform_rect)
class Dirt:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.dirt = pygame.image.load("Dirt_1.png")
self.dirt = pygame.transform.scale(self.dirt,(self.dirt.get_width()-90,self.dirt.get_height()-91))
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
dirt_rect = self.dirt.get_rect(center = self.rect.center)
dirt_rect.centerx += 2
dirt_rect.centery += 0.2
window.blit(self.dirt,dirt_rect)
class Water:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 1
self.water = pygame.image.load("water_1.png")
self.water = pygame.transform.scale(self.water,(self.water.get_width()*8,self.water.get_height()*6))
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
self.rect.topleft = (self.x,self.y)
water_rect = self.water.get_rect(center = self.rect.center)
water_rect.centerx += 25
water_rect.centery += 80
window.blit(self.water,water_rect)
# displaying Color
white = (255,255,255)
# Drawing stuff
# Drawing player
playerman = Player(255,440,40,40,white)
# Drawing Platform
platform1 = Platform(0,388,130,30,white)
# Drawing Platform2
Platform1 = Platform2(7000,470,1,1,white)
# Drawing Dirt
dirt1 = Dirt(7000,255,35,35.1,white)
# Water
water1 = Water(0,800,500,300,white)
# List
# Putting Platform in a list
platforms = [platform1]
# Putting Platform2 in a list
Platforms = [Platform1]
# Putting Dirt in a list
dirts = [dirt1]
platformGroup = pygame.sprite.Group
Level = [
" l",
"l",
"",
" l",
" ",
"l",
" ",
" l",
" ",
"",
"",
"",
"11111111111111111111",
"22222222222222222222",]
for iy, row in enumerate(Level):
for ix, col in enumerate(row):
if col == "1":
new_platform = Platform2(ix*35, iy*36.4, 35,35.1,(255, 255, 255))
Platforms.append(new_platform)
for iy, row in enumerate(Level):
for ix, col in enumerate(row):
if col == "2":
new_dirt = Dirt(ix*35, iy*36.4, 35,35.1,(255, 255, 255))
dirts.append(new_dirt)
for iy, row in enumerate(Level):
for ix, col in enumerate(row):
if col == "l":
new_platform = Platform(ix*110, iy*60, 130,30,(255, 255, 255))
platforms.append(new_platform)
# redrawing window
def redrawwindow():
window.fill((0,0,0))
# bliting a counter the game
window.blit(text,textRect)
# showing player on the screen
playerman.draw()
# Drawing Platform
for Platform in platforms:
Platform.draw()
# Drawing Platform2
for Platform2 in Platforms:
Platform2.draw()
# Drawing Dirt
for Dirt in dirts:
Dirt.draw()
# Drawing Water
water1.draw()
# The conter and how its going look like
font = pygame.font.Font("freesansbold.ttf",30)
score = 0
text = font.render(" = "+str(score),True,(255,255,255))
textRect = text.get_rect()
textRect.center = ((150,40))
fps = 30
clock = pygame.time.Clock()
x = 10
y = 10
x_change = 0
y_change = 0
old_x = x
old_y = y
timer = 0
Stimer = 0
# Space down = False
spcdown = False
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
water1.y -= 1
for Platform in platforms:
if Platform.y > 510:
Platform.x = random.randint(0, 500)
Platform.y = random.randint(-150, -100)
# Mkaing screen go up
if playerman.y < 250:
playerman.y += 9
for Platform in platforms:
Platform.y += 9
for Platform2 in Platforms:
Platform2.y += 9
for Dirt in dirts:
Dirt.y += 9
water1.y += 1
# Marking screen go down
if playerman.y > 410:
playerman.y -= playerman.fall
for Platform in platforms:
Platform.y -= playerman.fall
for Platform2 in Platforms:
Platform2.y -= playerman.fall
for Dirt in dirts:
Dirt.y -= playerman.fall
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x_change = -7
if event.key == pygame.K_a:
x_change = 7
if event.type == pygame.KEYUP:
if event.key == pygame.K_d or event.key == pygame.K_a:
x_change = 0
x += x_change
if x > 500 - playerman.width or x < 0:
x = old_x
# If keys get pressed
keys = pygame.key.get_pressed()
px,py = playerman.x,playerman.y
# Adding one to score every time player jumps
if not keys[pygame.K_SPACE]:
spcdown = False # space released
if keys[pygame.K_SPACE]:
if not spcdown:
score += 1 # if space pressed first time
spcdown = True # space key is pressed
text = font.render(" = "+str(score),True,(255,255,255))
textRect.center = ((150,40))
# Player movment
if keys[pygame.K_a] and px > playerman.speed:
px -= playerman.speed
playerman.direction = "lrun"
elif keys[pygame.K_d] and px < 500 - playerman.width - playerman.speed:
px += playerman.speed
playerman.direction = "run"
else:
if playerman.direction == "run":
playerman.direction = "idle"
else:
if playerman.direction == "lrun":
playerman.direction = "idlel"
if keys[pygame.K_w] and py > playerman.speed:
py -= playerman.speed
if keys[pygame.K_s] and py < 500 - playerman.height - playerman.speed:
py += playerman.speed
# animation for player jump
if playerman.direction == "run":
if keys[pygame.K_SPACE]:
playerman.direction = "jump"
else:
if playerman.direction == "lrun":
if keys[pygame.K_SPACE]:
playerman.direction = "ljump"
platform_rect_list =[p.rect for p in platforms]
player_rect = playerman.get_rect()
playerman.rect.topleft = (px,py)
playerman.y = py
if player_rect.collidelist(platform_rect_list) < 0:
playerman.x = px
# About isJump
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
# this part lets you jump on platform only the top
collide = False
for Platform in platforms:
if playerman.get_rect().colliderect(Platform.rect):
collide = True
playerman.isJump = False
playerman.y = Platform.rect.top - playerman.height
if playerman.rect.right > Platform.rect.left and playerman.rect.left < Platform.rect.left - playerman.width:
playerman.x = Platform.rect.left - playerman.width
if playerman.rect.left < Platform.rect.right and playerman.rect.right > Platform.rect.right + playerman.width:
playerman.x = Platform.rect.right
# Lets Player jump on top of second Platform
for Platform2 in Platforms:
if playerman.get_rect().colliderect(Platform2.rect):
collide = True
playerman.isJump = False
playerman.y = Platform2.rect.top - playerman.height
if playerman.rect.right > Platform2.rect.left and playerman.rect.left < Platform2.rect.left - playerman.width:
playerman.x = Platform2.rect.left - playerman.width
if playerman.rect.left < Platform2.rect.right and playerman.rect.right > Platform2.rect.right + playerman.width:
playerman.x = Platform2.rect.right
# colliding with floor
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.Jumpcount = 10
playerman.y = 500 - playerman.height
# Jumping
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
playerman.fall = 0
# Jump Count
else:
if playerman.JumpCount >= 0:
playerman.y -= (playerman.JumpCount*abs(playerman.JumpCount))*0.5
playerman.JumpCount -= 1
else:
playerman.isJump = False
playerman.JumpCount = 10
redrawwindow()
pygame.display.update()
quit_game
Upvotes: 2
Views: 264
Reputation: 143
try increasing the amount the water moves down when the player jumps up
Upvotes: 0
Reputation: 210878
You have to move the water just like the platforms and any other object. You would not have these troubles if you had followed my suggestions: Enemy not staying at original spot.
Now you have to do it the "hard" way. The speed of the rising water level is controlled by:
while run: # [...] water1.y -= 1 # <--- Controls the rising water
If you want to increase the speed, you need to change the degree of decrement.
However, every time the player moves vertically, all objects in the scene must be shifted. Every time the platforms are shifted vertically due to the movement of the player, the water must also be shifted.
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
water1.y -= 1 # <--- Controls the rising water
for Platform in platforms:
if Platform.y > 510:
Platform.x = random.randint(0, 500)
Platform.y = random.randint(-150, -100)
# Mkaing screen go up
if playerman.y < 250:
playerman.y += 9
for Platform in platforms:
Platform.y += 9
for Platform2 in Platforms:
Platform2.y += 9
for Dirt in dirts:
Dirt.y += 9
water1.y += 9 # <--- shift vertically
# Marking screen go down
if playerman.y > 410:
playerman.y -= playerman.fall
for Platform in platforms:
Platform.y -= playerman.fall
for Platform2 in Platforms:
Platform2.y -= playerman.fall
for Dirt in dirts:
Dirt.y -= playerman.fall
water1.y -= playerman.fall # <--- shift vertically
Upvotes: 1
Reputation: 39
I think you can simply change the value that you're adding to the coordinate to something lower to change the speed. I'd also recommend storing the value in a variable and using that variable in the add statement, that way, you only have to edit it at one place, check the code here:
if playerman.y < 250:
delta = 6
playerman.y += delta
for Platform in platforms:
Platform.y += delta
for Platform2 in Platforms:
Platform2.y += delta
for Dirt in dirts:
Dirt.y += delta
Upvotes: 0