Fixed BG sprite glitch. Minor fixes

This commit is contained in:
2021-04-05 21:19:19 +03:00
parent 0ba497db97
commit 6cdb2c61db
10 changed files with 99 additions and 24 deletions
+38
View File
@@ -0,0 +1,38 @@
"""
Background entity class
"""
import pygame
import os
from BackgroundLayer import BackgroundLayer
class Background():
imgDir = os.path.join(os.path.dirname(__file__), 'data')
backgroundImage = pygame.image.load(os.path.join(imgDir, 'background.png'))#.convert()
backgroundImages = (
pygame.transform.scale(backgroundImage.subsurface((0, 0, 800, 150)), (3200, 600)),
pygame.transform.scale(backgroundImage.subsurface((0, 150, 800, 150)), (3200, 600)),
)
for image in backgroundImages:
image.set_colorkey((255,0,255))
def __init__(self, mainGameClass):
pygame.sprite.Sprite.__init__(self)
self.layers = (
BackgroundLayer(Background.backgroundImages[0], mainGameClass, 0.5),
BackgroundLayer(Background.backgroundImages[1], mainGameClass, 1),
)
def update(self):
for layer in self.layers:
layer.update()
def draw(self, surface):
for layer in self.layers:
layer.draw(surface)
+27
View File
@@ -0,0 +1,27 @@
"""
Background layer entity class
"""
import pygame
from BackgroundLayerFrame import BackgroundLayerFrame
class BackgroundLayer():
def __init__(self, image, mainGameClass, speedMultiplier):
offset = image.get_width()
self.frames = pygame.sprite.Group()
self.frames.add(BackgroundLayerFrame(image, mainGameClass, (0, 0), speedMultiplier))
self.frames.add(BackgroundLayerFrame(image, mainGameClass, (offset, 0), speedMultiplier))
def update(self):
for frame in self.frames:
frame.update()
def draw(self, surface):
self.frames.draw(surface)
+25
View File
@@ -0,0 +1,25 @@
"""
Background layer frame entity class
"""
import pygame
class BackgroundLayerFrame(pygame.sprite.Sprite):
def __init__(self, image, mainGameClass, offset, speedMultiplier):
pygame.sprite.Sprite.__init__(self)
self.image = image
self.mainGameClass = mainGameClass
self.speedMultiplier = speedMultiplier
self.rect = self.image.get_rect()
self.rect.center = (mainGameClass.getScreenWidth()/2 + offset[0],
mainGameClass.getScreenHeight()/2 + offset[1])
def update(self):
self.rect.x -= self.mainGameClass.getGameSpeed() * self.speedMultiplier
if self.rect.x < -self.rect.width:
self.rect.x += self.rect.width*2
-2
View File
@@ -23,8 +23,6 @@ class Cloud(pygame.sprite.Sprite):
mainGameClass.getScreenHeight()/2-100)+50*(2-cloudType)) mainGameClass.getScreenHeight()/2-100)+50*(2-cloudType))
self.speed = cloudType*mainGameClass.getGameSpeed() / 6 self.speed = cloudType*mainGameClass.getGameSpeed() / 6
self.__doubleX = float(self.rect.x) self.__doubleX = float(self.rect.x)
+5 -20
View File
@@ -9,6 +9,7 @@ import os
from collections import deque from collections import deque
from Background import Background
from Player import Player from Player import Player
from StandingEnemy import StandingEnemy from StandingEnemy import StandingEnemy
from FlyingEnemy import FlyingEnemy from FlyingEnemy import FlyingEnemy
@@ -17,13 +18,6 @@ from Floor import Floor
class Drakora(): class Drakora():
imgDir = os.path.join(os.path.dirname(__file__), 'data')
backgroundImage = pygame.image.load(os.path.join(imgDir, 'background.png'))#.convert()
backgroundImages = (
pygame.transform.scale(backgroundImage.subsurface((0, 0, 800, 150)), (3200, 600)),
pygame.transform.scale(backgroundImage.subsurface((0, 150, 800, 150)), (3200, 600)),
)
def getGameSpeed(self): def getGameSpeed(self):
return self.__gameSpeed return self.__gameSpeed
@@ -65,6 +59,8 @@ class Drakora():
def newGame(self): def newGame(self):
self.background = Background(self)
for enemy in self.enemies: for enemy in self.enemies:
enemy.kill() enemy.kill()
@@ -94,14 +90,12 @@ class Drakora():
self.speedUpCheatLabelCD = 0 self.speedUpCheatLabelCD = 0
self.speedDownCheatLabelCD = 0 self.speedDownCheatLabelCD = 0
self.speedResetCheatLabelCD = 0 self.speedResetCheatLabelCD = 0
self.backgroundgOffset = [0, self.fourScreenWidths]
def __init__(self): def __init__(self):
random.seed() random.seed()
pygame.init() pygame.init()
self.screenSize = (800, 600) self.screenSize = (800, 600)
self.fourScreenWidths = self.screenSize[0]*4
self.screen = pygame.display.set_mode(self.screenSize) self.screen = pygame.display.set_mode(self.screenSize)
pygame.display.set_caption('Drakora') pygame.display.set_caption('Drakora')
self.clock = pygame.time.Clock() self.clock = pygame.time.Clock()
@@ -163,9 +157,7 @@ class Drakora():
def render(self): def render(self):
# self.screen.fill((102, 153, 255)) # self.screen.fill((102, 153, 255))
self.screen.blit(self.backgroundImages[0], (0-self.backgroundgOffset[0], 0, self.fourScreenWidths-self.backgroundgOffset[0], 600)) self.background.draw(self.screen)
self.screen.blit(self.backgroundImages[1], (0-self.backgroundgOffset[1], 0, self.fourScreenWidths-self.backgroundgOffset[1], 600))
for cloudGroup in self.cloudGroups: cloudGroup.draw(self.screen) for cloudGroup in self.cloudGroups: cloudGroup.draw(self.screen)
self.enemies.draw(self.screen) self.enemies.draw(self.screen)
self.players.draw(self.screen) self.players.draw(self.screen)
@@ -299,14 +291,7 @@ class Drakora():
self.doCheats() self.doCheats()
if not self.isGameOver and not self.isPaused: if not self.isGameOver and not self.isPaused:
self.backgroundgOffset[0] += self.__gameSpeed self.background.update()
self.backgroundgOffset[1] += self.__gameSpeed
if self.backgroundgOffset[0] > self.fourScreenWidths*2:
self.backgroundgOffset[0] -= self.fourScreenWidths*2
if self.backgroundgOffset[1] > self.fourScreenWidths*2:
self.backgroundgOffset[1] -= self.fourScreenWidths*2
for cloudGroup in self.cloudGroups: cloudGroup.update() for cloudGroup in self.cloudGroups: cloudGroup.update()
self.enemies.update() self.enemies.update()
self.players.update() self.players.update()
+1
View File
@@ -22,6 +22,7 @@ class FlyingEnemy(Enemy):
for image in images: for image in images:
image.set_colorkey((255,0,255)) image.set_colorkey((255,0,255))
def __init__(self, mainGameClass): def __init__(self, mainGameClass):
Enemy.__init__(self, mainGameClass) Enemy.__init__(self, mainGameClass)
+1 -1
View File
@@ -35,11 +35,11 @@ class Player(pygame.sprite.Sprite):
pygame.transform.scale(playerImage.subsurface((16, 72, 16, 16)), (64, 64)), pygame.transform.scale(playerImage.subsurface((16, 72, 16, 16)), (64, 64)),
) )
for array in (walkImages, upImages, downImages, crouchImages): for array in (walkImages, upImages, downImages, crouchImages):
for image in array: for image in array:
image.set_colorkey((255,0,255)) image.set_colorkey((255,0,255))
def __init__(self): def __init__(self):
pygame.sprite.Sprite.__init__(self) pygame.sprite.Sprite.__init__(self)
+1
View File
@@ -64,6 +64,7 @@ class StandingEnemy(Enemy):
), ),
) )
def __init__(self, mainGameClass): def __init__(self, mainGameClass):
Enemy.__init__(self, mainGameClass) Enemy.__init__(self, mainGameClass)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.