2015年2月15日 星期日

pygtk cairo 如何讓每一個動畫都有自己行為,以及如和建立每一個動畫信號

move_object.py以做修正,它不應該含有gtk ui部份,我希望它可以在畫圖區可以一直產生,若含有ui這樣是不對的,當然這邏輯很棒,每一隻都是一個執行續,擁有自己的生命行為,
我到可讓隻飛碟行徑路線,生命都不一樣,一般人可能只會想到用一個thread讓每隻動起來,這樣邏輯不好,而且程式複雜化了.
目前,每按一次按鈕,就會在frame隨機位置,隨機產生3種飛碟中之一種,每隻飛碟速度都不同,按停止扭,會一隻一隻的清空,我是每隻一一,用空白圖來清空
move_list_signal.py用來存放,每隻飛碟的list,到時每隻飛碟信號應該會這模組建立,有點像界面,做溝通用的,

說真的,這樣的邏輯思考,已經算滿神奇的,在來看一下,更神奇的信號處理,我如何讓飛碟飛碟一直增加,又能每隻飛碟能讓信號傳回主程式
  
下面START方法,按產生飛碟,就會建立一個move_object物件(就是一台亂跑的飛碟),用self把本身整個傳給每一隻建立的move_object物件,那move_object接收
這參數,就可使用RECEVER發法,又把自己self回傳給主程式,主程式可接收move_object所有東西



        #接收移動動畫信號,print印出每隻檔案名(測試用沒什意義,到時還要完成)
    def RECEVER(self,move_object):
        print(move_object.get_name())


    def START(self, widget, *event):
        if bt_active_label=='產生飛碟':
                  ...............................................................
          move_obj=move_object.move_object(self,self.framme1,self.darea,p)
                  ...............................................................


在來看move_object如何送信號過來,self.main_obj就是接收了主程式self,SEND_MOVE_SIGNAL方法呼叫了主程式中的RECEVER,然後move_object自帶的thread
會一直呼叫self.move_object.SEND_MOVE_SIGNAL(),終端機就看到每隻飛碟的3種飛碟檔名一直被印出來了,很神奇吧!!這樣就可用來做碰撞判斷用,其實我還試著想有沒有什方法
直接就可把飛碟信號傳給每隻飛碟,這樣的或應該就是超神的了,只想到透過類似界面,這界面會存放所有飛碟,主程式接受到每隻飛碟傳過來信號,逐一用for來傳這,
就是我在建立move_list_signal.py的原因,執行畫畫面就像下圖一樣,然後這是目前的程式源碼下載,有需要可拿去參考,只是無聊愛亂玩程式,哈哈哈
class move_object():
    #建構式,用來初始化物件
    def __init__(self,main_obj,frame,darea,image_path):
        self.main_obj=main_obj
                ..........................................................
         #初始化thread,把自己當參數,傳給thread,用來製照動畫,並啟動它
        self.thread = MyThread(self)       ...........................................
    def SEND_MOVE_SIGNAL(self):
        self.main_obj.RECEVER(self)

class MyThread(Thread):
    def __init__(self,move_obj):
        super(MyThread,self).__init__()
        self.move_object=move_obj
        ..........................
      

    def run(self):#執行續,執行的地方
            print("執行續啟動")
            while self.is_move:
                           ......................................
                   self.move_object.SEND_MOVE_SIGNAL()
                                   .....................................

沒有留言: