2015年3月9日 星期一
pygtk cairo動畫(續),使用元件類別,讓各元件做出獨特動作
原碼下載:
在遊戲中飛碟王是用sub_picture.py模組來建立,讓各部元件有自己影像和移動方式,生命低於200,會伸出手臂,攻擊玩家,有教學文件,也有範例
move_object還提使用sub_picture.py模組來建立,讓各部元件有自己影像和移動方式,A和B其實用C都可取代掉的
1.先import sub_image_fly如下
from sub_fly_king import sub_image_fly
2.建立主影像list,這裡只用一元素,可幾個都沒關係,在用move_object建立移動物這樣就OK,0,0是相對座標,如下:
p=[sub_image("src/png/f1.png",0,0)]
move_fly_king=move_object(self,self.darea,p,None,None,"RECEVER_collision_fly","SEND_move_fly",self.king2_life)#生命50
3.隨時可用add_sub_image()來加入sub_image,如下:
p1=[sub_image_fly1("src/png/fp.png",80,10),sub_image_fly1("src/png/fp.png",20,10),sub_image_fly1("src/png/fp.png",140,10)]#旋轉燈
p2=[sub_image_fly("src/png/f2.png",-10,0,move_fly_king),sub_image_fly("src/png/f2.png",170,0,move_fly_king)]#攻擊手臂
move_fly_king.add_sub_image(p1)#加入旋轉燈
move_fly_king.add_sub_image(p2)#加入攻擊手臂
move_fly_king.set_move_type("直線X")
move_fly_king.set_y(20)
4.預設sub_image移動是跟move_object是一致,只是多相對座標,預設方法move_update,給主移動物x,y,又傳回去,沒改變甚,如下:
def move_update(self,x,y):#想成移動物的x,y就可,要如何更新
return x,y
def get_surface_cr(self,cr,x,y):#給參考點回傳一個cr surface,會被move_object執行續一直呼叫
self.x,self.y=self.move_update(x,y)[0]+self.x_r,self.move_update(x,y)[1]+self.y_r
return cr.set_source_surface(self.p,self.x,self.y)
5.假設我們要讓各部元件有自己移動方式,只要繼承sub_image,然後覆寫move_update這樣就OK,舉個例子上面第3點中sub_image_fly1("src/png/fp.png",80,10),
就是繼承sub_image如下, 下面move_update,給主移動物x,y,然後每次角度多1度,造成這個部件,繞著主移動物的相對座標(80,10),以半徑10繞圈圈
from sub_picture import sub_image
import math,cairo
class sub_image_fly1(sub_image):
def __init__(self,image_path,x,y):
#呼叫了父類別建構式
super(sub_image_fly1,self).__init__(image_path,x,y)
self.scale=0
#super(sub_image_fly,self).__init__(image_path,x,y)
#複寫父類別move_update
def move_update(self,x,y):#想成移動物的x,y就可,要如何更新
self.scale=self.scale+1
if(self.scale>=360):self.scale=0
offset_value=(float(self.scale))/180.0*math.pi
x=x+10*math.cos(float(offset_value))
y=y+10*math.sin(float(offset_value))
return x,y
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言