2015年2月18日 星期三

pygtk cairo動畫(續) BUG修正(debian 7.7 memory增加的問題),增加鍵盤事件

程式原碼下載


修正在debian7.7下,memory一直增加問題,以及所有OS,執行會漰潰的問題.


memory增加是deb7.7 pygtk3.0的問題,改用gtk2.0正常

執行會漰潰的問題是gtk button元件的問題(使用者一直按button可能crash),改用鍵盤正常

避開BUG,就可好好來使用pygtk cairo製作想要的動畫


鍵盤事件,如下,把key-press-event事件跟 self.window連結,指定處理方法on_key_down
這裡實做是放到move_list_singal模組中,當使用者按下方向鍵右鍵,增加一隻移動物,每支
移動物都有自己特徵,按下方向鍵左鍵,刪除一隻移動物,移動物速度都不一樣,移動方式目前有2種,亂移,跟水平亂移,要怎移動,只是在加上去


main.py
...................................................................................................................
        self.window.connect("key-press-event", self.on_key_down)
....................................................................................................................

    #處理鍵盤,由move_list_signal物件來實作,呼叫self.move_list_signal.on_key_down(event)
    def on_key_down(self, widget, event):
        key = event.keyval
        self.move_list_signal.on_key_down(event)
        #if key == gtk.keysyms.Right:self.generate()




move_list_signal.py
.................................
    #鍵盤事件,若想不同動作,可繼承複寫
    def on_key_down(self, event):
        key = event.keyval
        if key == gtk.keysyms.Right:
            self.main.generate()
        if key == gtk.keysyms.Left:
            self.kill_move_first()




要增加移動方式 ,self.move_type是設定type給begin_move方法來判斷,程式碼,都有詳細註解


    #移動方式
    def set_move_type(self, mtype):
        self.move_type=mtype


    def begin_move(self,):#不給type為靜止
        if(self.move_type=="亂數"):self.set_move_random()
        if(self.move_type=="直線X"):self.set_move_line_x_radom()
   

執行畫面


沒有留言: