Skip to content

wxPython自由落下アニメーション

wxPythonでタイマーを使ってアニメーションを描画した.
Processingで同じプログラムを作る5倍はめんどくさいw

うまく動けば自由落下のアニメーションが動くはず.
厳密には自由落下ではないけど...

import wx

class myWindow(wx.Frame):
    def __init__(self, parent=None, id=-1, title=None):
        wx.Frame.__init__(self, parent, id, title)
        self.panel = wx.Panel(self, size=(300, 600))
        self.panel.SetBackgroundColour('WHITE')
        self.Fit()
        self.createTimer()
        self.counter = 0

        self.ball = Ball(10)
        
    
    def InitBuffer(self):
        size = self.GetClientSize()
        self.buffer = wx.EmptyBitmap(max(1,size.width), max(1,size.height))
        dc = wx.BufferedDC(None, self.buffer)
        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))


    def createTimer(self):
        self.timer=wx.Timer(self)
        self.timer.Start(20)
        self.Bind(wx.EVT_TIMER, self.onTimer, self.timer)

    def onTimer(self, event):
        self.InitBuffer()
        dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
        dc.Clear()
        dc.BeginDrawing()

        dc.SetPen(wx.Pen("black", 3, wx.SOLID))
        dc.DrawText("Free fall",20,20)
        self.ball.Fall(dc)

        dc.EndDrawing()

class Ball:
    def __init__(self,R):
        self.r = R
        self.v = 0
        self.x = 300/2
        self.y = 0

    def Fall(self,dc):
        self.v += 0.5
        self.y += self.v/2
        if self.y > 600:
              self.y = 0
              self.v = 0
        dc.SetPen(wx.Pen(wx.Colour(255,165,0)))
        dc.SetBrush(wx.Brush(wx.Colour(255,0,0)))
        dc.DrawCircle(150,self.y,self.r)
  

if __name__ == "__main__":
    app = wx.PySimpleApp()
    w = myWindow(title="Free Fall")
    w.Show()
    app.MainLoop()

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です