From cc37b5689a505fa85e00e9712213094302a7079d Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Sun, 4 Apr 2021 14:46:37 +0300 Subject: [PATCH 1/4] Broken background system --- Drakora.pyw | 26 +++++++++++++++++++++++--- data/background.png | Bin 2300 -> 3821 bytes data/background.xcf | Bin 8164 -> 13599 bytes 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Drakora.pyw b/Drakora.pyw index 16e9a65..e119e60 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -5,6 +5,7 @@ Main game class import pygame import random +import os from collections import deque @@ -16,6 +17,13 @@ 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 @@ -86,12 +94,14 @@ class Drakora(): self.speedUpCheatLabelCD = 0 self.speedDownCheatLabelCD = 0 self.speedResetCheatLabelCD = 0 + self.backgroundgOffset = [0, int(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() @@ -102,7 +112,7 @@ class Drakora(): self.targetFps = 120 - self.floorHeight = 50 + self.floorHeight = 64 self.players = pygame.sprite.Group() self.floors = pygame.sprite.Group() @@ -120,7 +130,6 @@ class Drakora(): self.isGodmode = False self.drawBoxes = False - font = pygame.font.match_font('liberation mono') self.fontScore = pygame.font.Font(font, 32) self.fontMessage = pygame.font.Font(font, 56) @@ -153,7 +162,10 @@ class Drakora(): 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.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) self.enemies.draw(self.screen) self.players.draw(self.screen) @@ -287,6 +299,14 @@ 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 + for cloudGroup in self.cloudGroups: cloudGroup.update() self.enemies.update() self.players.update() diff --git a/data/background.png b/data/background.png index 695147c756608493d4df443a0d31f49ffc3720a0..0b5fcd7cdde64edf72397e923c4779f87bd2c4fa 100644 GIT binary patch literal 3821 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 diff --git a/data/background.xcf b/data/background.xcf index 802794a14d682d94b19568b4e9edb97798423e37..aa18ecc24092b685ae412f0043d85fc5c1af36c3 100644 GIT binary patch literal 13599 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 DV4I&| literal 8164 zcmYe#%q>u;NKR8IGcYt{U|?WYU|?XF#sC2zT9AQ(fsv7cfkBvofq}z$8Uq6eGcYiS zFfcH%FfcIGFfcHPLD?X6q6`d-?hFhJyda}>lk;wc z6x=<113)qYV5OP4iRr1j=|!0-ATdS;21W*r;*!doRE6UFoXiwWE{(MGaAgvX}1&PU-dFcv2&5Q_*`abE^Hrg2kdz9D{r~@ekXx0J*sugw1yY2-OlJ^mcql;K z#SHQv0|SG!CPa<2DU^1E(!LNHM8frgtOO@Z1_qV{kPHI@O97OIgc<|O1So$2l->ZP z4?yV)Q2GIs{s5s_Aru3v0EEE`3PVuzI6(O9cOW#U1cc_=0ik&+AT(bDgcb;a&_c2h zS~w9xi~NPq;-GM6U|^8A3*k#aQ;bw5lwS#@JE8PUD7_L&?}XAPq4Z5C{Sr$5gwWEU zGy@7>NeG{TpriKjsruqy5rg~s3XsQhkFELX! z1_@IY1{qTY26Nd8x5kom8`Apc*MLFvCV zgUWviaJ*>!7h=%;F944lv;XW2mj6L%?$-Z$wwnwr(0Jhn$B7Puu&D+-4irpfz~Qf9 zD$Jk=HRdgrCm_?Gcnki{%5FXIbb^Y&6~l%_TLPep7j|7|7$ad{8tBu zo$P;k2F3r<466Ud88rV3LBori!Sp{TgT;R~2Fw4f4A%dd8Eir6n$_WdJ^O!#|E6{f z|4pqKm`$x1SWGP$SWV3t*umJ0fy2~mGf!oxGfd`!C^`U7VQZ|U0sxwG})4C!! ztt*>K!PB|EDKEHesAp0%9e(!gXZZi$mVxoVH3Rd1D+ZSTmf$jm{l6Il$A41>&i^J1 zT>p*1=^a$&@cq|k;Qy}&PU~X-)fptU)11_)Cpk3H|6h(l@xKg%@_$JNwg2MaxYCA~NqpcqgVh?fZ ze};PI*#GtHtk8M`l(#^2hdBd>sVOub4H)>qaR@4}G#McEhAM-UsS;A%A;q9#DhbY0 z8qj(d6n_S$ybOk>JPgLBoD62B>Hit8ere1mN`yC~j35r2Z>2NdH%40M-4Vcm>t}pfXeAzbJ#|e_;k4a9zX4VECV# z!T3KHgXw<`2J`={43_^{z-G7lA%rhb1<0wXJfGX532N@ z{Ree~Kn)-kQ!{A63~JPaGA*P~mNZpnkcL;Pkj6Z$69j5df+|uIa3RdXP|v)|bkLi} z-oWtxza0bPe@g~7aAU=Yfe+jm*Jcp@ugL&uh%13J38;Vs6^@{WIH-Z5{a*lH*@42) z0vv{~|JSp(GW-WO9zhua6po+F~411sV^aN(+?6jTj*58xa?v#-h}JP<+TUKpG;jj*%ErLj;tz zdB7c4P`p4IA)wBy`u}?N1JFjk9Rs5&sG|?+$XYY7KpXsQ;0`UQVF@a+U}+yzVrejd z8u${XY7C$}AY-b;AdA+ig;Z7|4BFs^C8%Qyi#t#U3)CoKVW?-AYdY!%SUAA)9;owR z%fR&ChJpFNH3JKDkb?ccDY)YRYLtRH4WPja%nD42K?dA-L6mo@|3MuHLP$xoxK>=J#fd(;T z7?e$=8C0S9RozsaK@;2{1;st2W1(j%zyNBP8i6|&koboT46&Gw96Na#nEzWcaQru6 z-~kVG=)%iXP@_`@oR2{bPXz`AaHj$^&>_R1@?VNU6>DS3|yun3_PZS z4E&~i41%US48o>d3}U7n3=*cS43c2X!XRY|!pscPrXbA3AY;nNAPdL;8R{ATn+|>R z^%5)59y#dzjob^U_!kH*51|<3L33ja3=Hzn`5k%CTo;IM08t=s1EoEnG<2Rv9y$*t zp92-IfYL2c8k96a=FEZeS3qd+T#RkK0K>F;0fzha0t^Gs=3ua`=U|vt&oM~cgB&Kv jZewk*t!HhRR?pgSzkV>VnGV?2GaZ;#&vf8EsYMY0VDy4v From 0ba497db977c406818140c905bcc90989e95dab5 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Sun, 4 Apr 2021 15:14:38 +0300 Subject: [PATCH 2/4] Minor fix --- Drakora.pyw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Drakora.pyw b/Drakora.pyw index e119e60..550ae6f 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -94,7 +94,7 @@ class Drakora(): self.speedUpCheatLabelCD = 0 self.speedDownCheatLabelCD = 0 self.speedResetCheatLabelCD = 0 - self.backgroundgOffset = [0, int(self.fourScreenWidths)] + self.backgroundgOffset = [0, self.fourScreenWidths] def __init__(self): From 6cdb2c61dba0bfa8dbf34b0ddf6928ce2136592e Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Mon, 5 Apr 2021 21:19:19 +0300 Subject: [PATCH 3/4] Fixed BG sprite glitch. Minor fixes --- Background.py | 38 ++++++++++++++++++++++++++++++++++++++ BackgroundLayer.py | 27 +++++++++++++++++++++++++++ BackgroundLayerFrame.py | 25 +++++++++++++++++++++++++ Cloud.py | 2 -- Drakora.pyw | 25 +++++-------------------- FlyingEnemy.py | 1 + Player.py | 4 ++-- StandingEnemy.py | 1 + data/background.png | Bin 3821 -> 3813 bytes data/background.xcf | Bin 13599 -> 13357 bytes 10 files changed, 99 insertions(+), 24 deletions(-) create mode 100644 Background.py create mode 100644 BackgroundLayer.py create mode 100644 BackgroundLayerFrame.py diff --git a/Background.py b/Background.py new file mode 100644 index 0000000..92bda5e --- /dev/null +++ b/Background.py @@ -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) diff --git a/BackgroundLayer.py b/BackgroundLayer.py new file mode 100644 index 0000000..79a4fed --- /dev/null +++ b/BackgroundLayer.py @@ -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) diff --git a/BackgroundLayerFrame.py b/BackgroundLayerFrame.py new file mode 100644 index 0000000..e7fe2dd --- /dev/null +++ b/BackgroundLayerFrame.py @@ -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 diff --git a/Cloud.py b/Cloud.py index b327d3f..e25285d 100644 --- a/Cloud.py +++ b/Cloud.py @@ -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) diff --git a/Drakora.pyw b/Drakora.pyw index 550ae6f..f478570 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -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() diff --git a/FlyingEnemy.py b/FlyingEnemy.py index 990ff70..ed16cce 100644 --- a/FlyingEnemy.py +++ b/FlyingEnemy.py @@ -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) diff --git a/Player.py b/Player.py index ee06e49..52594db 100644 --- a/Player.py +++ b/Player.py @@ -34,12 +34,12 @@ class Player(pygame.sprite.Sprite): pygame.transform.scale(playerImage.subsurface((0, 72, 16, 16)), (64, 64)), 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) diff --git a/StandingEnemy.py b/StandingEnemy.py index 66fc0e9..d5f923d 100644 --- a/StandingEnemy.py +++ b/StandingEnemy.py @@ -64,6 +64,7 @@ class StandingEnemy(Enemy): ), ) + def __init__(self, mainGameClass): Enemy.__init__(self, mainGameClass) diff --git a/data/background.png b/data/background.png index 0b5fcd7cdde64edf72397e923c4779f87bd2c4fa..e2fe42d714f0c4e5f76ba0ad9afc0a216c2091a5 100644 GIT binary patch delta 2875 zcmaDW`&4#{ zwlkKeA51gc@SLlNDROGq^#evlEMm&>Z}mP2FS~j-CZFd`jQ-`+X}9z5zSg?9^m`pg zTi1cCT4sg2E9d!c-ho5tM%++tvhzDacX_4cj2?% z6Q_4sy**WBUd3+l=WOiM!t(;pZ*|sa?ycd`IBM*0`AqR6#>**(mx@1kaH|UXY_=+^ z_T+-t1lxVW%Bd(}M2T z#{Yhk@Lha<`IaTtSFgVBTw}F}nK}C*d<^AQc z3Gby>IrTG3kEpK=JIkhS?|quBQhZbWg2<0g)=ODVWzIfdKJgCQi)uNocZZe-)_u|b z&9LqhPxaa}QtP+y-AdhR6X^Lq;=TNh*tq(yjF%s1+;TtZ5gTp1;akra|z!ecjvC|96%|X7)~uJU;iKS?|{WU%zKfiJDw6&Dufsetm0K_aTPuJmxaqa}P)< z7u|jz*8C>v_>Jyz{b!7J<`W|w{XSisoOsFC^%8%Ibj{i&zXHF!o%EyJSxoNqy#rE3 zov)(9_qHXkdu^W+ysWOvFY~D7$>Y6Cd$z0gMe9p%d2?~`(qD=)yJS-IZ-pM;q`hI2 zd)}XDrn7Cy%^NLLe`+4(S;B1bqjz=5U)hH$@{{>lcovCX;*D>P5>J zt4liZ?){bx?p~{Z)X%(HZg!(`>5)n~)gL$3nJO>M{@7vYsO?UK)&&F`>$qufI8FDljF&UAfnPO8?MTr&S(dAw11+~(T&|F^{N|Gk{3id{4#~PhXShnYna3#alsm~^wC#KS8P`s=IRVz~ zPt|RrqV~!dFFnxp+4w?ly^Zoerm)nTebXk1ieJg_ew^TL@_|R-XN$hP$4mIvw@39tyRtU*{pWsGx&7$!Q)_-y z_kRkS^0aWH;kOFI^%r(upT8(DFa5-8?sHo;?D=N@=U(%m^|f{6)^~kNe(!yMrM&<6 z4YB!(n?Jpq>b&=p>SLRuAL=R3zcHdQRYClk|e__g-@1BXUUfuW0y7%ec#}eCLZ}KlFp8sjaCh7EPm+$HL ze){*`D0X?y?CE-y`Dt(doSoXZenR55esxXe-4A!E7uP>He`@kMrl zHtCmKgYD~8bN9Bh9opx6Z+i2luN$}5?7LjiCHK-Y{BT>S-pcmVZO5!`i>37NUs({A zzf-`4lVi=V-luH(3~VbkI|B>1yU&R}xo2~$MM2l999D6@i*tKEm=*hNPF+!$Df*3VdiG_r=^+|7@e(r7!PWhmJlXu(v-P8ID-ang{ z^lrD7?j3Wzn&|0wa%=7HU2PQA-E3CRyRcW;@ARtOf`;s0o?ZU*>8;sE(MzkYDXjdY z+s+&Q?v8LW``(wQ=f~^RKQ;SW_N9Y!TXjh8x^=4cZ$;CWzK{zwynko<n-u+qfRbTeei$N0VPun+5*Z-V;V&%Tcv5Mtf z+F#C1FF%r1e&J5gKgpfEbHmH`hyT+qo7W=0|9|4FWsI*@-Spa6eEWmN@3p^5suT6% z?_V~&ckTAES<7Ck@Bfq8s##T^aF%yUm-T58*U}5WZSPskyM4{xchTvy_1_Jq$^5=+ zWFMDS`m^iByrqw78SGaX)u+Y>yw00mKJA6$;b+I+*GuI8>e^#DKf1E~oaph z?p4wG#@YX6LX9_UyEi1t7?>j@7>$`W=81jqsIb8 zYjW1CS{MBEdMUf2l3WvlmbQNM)u;?AUl`M_1We+r4YJnBQ;f z_y1uRw$p4kYgpwu+w`2dPu7JVk9~iu`u$V!51+zr)-l_ZhJUw>+U+qXeSMBl^4rwV zA3x&i<->QHEoQlP=!R6${PMr)%vO&>_da~BzLo2|(#MjC9_HS6>~d$8Of&B1-8@gTe~DWM4ftd!I) delta 2919 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 P7#KWV{an^LB{Ts5yn*wB diff --git a/data/background.xcf b/data/background.xcf index aa18ecc24092b685ae412f0043d85fc5c1af36c3..877897831fe96a1c16c2ccf8ff49bb33f750b34e 100644 GIT binary patch delta 2324 zcmbQAwKikJFD5DDzYJht!U?7rOhloy;${)%{fv<*5U$z_2(3{Ap|z$!Xzerzt+N9{ z>&}4CdS@WCfeMsf1ECEcLTIDsn{`-?}vo@I4b2TtPX&4_y(^$NIpe%;kThG-1 z^C^r*_?YQ{X+5jM|9S|`0Hy!e3ow8%1C*wWT`#~uxj`HZ|LZvz80tYZv%`Nu2HpPx zdQ1%3|M``f^q3el{|ka?_5Z@kOnS@=^8Z;FM3tHKSQx|@|4)ulb&zdf5V)_$z`u#< zz7B)nCZ_vZ48oh3?rSiJZeqT#IQg`ygD%9-bg-d;OzB`l!L<5+;XtNzsG)((=`0Ll z|0i3hIkNsYVc_~dxlT=k(Q)!xH4P~LmYSyTe^v(5|I7@mdMpfj|Ctz=^jMXd^_Un` z|FbhN>2WDD>&gFTV_?@4P?rAB!oa2{t}G5#Evqc@pNWB4Pgz;uKQjZ9p1Lv@1JnP> z0qRc1#SE9y5c zGYI|XV&MPJqs*+w%)s-XiGfp(iGlY&KR84<{xdN!>T!Ve^ZXYAo5%M5KLe88ALWQ-DhX` ze;<@GxEUsY(sYD+Fdghca00OS&lJd%4)$OmV>;M_;ACL%pCgbZ9qz$E=5(kB)4?7D z2Q=7&=^SAFJpYBj=7Bw!&K<~@&cwj=UnGzzot@!-IzO0Z{y%w>mZRkV{|r|DSs2*= z^D-#>XJKI0<6z*{V`7l`Kbc3{kc-uZf%!fM1NVKU$&uPd7>d(57`W5HikD~``~GKR zF#XTOz^cc@UM@Hlu--RkV7$+=iRr#E1Jix>O)U3y7?|(#ZeqW$%)oSCd=u+^ z83v~Na+{d$^G{x=qX&0HI@A&AEP+hvP)DS*2ePC?9g)r($es>$M7nq&D>x*fj!2gS zha$`W$uhe7y#Lu4l>dt`u<9{_LM1}io{fc{f%U%X<^SvqrvDik z*z{N!4F5Cgu`09ZF)`@>=LQ!Sy#FN_SpQFs(DM*E#K3mnjDhh!>n4`_Mhx7WnC=@e zOg^IL2{#}eY(P3|AWJ&f0C3R&HNZgMQ~f_TgWi8u22MRj2F?F046J(W%1nA{|Ct$B z^!Syz{!25k=m{$`{-3-+KR~jCf%Cor1M7WuaDl{fpMR4Y1IvBkP27_u4FcdMr9(|h zXAfjb2b+}69|$%nT{w{O|Kte9I2?{1;Vb*W+Xm|1YD=sVBjpsw}Bj z&m^GCD#@nIEGeg4&*C6i&)mQu1}^*9?<+FMY~s8x!JxWH@_s#&z$VrnwoS}Ea+~T| z9D3@R9U$hWgUtD$ZE$H$ZRJk7g*2YU{}w=04*KZ7!?1D zF#K0$(-Q%OY@1;yw*xfKvfWpj{K+s>6rwU6sxpu*9jr3OD9rZ15QFA_W(EO0UIxkk zObje~e9F9f%nZWdl&JtNM|l4;Gcf9@f!S=}45FpXqQ}Va|NrFoMoOyJ7zFNXF|gd{ z+r)ccih=3A!Y1bXq701p)iyET=VxHPueFKgKKtYVVjp8*Ep)Rv=3{*sk@)${<;>|Evt4JjL^W@_pkV*1MoAFxkN*2rie-!oc%?@_ds9 E0R7-{rT_o{ delta 2413 zcmZ3RF+Xd=FD5CI_Y7cQ@*7Msn6g7@;msn<`xzt4AY63_#h|eP!qEBvp|!6-Xk8Bo zt!D(G^`ZIb&HR5W( z?PI0`ruD22w)GHt8kC-F&)PQGmzBqwgTc0*gJD`d2gCh(W(QkA23=bLJthWiTYhCG zJthWCTR||bZY!+Jq{qx4Z_C0Us?4m%!XRclIY!k%-(i{{gYGne`%Dbl)A%V!F@FAU}X{?iXsygW27i7@AFObf}pnab|kSU#sLG!*K zm{z|p9LSW;%piZCg+VlsIh}<;?EYjmHAhxk69z8Z$vJ8o>J}ZOieP#yMbQT7^`%DZ>>8ydw=}Zi&_t_bk(zybe)8+58 zF|el#1WMm$VPH!a4-^NhmJJlS&&0r-t{fe6Jmix>M zLesby_^0t~V!qGJz%z}Bf%85S1Mf6`aQJdeV`5;u&jHrYGffC=9^1743{3aAH-YTn znkKS|={`Hd|NEfS#?HXZIBoJYO~?BCObj;n8Pk~5y!QeheAWJ$kgV2302LAgzfz0X53_SOl7&z0J7Kq8LXzUFtAVKWl)&L!oYl=gMs@#6NAh&rpd3hj3n>> zXRx}@!oYr?mqFn^3j=dH2LpFH6NAkC$!6NdzP4-(rnXEBta?lghTw=|QD)L(VbB66 zTy|v^J$42~aAM|FX4hk7kg^43194@LdR|*b1{PZu1|~f@aOASsPTr=i8^CmR8XJS@ zG$sbt`%Dam;BaTz#B`s9K?|I6**CG=XJ=3Zr)J(w?Dtt2q`>(=d=p4L?=(gRmT4>u zO!wu$am6x?W3r%*p6`7&2GjdY46Nx)42IxPWC>(SXJOC+r(E_xmUMOoMR0274P;Me zWsm~r1MxtRdfxkt3@rCq7?{%Kz#-3ae{zqGKCdksgR-p%1FIe*C?rql*b6Y9pT@?Z zJWYgw^*$qm%rv&iyt)p&_t_Yf?~5?7rZa*!H##jh(@C8Y2VSeHI48X^i(-H?iDjV$h$)4KBWTr%5od zPMa*H=c#<3ox$`zBLiDH3xnZ(#&p&|mUJct{rlYDGK=@V1Ow~+$!&U`>bBerdbX?# zoO+B5nzk$qta|LqOnPdz%nU4g{K{Om(hMwm!pe-clfUT&Xc|xBX3(3)%D{P_kwJ4B z3j^zY_DxLp)uu5su-xb0#5GNtf#tsNCdO%;ljHRR)bDdM=-p>!;7n&^(7eyWz?#k; z$ds;jpP7Lroj;K4zBB_%x^N)l{mIw#1BGqH8PsjX^w=2`Y(vok2%7Y$@j=VTDSFB8a_F2SH0D4AZ*BoN4I#}>$JCl^@H;$TFl*ccRT zMHv1ov+0R2u-dXS2exX;TVIgN>dSSDu}DcRl^V$i(L%pj1?%OH85iGd}ZFOWB#nL!ww zk`=(^3CKvsbTu#=l&YB1wE|hv85#cHpM2a%8RSMWTUG{8_T{mi{M{&sf6p{#Q0>S7 d%6&Z3SSR}#2Z78GyU)r1$~`>yC$BYb002}EFM$96 From 27249ba0528d9dddad709949b588f0297947003a Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Mon, 5 Apr 2021 23:48:46 +0300 Subject: [PATCH 4/4] Updated BG sprites --- Background.py | 6 ++++-- BackgroundLayerFrame.py | 10 +++++++--- Floor.py | 2 +- data/background.png | Bin 3813 -> 6639 bytes data/background.xcf | Bin 13357 -> 21917 bytes 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Background.py b/Background.py index 92bda5e..50dac2a 100644 --- a/Background.py +++ b/Background.py @@ -15,6 +15,7 @@ class Background(): backgroundImages = ( pygame.transform.scale(backgroundImage.subsurface((0, 0, 800, 150)), (3200, 600)), pygame.transform.scale(backgroundImage.subsurface((0, 150, 800, 150)), (3200, 600)), + pygame.transform.scale(backgroundImage.subsurface((0, 300, 800, 150)), (3200, 600)), ) for image in backgroundImages: image.set_colorkey((255,0,255)) @@ -23,8 +24,9 @@ class Background(): pygame.sprite.Sprite.__init__(self) self.layers = ( - BackgroundLayer(Background.backgroundImages[0], mainGameClass, 0.5), - BackgroundLayer(Background.backgroundImages[1], mainGameClass, 1), + BackgroundLayer(Background.backgroundImages[0], mainGameClass, 0.25), + BackgroundLayer(Background.backgroundImages[1], mainGameClass, 0.5), + BackgroundLayer(Background.backgroundImages[2], mainGameClass, 1), ) diff --git a/BackgroundLayerFrame.py b/BackgroundLayerFrame.py index e7fe2dd..3c8686e 100644 --- a/BackgroundLayerFrame.py +++ b/BackgroundLayerFrame.py @@ -18,8 +18,12 @@ class BackgroundLayerFrame(pygame.sprite.Sprite): self.rect.center = (mainGameClass.getScreenWidth()/2 + offset[0], mainGameClass.getScreenHeight()/2 + offset[1]) + self.__doubleX = float(self.rect.x) + 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 + self.__doubleX -= self.mainGameClass.getGameSpeed() * self.speedMultiplier + if self.__doubleX < -self.rect.width: + self.__doubleX += self.rect.width*2 + + self.rect.x = self.__doubleX diff --git a/Floor.py b/Floor.py index c06b552..4cfd86e 100644 --- a/Floor.py +++ b/Floor.py @@ -11,7 +11,7 @@ class Floor(pygame.sprite.Sprite): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((mainGameClass.getScreenWidth(), mainGameClass.getFloorHeight()*101)) - self.image.fill((255, 204, 102)) + self.image.fill((255, 229, 180)) self.rect = self.image.get_rect() self.rect.center = (mainGameClass.getScreenWidth()/2, mainGameClass.getScreenHeight() + diff --git a/data/background.png b/data/background.png index e2fe42d714f0c4e5f76ba0ad9afc0a216c2091a5..1c059ebd57868702d38cb73fcd303ae08f8cc4e8 100644 GIT binary patch literal 6639 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 literal 3813 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 diff --git a/data/background.xcf b/data/background.xcf index 877897831fe96a1c16c2ccf8ff49bb33f750b34e..71c3d71d63316a8f4a2427dad2eaf7c09cc2d984 100644 GIT binary patch literal 21917 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 literal 13357 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 TK#S->8!$jz&;|q0?jHsKiAA{a