Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tkinter platformer game
#1
I'm trying to create a platformer with tkinter,
i've created the character and now i'm trying to create a dynamic background with a biomes system so when the player passes from a biome to another the background changes the image.
from tkinter import *
from PIL import Image, ImageTk
from random import *

current_image = None
path_img_1 = "assets/background/notte.png"  # images path
path_img_2 = "assets/background/Hills Layer 01.png"


def move_oval(oval, canvas, master, increase=2):  # move the ball
    x1, y1, x2, y2 = canvas.coords(oval)
    if x1 <= 0:
        increase = 2
    elif x2 >= canvas_width:
        increase = -2
    x1 += increase
    x2 += increase
    canvas.coords(oval, x1, y1, x2, y2)
    master.after(10, lambda: move_oval(oval, canvas, master, increase=increase))


def resize_image(width, height, path_image):  # create image from the paths and resize them
    image = Image.open(path_image)
    img_copy = image.copy()
    image = img_copy.resize((width, height))
    return image


def change_image(to_configure, img_to_change, new_image,master, canvas, alpha=0.0, image=None):  # chenge gradually two     images
    global current_image

    if alpha > 1:  # if alpha is > 1 the the cycle stops
        current_image = image
        return
    else:
        new_img = Image.blend(img_to_change, new_image, alpha)  # it modify a bit the image ( depends to the alpha value )
        modifying_image = ImageTk.PhotoImage(new_img)  # create a Photoimage from the modified image
        image = modifying_image
        canvas.itemconfigure(to_configure, image=modifying_image)  # modify the canvas object with the new Photoimage
        canvas.update()  # update the canvas
        master.after(50, lambda: change_image(to_configure, img_to_change, new_image, master, canvas,alpha=alpha + 0.2, image=image))  # call again the cycle with alpha increased by 0.2

master = Tk()
monitor_width = master.winfo_screenwidth()
monitor_height = master.winfo_screenheight()
canvas_width = monitor_width
canvas_height = monitor_height
x = (monitor_width / 2) - (canvas_width // 2)
y = (monitor_height / 2) - (canvas_height // 2)
master.geometry('%dx%d+%d+%d' % (canvas_width + 4, canvas_height + 4, x, y))
master.title("My game")
canvas = Canvas(master, width=canvas_width, height=canvas_height, bg="black")
canvas.place(x=0)


img_1 = resize_image(canvas_width, canvas_height, path_img_1)  # resize the    images
img_2 = resize_image(canvas_width, canvas_height, path_img_2)

img = ImageTk.PhotoImage(img_1)
image_keeper = img

canvas_image = canvas.create_image(0, 0, image=img, anchor=NW)

oval = canvas.create_oval(350, 340, 370, 360, fill="red")
move_oval(oval, canvas, master)

button = Button(canvas, text="change image", command=lambda: change_image(to_configure=canvas_image, img_to_change=img_1, new_image=img_2, master=master, canvas=canvas, alpha=0.0, image=None))
button.place(x=0)

master.mainloop()
here is an executable example for my issue.
The problem is that when the player changes biome the game call a function that modify the background image and while the image is changing huge lag starts in all the game elements
(it took a few seconds for change the image), i thought to use threading but don't know how to implement it for solve my issue. In the example the is not so much lag becouse the background image is only 1 but in my game i have 3 background images that are changed at the same time and the lag increase much. There are simpliest way for do this or something that i can do for solve it?
Reply


Messages In This Thread
Tkinter platformer game - by Linch1 - Mar-09-2019, 09:56 PM
RE: Tkinter platformer game - by Windspar - Mar-10-2019, 03:17 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] platformer enemy animation Yegor123 3 2,037 May-03-2023, 08:42 AM
Last Post: Windspar
  Napkin Platformer abscorpy 3 2,830 Jan-26-2019, 03:20 PM
Last Post: Windspar
  platformer problem abscorpy 1 2,436 Dec-11-2018, 11:08 PM
Last Post: Windspar
  platformer problem abscorpy 4 3,643 Nov-27-2018, 08:46 PM
Last Post: nilamo
  Pygame vs TKinter for a Quiz Game? SteampunkMaverick12 1 4,755 May-21-2018, 05:31 PM
Last Post: j.crater
  Help On Platformer Spectroxis 2 11,533 Apr-27-2017, 09:56 PM
Last Post: metulburr

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020