私は画面の上端と下端にボールをバウンスさせる次のコードを持っています。クラスとtkinterを使ったボールの移動
上に跳ねるためのコードを作業すると下
from tkinter import *
import random
import time
class Ball:
def __init__(self,canvas,color):
self.canvas=canvas
self.id=canvas.create_oval(30,30,50,50,fill=color)
self.canvas.move(self.id,100,200)
#ADD THESE LINES TO OUR __INIT__ METHOD
self.x=0
self.y=-1
self.canvas_height=self.canvas.winfo_height()
def draw(self):
self.canvas.move(self.id,self.x,self.y)
pos=self.canvas.coords(self.id)
if pos[1] <=0:
self.y=1
if pos[3] >=self.canvas_height:
self.y=-1
def main():
tk=Tk()
tk.title("My 21st Century Pong Game")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas=Canvas(tk,bg="white",width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()
ball1=Ball(canvas,'green')
while 1:
tk.update()
ball1.draw() #call the ball draw method here
time.sleep(0.01)
main()
それは左から右へ(左と右の壁にバウンス)のために実現するためにしようと、私はかなりのロジックを把握や解決できません私のエラーは以下の通りです。
私は答えについて
self.x=1 #set the object variable x to 0 (don't move the ball horizontally)
self.y=-0 #set the object variable y to -1 (this means keep moving the ball UP on initilisation)
self.canvas_height=self.canvas.winfo_height() #set the canvas height by calling the canvas function winfo_height (it gives us the current canvas height)
def draw(self):
self.canvas.move(self.id,self.x,self.y)
pos=self.canvas.coords(self.id)
if pos[2] <=0: #if you hit the top of the screen then stop subtracting 1 as defined in the __init__ method and therefore stop moving up -reverse directions
self.x=-1
if pos[3] >=self.canvas_height: #if the bottom coordinates are greater or equal to canvas height, then reverse again, and set y back to -1 (go up)
self.x=1
左右にバウンスのために試してみた、
誰かがに必要とされるロジックへと簡単に説明を提供することができ座標がどこから来ているのか、pos [0]、pos [1]などが何を参照しているのかという問題を解決してください。私はアイデアを持っていますが、それは明確ではなく、ある程度の明確さから利益を得るでしょう。
私は、問題を解決するために+私の元のコードを使用して説明+コード化された解決策の後です。