




已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
經(jīng)過(guò)幾篇文章的介紹,我們的引擎基本上已經(jīng)開始慢慢成形了,上一節(jié)我們雖然我們實(shí)現(xiàn)了各種組件,但是這些組件和節(jié)點(diǎn)(Node)都處于靜止?fàn)顟B(tài),很顯然既然是游戲,就不可能沒(méi)有動(dòng)畫,那么這一片文章我們就將給大家介紹引擎的動(dòng)畫系統(tǒng),這里我們將動(dòng)畫系統(tǒng)分為兩個(gè)大類,其一是一些基本的動(dòng)畫,包括位置的移動(dòng),縮放、旋轉(zhuǎn),透明度變化等,其二是幀動(dòng)畫,即由許多幀構(gòu)成的動(dòng)畫,在實(shí)現(xiàn)這些動(dòng)畫之前,我們都需要對(duì)一些基礎(chǔ)類進(jìn)行封裝,以方便我們對(duì)各種動(dòng)畫的實(shí)現(xiàn)。動(dòng)作(Action)這里我們說(shuō)的動(dòng)作類便是所有動(dòng)畫的基類,該類封裝一個(gè)特定行為,在運(yùn)行時(shí)賦予動(dòng)作一個(gè)目標(biāo),于是這個(gè)目標(biāo)將會(huì)執(zhí)行該動(dòng)作。同時(shí)需要注意只有節(jié)點(diǎn)(Node)的子類才能執(zhí)行一個(gè)動(dòng)作。有些動(dòng)作只有特定的節(jié)點(diǎn)類型才能運(yùn)行,但是大部分動(dòng)作都不限制節(jié)點(diǎn)具體類型。由于是所有動(dòng)畫的基類,所以我們只需要實(shí)現(xiàn)動(dòng)畫的路框架,包括動(dòng)畫結(jié)束的回調(diào)函數(shù)等,具體的動(dòng)畫效果實(shí)現(xiàn)將在其子類來(lái)實(shí)現(xiàn),如代碼清單5-1所示。代碼清單5-1:Action實(shí)現(xiàn)view plaincopy to clipboardprint?1. publicabstractclassActionimplementsYFSCopyable 2. /非法的標(biāo)記,為-1 3. publicstaticfinalintINVALID_TAG=-1; 4. /源目標(biāo) 5. privateNodemOriginalTarget; 6. /目標(biāo)節(jié)點(diǎn) 7. publicNodemTarget; 8. /動(dòng)畫標(biāo)記 9. privateintmTag; 10. /回調(diào) 11. privateCallbackmCallback; 12. /得到源節(jié)點(diǎn) 13. publicNodegetOriginalTarget() 14. returnthis.mOriginalTarget; 15. 16. /設(shè)置源節(jié)點(diǎn) 17. publicvoidsetOriginalTarget(Nodevalue) 18. this.mOriginalTarget=value; 19. 20. /得到目標(biāo) 21. publicNodegetTarget() 22. returnthis.mTarget; 23. 24. /設(shè)置目標(biāo) 25. publicvoidsetTarget(Nodevalue) 26. this.mTarget=value; 27. 28. /設(shè)置回調(diào) 29. publicvoidsetCallback(Callbackcallback) 30. this.mCallback=callback; 31. 32. /得到回調(diào) 33. publicCallbackgetCallback() 34. returnthis.mCallback; 35. 36. /得到,設(shè)置tag 37. publicintgetTag() 38. returnthis.mTag; 39. 40. publicvoidsetTag(intvalue) 41. this.mTag=value; 42. 43. /構(gòu)建動(dòng)作 44. protectedAction() 45. this.mTarget=(this.mOriginalTarget=null); 46. this.mTag=INVALID_TAG; 47. 48. /拷貝動(dòng)作 49. publicabstractActioncopy(); 50. /生成反響動(dòng)作 51. publicabstractActionreverse(); 52. /開始在指定節(jié)點(diǎn)上執(zhí)行動(dòng)作 53. publicvoidstart(Nodetarger) 54. this.mOriginalTarget=(this.mTarget=targer); 55. 56. /停止 57. publicvoidstop() 58. this.mTarget=null; 59. 60. /是否完成 61. publicbooleanisDone() 62. returntrue; 63. 64. /單步執(zhí)行 65. publicabstractvoidstep(floatparamFloat); 66. /更新 67. publicabstractvoidupdate(floatparamFloat); 68. /回調(diào)接口,動(dòng)作完成之后進(jìn)入 69. publicstaticabstractinterfaceCallback 70. publicabstractvoidonDone(ActionparamAction); 71. 72. public abstract class Action implements YFSCopyable /非法的標(biāo)記,為-1 public static final int INVALID_TAG = -1; /源目標(biāo) private Node mOriginalTarget; /目標(biāo)節(jié)點(diǎn) public Node mTarget; /動(dòng)畫標(biāo)記 private int mTag; /回調(diào) private Callback mCallback; /得到源節(jié)點(diǎn) public Node getOriginalTarget() return this.mOriginalTarget; /設(shè)置源節(jié)點(diǎn) public void setOriginalTarget(Node value) this.mOriginalTarget = value; /得到目標(biāo) public Node getTarget() return this.mTarget; /設(shè)置目標(biāo) public void setTarget(Node value) this.mTarget = value; /設(shè)置回調(diào) public void setCallback(Callback callback) this.mCallback = callback; /得到回調(diào) public Callback getCallback() return this.mCallback; /得到,設(shè)置tag public int getTag() return this.mTag; public void setTag(int value) this.mTag = value; /構(gòu)建動(dòng)作 protected Action() this.mTarget = (this.mOriginalTarget = null); this.mTag = INVALID_TAG; /拷貝動(dòng)作 public abstract Action copy(); /生成反響動(dòng)作 public abstract Action reverse(); /開始在指定節(jié)點(diǎn)上執(zhí)行動(dòng)作 public void start(Node targer) this.mOriginalTarget = (this.mTarget = targer); /停止 public void stop() this.mTarget = null; /是否完成 public boolean isDone() return true; /單步執(zhí)行 public abstract void step(float paramFloat); /更新 public abstract void update(float paramFloat); /回調(diào)接口,動(dòng)作完成之后進(jìn)入 public static abstract interface Callback public abstract void onDone(Action paramAction); 從代碼中我們可以看到,我們構(gòu)建了兩個(gè)Node對(duì)象,mOriginalTarget和mTarget分別是源目標(biāo)和當(dāng)前的目標(biāo),源目標(biāo)主要用于處理特定的動(dòng)畫,比如:屏幕的翻轉(zhuǎn)效果等,當(dāng)前目標(biāo)表示當(dāng)前動(dòng)畫在其目標(biāo)上執(zhí)行,同時(shí)我們還為每個(gè)動(dòng)畫都分配了一個(gè)標(biāo)記(mTag),這樣方便管理,這里特別需要說(shuō)明的是我們的回調(diào)接口Callback,用于處理動(dòng)畫執(zhí)行完畢之后觸發(fā)其接口中的onDone函數(shù),同時(shí)還提供了生成反向動(dòng)畫的函數(shù)reverse,當(dāng)然這并不是每個(gè)動(dòng)畫都能生成反向動(dòng)畫,需要在子類進(jìn)行實(shí)現(xiàn),后面我們會(huì)有實(shí)例介紹。動(dòng)作管理器(ActionManager)動(dòng)作管理器則是用來(lái)管理整個(gè)引擎中的動(dòng)畫,我們知道由于一個(gè)節(jié)點(diǎn)可以包含很多個(gè)動(dòng)畫,因此我們就構(gòu)建了一個(gè)HashElement來(lái)表示一個(gè)節(jié)點(diǎn)的動(dòng)畫情況,HashElement中包括了一個(gè)目標(biāo)節(jié)點(diǎn)和該節(jié)點(diǎn)的動(dòng)畫序列以及是否暫停,線面我們看ActionManager的具體實(shí)現(xiàn),如代碼清單5-2所示。代碼清單5-2:ActionManager實(shí)現(xiàn)view plaincopy to clipboardprint?1. publicclassActionManager 2. /所有的動(dòng)作列表,包括每個(gè)節(jié)點(diǎn)的動(dòng)畫 3. privateConcurrentHashMaptargets; 4. privatestaticActionManagersInstance; 5. static 6. sInstance=null; 7. 8. /取得本類實(shí)例對(duì)象 9. publicstaticActionManagergetInstance() 10. synchronized(ActionManager.class) 11. if(sInstance=null) 12. sInstance=newActionManager(); 13. 14. returnsInstance; 15. 16. 17. /構(gòu)建動(dòng)作管理器對(duì)象 18. privateActionManager() 19. synchronized(ActionManager.class) 20. /構(gòu)建一個(gè)計(jì)時(shí)器 21. /指定更新函數(shù)為tick 22. Scheduler.getInstance().schedule(newScheduler.Timer(this,tick); 23. this.targets=newConcurrentHashMap(131); 24. 25. 26. /清楚動(dòng)作 27. privatevoiddeleteHashElement(HashElementelement) 28. element.actions.clear(); 29. this.targets.remove(element.target); 30. 31. /動(dòng)作列表 32. privatevoidactionAlloc(HashElementelement) 33. if(element.actions=null) 34. element.actions=newCopyOnWriteArrayList(); 35. 36. /移除指定動(dòng)作 37. privatevoidremoveAction(intindex,HashElementelement) 38. element.actions.remove(index); 39. 40. if(element.actions.size()=0) 41. deleteHashElement(element); 42. 43. /暫停所有動(dòng)作 44. publicvoidpauseAllActions(Nodetarget) 45. HashElementelement=(HashElement)this.targets.get(target); 46. if(element!=null) 47. element.paused=true; 48. 49. /重新開始所有動(dòng)作 50. publicvoidresumeAllActions(Nodetarget) 51. HashElementelement=(HashElement)this.targets.get(target); 52. if(element!=null) 53. element.paused=false; 54. 55. /添加動(dòng)作 56. publicvoidaddAction(Actionaction,Nodetarget,booleanpaused) 57. assert(action!=null):Argumentactionmustbenon-null; 58. assert(target!=null):Argumenttargetmustbenon-null; 59. 60. HashElementelement=(HashElement)this.targets.get(target); 61. if(element=null) 62. element=newHashElement(target,paused); 63. this.targets.put(target,element); 64. 65. 66. actionAlloc(element); 67. 68. assert(!element.actions.contains(action):runAction:Actionalreadyrunning; 69. 70. element.actions.add(action); 71. /開始動(dòng)作 72. action.start(target); 73. 74. /移除所有動(dòng)作 75. publicvoidremoveAllActions() 76. for(HashElementelement:this.targets.values() 77. removeAllActions(element.target); 78. 79. /移除指定節(jié)點(diǎn)的所有動(dòng)作 80. publicvoidremoveAllActions(Nodetarget) 81. if(target=null) 82. return; 83. 84. /先找到指定節(jié)點(diǎn) 85. HashElementelement=(HashElement)this.targets.get(target); 86. if(element!=null) 87. element.actions.clear(); 88. deleteHashElement(element); 89. 90. 91. /移除指定動(dòng)作 92. publicvoidremoveAction(Actionaction) 93. /先找到動(dòng)作的源目標(biāo) 94. HashElementelement=(HashElement)this.targets.get(action 95. .getOriginalTarget(); 96. if(element!=null) 97. inti=element.actions.indexOf(action); 98. if(i!=Action.INVALID_TAG) 99. removeAction(i,element); 100. 101. 102. /移除指定 103. publicvoidremoveAction(inttag,Nodetarget) 104. assert(tag!=Action.INVALID_TAG):Invalidtag; 105. HashElementelement=(HashElement)this.targets.get(target); 106. if(element=null)|(element.actions=null) 107. return; 108. intlimit=element.actions.size(); 109. for(inti=0;ilimit;+i) 110. Actiona=(Action)element.actions.get(i); 111. if(a.getTag()=tag)&(a.getOriginalTarget()=target) 112. removeAction(i,element); 113. 114. 115. /得到指定目標(biāo)的指定動(dòng)作 116. publicActiongetAction(inttag,Nodetarget) 117. assert(tag!=Action.INVALID_TAG):Invalidtag; 118. HashElementelement=(HashElement)this.targets.get(target); 119. if(element!=null)&(element.actions!=null) 120. intlimit=element.actions.size(); 121. for(inti=0;ilimit;+i) 122. Actiona=(Action)element.actions.get(i); 123. if(a.getTag()=tag) 124. returna; 125. 126. 127. 128. returnnull; 129. 130. /得到運(yùn)行中的動(dòng)作的數(shù)量 131. publicintgetRunningActionCount(Nodetarget) 132. HashElementelement=(HashElement)this.targets.get(target); 133. if(element!=null) 134. return(element.actions!=null)?element.actions.size():0; 135. 136. return0; 137. 138. /計(jì)時(shí) 139. publicvoidtick(floatdt) 140. for(HashElementcurrentTarget:this.targets.values() 141. if(!currentTarget.paused) 142. for(intactionIndex=0;actionIndexcurrentTarget.actions.size();+actionIndex) 143. /取得動(dòng)作 144. ActioncurrentAction=(Action)currentTarget.actions 145. .get(actionIndex); 146. /設(shè)置單步執(zhí)行 147. currentAction.step(dt); 148. /如果動(dòng)作完成則調(diào)用所指定的回調(diào)函數(shù) 149. if(currentAction.isDone() 150. currentAction.stop(); 151. if(currentAction.getCallback()!=null) 152. currentAction.getCallback().onDone(currentAction); 153. 154. removeAction(currentAction); 155. 156. 157. 158. /沒(méi)有動(dòng)作就清楚 159. if(currentTarget.actions.size()=0) 160. deleteHashElement(currentTarget); 161. 162. 163. 164. staticclassHashElement 165. /動(dòng)作列表 166. CopyOnWriteArrayListactions; 167. /目標(biāo)節(jié)點(diǎn) 168. Nodetarget; 169. /是否暫停 170. booleanpaused; 171. HashElement(Nodet,booleanp) 172. this.target=t; 173. this.paused=p; 174. 175. publicStringtoString() 176. Strings=target=+this.target+,paused=+this.paused 177. +,actions=+this.actions+n; 178. for(Actiona:this.actions) 179. s=s+a.toString()+n; 180. 181. returns; 182. 183. 184. public class ActionManager /所有的動(dòng)作列表,包括每個(gè)節(jié)點(diǎn)的動(dòng)畫 private ConcurrentHashMap targets; private static ActionManager sInstance; static sInstance = null; /取得本類實(shí)例對(duì)象 public static ActionManager getInstance() synchronized (ActionManager.class) if (sInstance = null) sInstance = new ActionManager(); return sInstance; /構(gòu)建動(dòng)作管理器對(duì)象 private ActionManager() synchronized (ActionManager.class) /構(gòu)建一個(gè)計(jì)時(shí)器 /指定更新函數(shù)為tick Scheduler.getInstance().schedule(new Scheduler.Timer(this, tick); this.targets = new ConcurrentHashMap(131); /清楚動(dòng)作 private void deleteHashElement(HashElement element) element.actions.clear(); this.targets.remove(element.target); /動(dòng)作列表 private void actionAlloc(HashElement element) if (element.actions = null) element.actions = new CopyOnWriteArrayList(); /移除指定動(dòng)作 private void removeAction(int index, HashElement element) element.actions.remove(index); if (element.actions.size() = 0) deleteHashElement(element); /暫停所有動(dòng)作 public void pauseAllActions(Node target) HashElement element = (HashElement) this.targets.get(target); if (element != null) element.paused = true; /重新開始所有動(dòng)作 public void resumeAllActions(Node target) HashElement element = (HashElement) this.targets.get(target); if (element != null) element.paused = false; /添加動(dòng)作 public void addAction(Action action, Node target, boolean paused) assert (action != null) : Argument action must be non-null; assert (target != null) : Argument target must be non-null; HashElement element = (HashElement) this.targets.get(target); if (element = null) element = new HashElement(target, paused); this.targets.put(target, element); actionAlloc(element); assert (!element.actions.contains(action) : runAction: Action already running; element.actions.add(action); /開始動(dòng)作 action.start(target); /移除所有動(dòng)作 public void removeAllActions() for (HashElement element : this.targets.values() removeAllActions(element.target); /移除指定節(jié)點(diǎn)的所有動(dòng)作 public void removeAllActions(Node target) if (target = null) return; /先找到指定節(jié)點(diǎn) HashElement element = (HashElement) this.targets.get(target); if (element != null) element.actions.clear(); deleteHashElement(element); /移除指定動(dòng)作 public void removeAction(Action action) /先找到動(dòng)作的源目標(biāo) HashElement element = (HashElement) this.targets.get(action .getOriginalTarget(); if (element != null) int i = element.actions.indexOf(action); if (i != Action.INVALID_TAG) removeAction(i, element); /移除指定 public void removeAction(int tag, Node target) assert (tag != Action.INVALID_TAG) : Invalid tag; HashElement element = (HashElement) this.targets.get(target); if (element = null) | (element.actions = null) return; int limit = element.actions.size(); for (int i = 0; i limit; +i) Action a = (Action) element.actions.get(i); if (a.getTag() = tag) & (a.getOriginalTarget() = target) removeAction(i, element); /得到指定目標(biāo)的指定動(dòng)作 public Action getAction(int tag, Node target) assert (tag != Action.INVALID_TAG) : Invalid tag; HashElement element = (HashElement) this.targets.get(target); if (element != null) & (element.actions != null) int limit = element.actions.size(); for (int i = 0; i limit; +i) Action a = (Action) element.actions.get(i); if (a.getTag() = tag) return a; return null; /得到運(yùn)行中的動(dòng)作的數(shù)量 public int getRunningActionCount(Node target) HashElement element = (HashElement) this.targets.get(target); if (element != null) return (element.actions != null) ? element.actions.size() : 0; return 0; /計(jì)時(shí) public void tick(float dt) for (HashElement currentTarget : this.targets.values() if (!currentTarget.paused) for (int actionIndex = 0; actionIndex currentTarget.actions.size(); +actionIndex) /取得動(dòng)作 Action currentAction = (Action) currentTarget.actions .get(actionIndex); /設(shè)置單步執(zhí)行 currentAction.step(dt); /如果動(dòng)作完成則調(diào)用所指定的回調(diào)函數(shù) if (currentAction.isDone() currentAction.stop(); if (currentAction.getCallback() != null) currentAction.getCallback().onDone(currentAction); removeAction(currentAction); /沒(méi)有動(dòng)作就清楚 if (currentTarget.actions.size() = 0) deleteHashElement(currentTarget); static class HashElement /動(dòng)作列表 CopyOnWriteArrayList actions; /目標(biāo)節(jié)點(diǎn) Node target; /是否暫停 boolean paused; HashElement(Node t, boolean p) this.target = t; this.paused = p; public String toString() String s = target= + this.target + , paused= + this.paused + , actions= + this.actions + n; for (Action a : this.actions) s = s + a.toString() + n; return s; 大家可以看到HashElement的定義正如我們所說(shuō),包含一個(gè)節(jié)點(diǎn)的所有動(dòng)畫序列,然后整個(gè)ActionManager就應(yīng)該包含每一個(gè)節(jié)點(diǎn),因此使用了ConcurrentHashMap來(lái)表示這所有節(jié)點(diǎn)的所有動(dòng)畫。大家可以看到我們?cè)跇?gòu)建動(dòng)作管理器對(duì)象時(shí)創(chuàng)建了一個(gè)計(jì)時(shí)器,該計(jì)時(shí)器會(huì)不停的調(diào)用tick函數(shù),因此我們?cè)趖ick函數(shù)中就需要先去的當(dāng)前執(zhí)行動(dòng)畫的節(jié)點(diǎn),但后在找到該節(jié)點(diǎn)正在執(zhí)行的動(dòng)畫(一個(gè)節(jié)點(diǎn)可以同時(shí)執(zhí)行多個(gè)動(dòng)畫,或者后面即將介紹的組合動(dòng)畫),最后通過(guò)step函數(shù)來(lái)設(shè)置動(dòng)畫的單步執(zhí)行,同時(shí)我們?cè)趖ick函數(shù)中就可以時(shí)刻檢查當(dāng)前動(dòng)畫是否結(jié)束,如果結(jié)束就調(diào)用動(dòng)作類(Action)中的回調(diào)接口中的函數(shù)onDone。另外的一些操作就比較簡(jiǎn)單了,就是從動(dòng)畫管理器中添加、刪除動(dòng)畫,當(dāng)添加一個(gè)動(dòng)畫時(shí),我們就將對(duì)該動(dòng)畫調(diào)用start函數(shù)來(lái)觸發(fā)開始動(dòng)畫操作。時(shí)間動(dòng)畫(FiniteTimeAction)“時(shí)間動(dòng)畫”這個(gè)標(biāo)題或許概括得并不完善,實(shí)際上該類用于表示在有限時(shí)間內(nèi)可以完成的動(dòng)作,即有限時(shí)間動(dòng)畫,當(dāng)然也就對(duì)應(yīng)會(huì)有無(wú)限時(shí)間動(dòng)畫了,比如后面我們要給大家介紹的永久不停的動(dòng)畫就屬于無(wú)限時(shí)間動(dòng)畫。首先我們分析該類屬于動(dòng)作范圍,所以它將繼承自Action類,在因?yàn)樗幸欢斡邢薜臅r(shí)間限制,所以我們需要一個(gè)表示動(dòng)畫時(shí)間的變量,另外:同樣還有很多動(dòng)畫都需要在制定時(shí)間內(nèi)完成,所以它還是我們封裝的一個(gè)基類,有了這些條件下面來(lái)看我們的具體實(shí)現(xiàn),如代碼清單5-3所示。代碼清單5-3:FiniteTimeAction實(shí)現(xiàn)view plaincopy to clipboardprint?1. /用于表示在有限時(shí)間內(nèi)可以完成的動(dòng)作。 2. publicabstractclassFiniteTimeActionextendsAction 3. /執(zhí)行動(dòng)畫的時(shí)間限制 4. protectedfloatmDuration; 5. protectedFiniteTimeAction(floatduration) 6. this.mDuration=duration; 7. 8. publicfloatgetDuration() 9. returnthis.mDuration; 10. 11. publicvoidsetDuration(floatduration) 12. this.mDuration=duration; 13. 14. /用于表示在有限時(shí)間內(nèi)可以完成的動(dòng)作。 public abstract class FiniteTimeAction extends Action /執(zhí)行動(dòng)畫的時(shí)間限制 protected float mDuration; protected FiniteTimeAction(float duration) this.mDuration = duration; public float getD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年長(zhǎng)沙市雨花區(qū)井灣子街道辦事處招聘工作人員筆試真題
- 2025至2030年中國(guó)污水計(jì)量采樣裝置數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年蕪湖鳳鳴控股集團(tuán)及其子公司選調(diào)筆試真題
- 婚姻共同貸款協(xié)議
- 合作與合伙類合同
- 2025至2030年中國(guó)氯化橡膠船殼漆數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 會(huì)議營(yíng)銷合作協(xié)議
- 機(jī)床個(gè)人出售合同范本
- 多元投資協(xié)議
- 租賃蝦池合同范本
- 總體國(guó)家安全觀-創(chuàng)新引領(lǐng)10周年全文課件
- 鳥類知識(shí)科普課件
- 中國(guó)通用電氣有限公司員工手冊(cè)
- 自建房培訓(xùn)課件甘肅
- 閩教版四年級(jí)下冊(cè)勞動(dòng)教案
- 汽車電氣設(shè)備構(gòu)造與維修(高職版)全套教學(xué)課件
- 中小學(xué)必背飛花令詩(shī)詞-(春、月、風(fēng)、花、山、江、人、日、動(dòng)物、顏色、數(shù)字)
- 緩刑解除矯正個(gè)人總結(jié)
- 北師大版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)全冊(cè)一課一練課課練(含答案)
- 白酒加工小作坊整治工作方案
- 發(fā)揚(yáng)體育精神展青春光彩
評(píng)論
0/150
提交評(píng)論