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))
self.speed = cloudType*mainGameClass.getGameSpeed() / 6
self.__doubleX = float(self.rect.x)
+5 -20
View File
@@ -9,6 +9,7 @@ import os
from collections import deque
from Background import Background
from Player import Player
from StandingEnemy import StandingEnemy
from FlyingEnemy import FlyingEnemy
@@ -17,13 +18,6 @@ from Floor import Floor
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):
return self.__gameSpeed
@@ -65,6 +59,8 @@ class Drakora():
def newGame(self):
self.background = Background(self)
for enemy in self.enemies:
enemy.kill()
@@ -94,14 +90,12 @@ class Drakora():
self.speedUpCheatLabelCD = 0
self.speedDownCheatLabelCD = 0
self.speedResetCheatLabelCD = 0
self.backgroundgOffset = [0, self.fourScreenWidths]
def __init__(self):
random.seed()
pygame.init()
self.screenSize = (800, 600)
self.fourScreenWidths = self.screenSize[0]*4
self.screen = pygame.display.set_mode(self.screenSize)
pygame.display.set_caption('Drakora')
self.clock = pygame.time.Clock()
@@ -163,9 +157,7 @@ class Drakora():
def render(self):
# self.screen.fill((102, 153, 255))
self.screen.blit(self.backgroundImages[0], (0-self.backgroundgOffset[0], 0, self.fourScreenWidths-self.backgroundgOffset[0], 600))
self.screen.blit(self.backgroundImages[1], (0-self.backgroundgOffset[1], 0, self.fourScreenWidths-self.backgroundgOffset[1], 600))
self.background.draw(self.screen)
for cloudGroup in self.cloudGroups: cloudGroup.draw(self.screen)
self.enemies.draw(self.screen)
self.players.draw(self.screen)
@@ -299,14 +291,7 @@ class Drakora():
self.doCheats()
if not self.isGameOver and not self.isPaused:
self.backgroundgOffset[0] += self.__gameSpeed
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
self.background.update()
for cloudGroup in self.cloudGroups: cloudGroup.update()
self.enemies.update()
self.players.update()
+1
View File
@@ -22,6 +22,7 @@ class FlyingEnemy(Enemy):
for image in images:
image.set_colorkey((255,0,255))
def __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)),
)
for array in (walkImages, upImages, downImages, crouchImages):
for image in array:
image.set_colorkey((255,0,255))
def __init__(self):
pygame.sprite.Sprite.__init__(self)
+1
View File
@@ -64,6 +64,7 @@ class StandingEnemy(Enemy):
),
)
def __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.