NameError 'canvas' не определен? - PullRequest
0 голосов
/ 05 ноября 2018

, так что я работал над кодом, чтобы заставить шарик подпрыгивать и прочее, но когда дело доходит до использования canvas, он дает мне NameError, которая говорит, что name 'canvas' не определено. Это код

from tkinter import *
from tkinter import PhotoImage

window = Tk()

tile_x_count = 4
tile_y_count = 4

#GetBGRND Image
background_image = PhotoImage(file = "C:/Users/david/Desktop/Bgrnd.png")
box_left = 0
box_top = 0
box_right = tile_x_count*background_image.width()
box_bottom = tile_y_count*background_image.height()

#Get sprite image
sprite_image = PhotoImage(file= "C:/Users/david/Desktop/Pelota.png")

sprite_half_width = sprite_image.width()/2
sprite_half_height = sprite_image.height()/2

#the numbers below are floating point to enable
sprite_x = 2.0*sprite_half_width
sprite_y = 2.0*sprite_half_height
vx=2.0
vy=3.0


#create canvas, background and sprite objects.
canvas = canvas(window, width = box_right, height = box_bottom, bg='black')
for i in range (tile_x_count):
    for j in range(tile_y_count):
        background = canvas.create_image(i*background_image.width(), j*background_image.height(), image = background_image, anchor = 'nw')

#the numbers below are integers and represent
sprite_image_x = int(sprite_x)
sprite_image_y = int(sprite_y)

sprite = canvas.create_image(sprite_image_x, sprite_image_y)
canvas.pack()

def on_up_arrow(event):
    global vy 
    vy -=5.0

def on_down_arrow(event):
    global vy
    vy +=5.0

def on_left_arrow(event):
    global vx
    vy -=5.0

def on_right_arrow(event):
    global vx
    vx += 5.0

window.title('Sprite Animation')
window.bind('<up>', on_up_arrow)
window.bind('<down>', on_down_arrow)
window.bind('<left>', on_left_arrow)
window.bind('<right>', on_right_arrow)
window.focus()

#animation loop
g = 9.8 #gravity
f = 0.9 #friction loss 

while true:
    sprite_x += vx
    sprite_y += vy + 0.5*g
    vy +=g

    move_x = int(sprite_x) - sprite_image_x
    move_y = int(sprite_y) - sprite_image_y
    canvas.move(sprite,move_x,move_y)

    sprite_image_x += move_x
    sprite_image_y += move_y
    canvas.after(10)
    canvas.update()


    if sprite_x+sprite_half_width >= box_right and vx > 0.0: 
        vx =-vx*f
        sprite_x = box_right - sprite_half_width
    elif sprite_x-sprite_half_width <= box_left and vx < 0.0:
        vx = -vx*f
        sprite_x = box_left +sprite_half_width
    elif sprite_y+sprite_half_height >= box_bottom and vy > 0.0:
        vy = -vy*f
        sprite_y = box_bottom - sprite_half_height
    elif sprite_y-sprite_half_height <= box_top and vy < 0.0:
        vy = -vy*f
        sprite_y = box_top + sprite_half_height


window.mainloop()

Так что я могу сделать, чтобы это исправить? и есть ли другие вещи, которые я должен изменить? Я не получаю никаких предупреждений о других действиях холста.

1 Ответ

0 голосов
/ 05 ноября 2018

Используйте Canvas вместо canvas, например:

canvas = Canvas(...)

...