版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)習(xí)情境游戲開發(fā)第一頁,共六十頁,2022年,8月28日能力目標(biāo)學(xué)會(huì)使用GameCvanvas類的按鍵響應(yīng)方法;會(huì)熟練構(gòu)造精靈類;學(xué)會(huì)使用精靈實(shí)現(xiàn)動(dòng)畫的自動(dòng)播放;能熟練設(shè)置精靈出現(xiàn)的位置、顯示幀、切換幀和繪制幀的方法。學(xué)會(huì)使用Vector類創(chuàng)建子彈、移動(dòng)子彈和繪制子彈;學(xué)會(huì)自定義對(duì)象類的方法,構(gòu)造一個(gè)游戲?qū)ο?;學(xué)會(huì)使用變量來模擬計(jì)數(shù)器功能,實(shí)現(xiàn)游戲?qū)ο笠圆煌念l率運(yùn)動(dòng);熟練掌握使用setTransform()方法,實(shí)現(xiàn)精靈對(duì)象的旋轉(zhuǎn);熟練掌握使用精靈類提供的方法進(jìn)行碰撞的檢測(cè);……第二頁,共六十頁,2022年,8月28日認(rèn)知目標(biāo)認(rèn)識(shí)游戲的屏幕GameCanvas類;了解GameCanvas類和Canvas類的區(qū)別;了解GameCvanvas類的自動(dòng)雙緩沖區(qū)和脫屏畫筆;學(xué)習(xí)精靈類中常用方法的語法格式,并理解其中參數(shù)的含義。了解Vector類中的常用方法,并理解各參數(shù)的含義;理解計(jì)數(shù)器在游戲程序中的使用方法和重要性;理解setTransform()方法中參數(shù)rotating的8個(gè)取值的含義認(rèn)知collidesWith()方法的語法格式,并理解其參數(shù)的含義;理解區(qū)域級(jí)和像素級(jí)碰撞區(qū)別;理解播放幀序列中的幀號(hào)碼和幀序號(hào)的區(qū)別;……第三頁,共六十頁,2022年,8月28日4.1學(xué)習(xí)情景描述除棋牌類游戲之外,一款手機(jī)游戲,通常在一個(gè)特定的場(chǎng)景下展開,這個(gè)特定的場(chǎng)景,就是游戲的背景,根據(jù)需要,游戲背景還可以滾動(dòng)。在游戲背景下,通常有若干個(gè)游戲的對(duì)象。其中可以由玩家通過按鍵來控制的游戲?qū)ο螅Q為游戲的“主角”,其余不能由玩家來控制的角色稱為“NPC”,即非玩家控制角色,或系統(tǒng)控制角色。這些游戲?qū)ο罂梢赃M(jìn)行移動(dòng)、跳躍、投擲、發(fā)射子彈、攻擊等各種動(dòng)作。并通過對(duì)這些游戲?qū)ο蠛蛣?dòng)作進(jìn)行HP(生命值)、MP(經(jīng)驗(yàn)值)、攻擊力等等的數(shù)值設(shè)計(jì),來判斷游戲的勝利或者失敗。本學(xué)習(xí)情境分為五個(gè)學(xué)習(xí)單元來完成。單元一,游戲主角設(shè)計(jì);單元二,子彈設(shè)計(jì);單元三,NPC(非玩家控制角色)設(shè)計(jì);單元四,游戲背景設(shè)計(jì);單元五,滾屏設(shè)計(jì)。第四頁,共六十頁,2022年,8月28日游戲主角是由玩家來控制的游戲?qū)ο螅梢允且患茱w機(jī)、一輛坦克、一個(gè)人物等。玩家通過手機(jī)鍵盤上的按鍵,可以控制游戲主角在手機(jī)屏幕上進(jìn)行移動(dòng)、跳躍、投擲、格斗等各種動(dòng)作。
在本學(xué)習(xí)單元中,首先,通過控制一架飛機(jī)在屏幕上的移動(dòng),來認(rèn)識(shí)GameCanvas,并學(xué)習(xí)在GameCanvas中的鍵盤處理;然后,通過在移動(dòng)時(shí),改變飛機(jī)的形狀,初識(shí)精靈類;最后,通過控制一個(gè)主角人物在屏幕上的行走,來深入地學(xué)習(xí)精靈類的使用。4.2游戲主角設(shè)計(jì)第五頁,共六十頁,2022年,8月28日4.2.2知識(shí)準(zhǔn)備:了解GameCanvas類MIDP有1.0和2.0版本之分。在MIDP2.0中,新增加了一個(gè)包,這個(gè)包中定義了專門用于游戲開發(fā)的5個(gè)新類:GameCanvas、Layer、LayerManager、Sprite和TiledLayer。這些類主要針對(duì)游戲開發(fā)的特點(diǎn),提供了用于提高游戲性能的獨(dú)立功能。其中,GameCanvas類繼承自MIDP1.0中的Canvas類,為游戲提供了基本的“屏幕”功能。除了完全具備Canvas類的功能外,這個(gè)類還提供了游戲?qū)S玫墓δ?,這些功能簡化了游戲開發(fā)并提高了運(yùn)行性能。比如:提供雙緩沖繪制機(jī)制,能直接獲得設(shè)備鍵盤的物理狀態(tài)等等。第六頁,共六十頁,2022年,8月28日4.2.3任務(wù)一:控制主角飛機(jī)在屏幕上移動(dòng)第七頁,共六十頁,2022年,8月28日任務(wù)準(zhǔn)備(1)聲明變量(2)在構(gòu)造方法中實(shí)現(xiàn)初始化(3)繪制屏幕(4)響應(yīng)鍵盤(5)啟動(dòng)線程(6)控制線程(7)測(cè)試運(yùn)行(1)新建MIDlet工程,工程名為“Ch4_Unit1”。(2)新建MIDlet類,類名為“Ch4_Unit1_MIDlet”。(3)新建GameCanvas類。(4)將主角飛機(jī)圖片資源文件plane.png,拷貝到工程的“res”文件夾下。實(shí)現(xiàn)過程第八頁,共六十頁,2022年,8月28日知識(shí)提煉:MIDP2.0中的鍵盤處理在MIDP2.0中,不需要等待鍵盤事件發(fā)生后才能獲取鍵盤狀態(tài)信息,通過調(diào)用GameCanvas類上定義的的getKeyStates()方法,可以隨時(shí)獲取鍵盤狀態(tài)信息,并且可以獲取多個(gè)按鍵狀態(tài)信息。getKeyStates()方法的語法如下:publicintgetKeyStates()該方法返回一個(gè)int型數(shù)據(jù),其中每一位代表一個(gè)按鍵的狀態(tài)。如果某個(gè)按鍵被按下,則對(duì)應(yīng)的數(shù)據(jù)位為1,否則,數(shù)據(jù)位為0。000010000GAMEDGAME
CGAMEBGAMEAFIREDOWNUPRIGHTLEFT
MIDP2.0在GameCanvas類上定義了九個(gè)靜態(tài)屬性常量來表示游戲按鍵狀態(tài)碼,分別為: UP_PRESSED 上功能鍵或數(shù)字2鍵 DOWN_PRESSED 下功能鍵或數(shù)字8鍵 LEFT_PRESSED 左功能鍵或數(shù)字4鍵 RIGHT_PRESSED 右功能鍵或數(shù)字6鍵 FIRE_PRESSED 開火功能鍵或數(shù)字5鍵 GAME_A_PRESSED 數(shù)字1鍵 GAME_B_PRESSED 數(shù)字3鍵 GAME_C_PRESSED 數(shù)字7鍵 GAME_D_PRESSED 數(shù)字9鍵第九頁,共六十頁,2022年,8月28日檢測(cè)按鍵狀態(tài)方法intkeyCode=this.getKeyStates();//獲取鍵盤狀態(tài)if(keyCode==GameCanvas.UP_PRESSED){//假如是按上鍵 ……}elseif(keyCode==GameCanvas.DOWN_PRESSED){//假如是按下鍵 ……}elseif(keyCode==GameCanvas.LEFT_PRESSED){//假如是按左鍵 ……
}elseif(keyCode==GameCanvas.RIGHT_PRESSED){//假如是按右鍵 ……}當(dāng)然,也可以使用位“與”的方法進(jìn)行判斷:intkeyCode=this.getKeyStates();//獲取鍵盤狀態(tài)if((keyCode&GameCanvas.UP_PRESSED)!=0){//假如是按向上鍵 ……}elseif((keyCode&GameCanvas.DOWN_PRESSED)!=0){//假如是按下鍵 ……}elseif((keyCode&GameCanvas.LEFT_PRESSED)!=0){//假如是按向左鍵 ……}elseif((keyCode&GameCanvas.RIGHT_PRESSED)!=0){//假如是按向右鍵 ……}使用上述兩種方法,都只能判斷一個(gè)按鍵被按下的情況,無法判斷多個(gè)按鍵被同時(shí)按下的情況。原因是,比如,當(dāng)同時(shí)按下“上”和“右”按鍵的時(shí)候,得到的值既不是UP_PRESSED也不是RIGHT_PRESSED。改進(jìn)方法如下:if(((keyCode&GameCanvas.UP_PRESSED)!=0)&&((keyCode&GameCanvas.LEFT_PRESSED)!=0)){//左、上兩個(gè)按鍵被同時(shí)按下 ……}elseif(((keyCode&GameCanvas.UP_PRESSED)!=0)&&((keyCode&GameCanvas.RIGHT_PRESSED)!=0)){//右、上兩個(gè)按鍵被同時(shí)按下 ……}elseif((keyCode&GameCanvas.LEFT_PRESSED)!=0){//左鍵被按下 ……}elseif((keyCode&GameCanvas.RIGHT_PRESSED)!=0){//右鍵被按下 ……}小提示:由于使用的是elseif判斷,因此對(duì)多按鍵被同時(shí)按下的判斷應(yīng)放在單按鍵被按下的判斷之前。比如,當(dāng)同時(shí)按下左、上按鍵時(shí),會(huì)有如下三個(gè)條件同時(shí)成立:(keyCode&GameCanvas.UP_PRESSED)!=0(keyCode&GameCanvas.LEFT_PRESSED)!=0((keyCode&GameCanvas.UP_PRESSED)!=0)&&((keyCode&GameCanvas.LEFT_PRESSED)!=0)
如果單按鍵被按下的判斷放在前面,那么后面的多按鍵被按下的情況就不再判斷了。第十頁,共六十頁,2022年,8月28日protectedGameCanvas(booleansuppressKeyEvents)
參數(shù)suppressKeyEvents用于指定是否支持MIDP1.0中的鍵盤響應(yīng)事件。當(dāng)參數(shù)取值為true時(shí),指明不支持鍵盤響應(yīng)事件。當(dāng)用戶操作鍵盤時(shí),不會(huì)引起keyPressed()、keyReleased()和keyRepeated()這三個(gè)事件方法被調(diào)用,這樣可以提高速度和性能。如果參數(shù)取值為false,那么一旦按鍵被按下,就會(huì)調(diào)用上述三個(gè)傳統(tǒng)的鍵盤事件處理方法。
在GameCanvas類中定義的九個(gè)表示按鍵狀態(tài)碼的靜態(tài)屬性常量中,并不包含鍵盤左上角的“左軟鍵”和鍵盤右上角的“右軟鍵”。而這兩個(gè)按鍵通常被用來響應(yīng)“返回”、“暫?!?、“退出”、“確定”等與用戶交互的功能按鈕。因此,在MIDP2.0中保留了對(duì)MIDP1.0中的按鍵響應(yīng)機(jī)制,通常用于對(duì)“左軟鍵”和“右軟鍵”的響應(yīng)。要點(diǎn)提示1:GameCanvas類的構(gòu)造方法第十一頁,共六十頁,2022年,8月28日要點(diǎn)提示1:繪制雙緩沖區(qū)1、在MIDP2.0中,GameCanvas類為每個(gè)實(shí)例對(duì)象提供唯一的圖形緩沖區(qū),緩沖區(qū)的大小與屏幕大小一樣。每一個(gè)GameCanvas對(duì)象所擁有的緩沖區(qū)都是獨(dú)立的,因此最好在游戲中僅創(chuàng)建一個(gè)GameCanvas類對(duì)象,并且重復(fù)利用。2、調(diào)用GameCanvas類的getGraphics()方法,可以獲得繪制緩沖區(qū)的Graphics對(duì)象。3、調(diào)用GameCanvas類的flushGraphics()方法,可以將緩沖區(qū)中的內(nèi)容繪制到屏幕上。第十二頁,共六十頁,2022年,8月28日4.2.4任務(wù)二:飛機(jī)移動(dòng)時(shí),實(shí)現(xiàn)形狀的改變第十三頁,共六十頁,2022年,8月28日知識(shí)準(zhǔn)備:了解精靈類精靈類(Sprite)被定義在包中,專門用來代表游戲中的動(dòng)畫角色,可以顯示一幀或多幀的連續(xù)圖像。但所有的幀都必須大小相同,并且由一個(gè)Image對(duì)象提供。比如:飛機(jī)在飛行時(shí)有三種不同的形狀,正向飛行,向左側(cè)飛行和向右側(cè)飛行:。將這三個(gè)形狀不同,但大小相同(25×24)的小圖片合成到一個(gè)Image對(duì)象中。每個(gè)小圖片為一幀,幀的序號(hào)從0開始,并且按從左到右,從上到下的順序依次排列。通過精靈類(Sprite)對(duì)象,可以任意顯示其中某一幀的靜態(tài)圖像,或者連續(xù)地、循環(huán)顯示任意順序的某幾幀,以實(shí)現(xiàn)動(dòng)畫效果。精靈類(Sprite)還提供了許多變換模式(翻轉(zhuǎn)和旋轉(zhuǎn)),以及碰撞檢測(cè)的方法,能大大簡化游戲邏輯的實(shí)現(xiàn)。第十四頁,共六十頁,2022年,8月28日知識(shí)提煉:精靈類構(gòu)造方法(1)publicSprite(Imageimage)說明:通過圖像創(chuàng)建一個(gè)只含有一幀圖像的非動(dòng)畫Sprite類對(duì)象,即只能顯示一幅靜態(tài)圖像。利用該方法創(chuàng)建精靈類對(duì)象的目的,主要是利用Sprite類提供的方法,實(shí)現(xiàn)圖像各種角度的翻轉(zhuǎn)、碰撞檢測(cè)等功能。參數(shù):image為只含有一幀的圖像。(2)publicSprite(Imageimage,intframeWidth,intframeHeight)說明:通過圖像創(chuàng)建一個(gè)指定每幀圖像大小的動(dòng)畫精靈類對(duì)象,該方法是最常用的。參數(shù):image為包含多幀的圖像。frameWidth和frameHeight分別為每一幀的寬度和高度。(3)publicSprite(Spritesprite)說明:通過一個(gè)精靈類對(duì)象創(chuàng)建一個(gè)新的精靈類對(duì)象。參數(shù):sprite是一個(gè)已創(chuàng)建好的精靈類。第十五頁,共六十頁,2022年,8月28日要點(diǎn)提示(1)單幀圖像處理publicvoidsetFrame(intindex)其中,參數(shù)index為當(dāng)前精靈類對(duì)象某一幀的序號(hào)。(2)設(shè)置精靈位置并繪制精靈①publicvoidsetPosition(intx,inty)說明:將精靈類對(duì)象定位到屏幕上的任意位置。參數(shù):x為橫坐標(biāo),y為縱坐標(biāo)。②publicvoidpaint(Graphicsg)說明:繪制精靈類對(duì)象的當(dāng)前幀。參數(shù):g為繪制上下文。第十六頁,共六十頁,2022年,8月28日4.2.5任務(wù)三:設(shè)計(jì)主角人物在屏幕上行走第十七頁,共六十頁,2022年,8月28日任務(wù)準(zhǔn)備(1)聲明變量(2)在構(gòu)造方法中實(shí)現(xiàn)初始化(3)繪制屏幕(4)響應(yīng)鍵盤(5)啟動(dòng)線程(6)控制線程(7)測(cè)試運(yùn)行(1)新建MIDlet類,類名為“Ch4_Unit1_MIDlet2”。(2)新建GameCanvas類,類名為“Ch4_Unit1_GameCanvas2”(3)將主角人物圖片資源文件man.png,拷貝到工程的“res”文件夾下。實(shí)現(xiàn)過程第十八頁,共六十頁,2022年,8月28日要點(diǎn)提示(1)多幀動(dòng)畫處理publicvoidsetFrameSequence(int[]sequence)publicvoidnextFrame()publicvoidprevFrame()小提示:使用getFrame()方法可以獲取動(dòng)畫播放幀序列中當(dāng)前正在播放的圖像幀序號(hào)。在實(shí)際應(yīng)用中,可以使用該方法判斷某一次動(dòng)畫的播放幀是否已經(jīng)播放完畢,比如:爆炸效果。(2)精靈的移動(dòng)publicvoidmove(intdx,intdy)小提示:當(dāng)多次使用move()方法移動(dòng)精靈后,其在屏幕上的確切位置就有些模糊了。此時(shí)可以使用精靈類提供的getX()和getY()方法,來獲取精靈的當(dāng)前坐標(biāo)位置,以此判斷精靈是否移出了屏幕,即進(jìn)行邊界的處理。第十九頁,共六十頁,2022年,8月28日要點(diǎn)提示int[][]sequence={{6,7,8},{0,1,2},{3,4,5},{9,10,11}};//上、下、左、右播放幀序列intdirection=-1;//行走方向
0:上1:下2:左3:右
-1:無方向第二十頁,共六十頁,2022年,8月28日4.2.6延伸任務(wù):控制主角人物,按鍵行走,釋放站立 privatevoidcontrolFrame(intdirection){ if(frameIndex<sequence[direction].length-1){ frameCounter--; if(frameCounter==0){ frameIndex++; frameCounter=3; } }else{ frameIndex=1;//跳過0幀(站立幀) } spMan.setFrame(sequence[direction][frameIndex]);//設(shè)置幀 }第二十一頁,共六十頁,2022年,8月28日4.3子彈設(shè)計(jì)在射擊類游戲中,除主角和NPC之外,子彈是一個(gè)很重要的游戲元素。他可以自動(dòng)地、源源不斷地發(fā)射,或者按鍵觸發(fā)后發(fā)射。其實(shí),子彈只是一個(gè)特殊的游戲元素,使用與設(shè)計(jì)子彈同樣的方法,可以設(shè)計(jì)任何形狀的、與游戲角色相關(guān)的游戲元素,比如:潛水艇扔下的水雷、武士發(fā)出的暗器、天上飄落的雪花、大富翁游戲中掉落的金子等等。在本學(xué)習(xí)單元中,首先,通過Vector類進(jìn)行子彈的設(shè)計(jì);然后,通過自定義類的方法設(shè)計(jì)子彈,并指出兩種設(shè)計(jì)方法在實(shí)現(xiàn)手段和執(zhí)行效率及執(zhí)行效果上的差別;最后,通過實(shí)現(xiàn)散彈,進(jìn)一步學(xué)習(xí)精靈類對(duì)象在運(yùn)行過程,進(jìn)行圖片的動(dòng)態(tài)轉(zhuǎn)換和對(duì)象的旋轉(zhuǎn)。第二十二頁,共六十頁,2022年,8月28日4.3.2使用Vector類設(shè)計(jì)子彈第二十三頁,共六十頁,2022年,8月28日知識(shí)準(zhǔn)備:了解Vector類Vector類位于java.util包中。在J2MEMIDP2.0中,保留了J2SE中的Vector類。該類對(duì)用戶隱藏了內(nèi)存分配的細(xì)節(jié)問題,使用Vector可以作為需要?jiǎng)討B(tài)生成對(duì)象的容器。而游戲中的子彈則是動(dòng)態(tài)生成的最好例子。Vector有“矢量、媒介、載體”的含義,很多書上稱之為“向量”。但把他看成一個(gè)“容器”也許更形象一些,因?yàn)樗軌蛳袢萜饕粯哟娣鸥鞣N類型的對(duì)象。而且這個(gè)“容器”隨著存放對(duì)象的多少,其長度可以動(dòng)態(tài)地變化。從這個(gè)角度來說,Vector就是一個(gè)能夠存放任意類型對(duì)象的動(dòng)態(tài)數(shù)組。第二十四頁,共六十頁,2022年,8月28日任務(wù)準(zhǔn)備(1)聲明子彈相關(guān)變量(2)在構(gòu)造方法中加載圖片(3)自定義創(chuàng)建子彈的方(4)自定義移動(dòng)子彈的方法
(5)自定義繪制子彈的方(6)在繪制屏幕的show()方法中,添加對(duì)上述三個(gè)方法的調(diào)用語句,實(shí)現(xiàn)對(duì)子彈的繪制。
(7)測(cè)試運(yùn)行(1)新建MIDlet工程,工程名為“Ch4_Unit2”。(2)新建MIDlet類,類名為“Ch4_Unit2_MIDlet”。(3)新建GameCanvas類,類名為“Ch4_Unit2_GameCanvas”。(4)將飛機(jī)圖片文件plane2.png,和子彈圖片文件bullet.png,拷貝到工程的“res”文件夾下。實(shí)現(xiàn)過程第二十五頁,共六十頁,2022年,8月28日知識(shí)提煉:Vector類的常用方法(1)構(gòu)造方法①publicVector(intinitialCapacity,intcapacityIncrement)說明:通過參數(shù)構(gòu)造一個(gè)Vector的動(dòng)態(tài)數(shù)組。能設(shè)置動(dòng)態(tài)數(shù)組的初始容量和遞增增量。參數(shù):initialCapacity為Vector動(dòng)態(tài)數(shù)組的初始容量。capacityIncrement為Vector動(dòng)態(tài)數(shù)的遞增增量。②publicVector(intinitialCapacity)說明:通過參數(shù)構(gòu)造一個(gè)Vector的動(dòng)態(tài)數(shù)組。只能設(shè)置動(dòng)態(tài)數(shù)組的初始容量。一般是增長目前大小的一倍。參數(shù):initialCapacity為Vector動(dòng)態(tài)數(shù)組的初始容量。③publicVector()說明:構(gòu)造一個(gè)Vector動(dòng)態(tài)數(shù)組。參數(shù):無。(2)size方法語法:publicintsize()說明:返回當(dāng)前Vector動(dòng)態(tài)數(shù)組中的元素個(gè)數(shù)。參數(shù):無。(3)addElement方法:語法:publicvoidaddElement(Objectobj)說明:把組件加到向量尾部,同時(shí)大小加1,向量容量比以前大1。參數(shù):Objectobj是向動(dòng)態(tài)數(shù)組中添加的對(duì)象。(4)removeElementAt方法:語法:publicvoidremoveElementAt(inti)說明:把第i個(gè)元素移出動(dòng)態(tài)數(shù)組。同時(shí),動(dòng)態(tài)數(shù)組的大小減1。參數(shù):inti為要移除的動(dòng)態(tài)數(shù)組的第i個(gè)元素。(5)ElementAt方法:語法:publicObjectElementAt(inti)說明:返回Vector動(dòng)態(tài)數(shù)組中的第i個(gè)對(duì)象。參數(shù):inti為返回動(dòng)態(tài)數(shù)組的第i個(gè)元素。返回值:返回Vector動(dòng)態(tài)數(shù)組中的對(duì)象。注意,返回的對(duì)象要強(qiáng)制轉(zhuǎn)換為自己所需要的類型。第二十六頁,共六十頁,2022年,8月28日要點(diǎn)提示privatevoidcreateBullet(){if(--distance<=0){SpritespBullet=newSprite(imgBullet);spBullet.setPosition(spPlane.getX()+10,spPlane.getY());vecBullet.addElement(spBullet);distance=6;}}第二十七頁,共六十頁,2022年,8月28日4.3.3任務(wù)五:使用自定義子彈(Bullet)類的方法設(shè)計(jì)子彈任務(wù)四和任務(wù)五,采用不同的方法,實(shí)現(xiàn)了同樣的效果。但要注意區(qū)別兩者在實(shí)現(xiàn)方法和執(zhí)行效率及執(zhí)行效果上的差別。Vector類使用方便,但其對(duì)內(nèi)存的頻繁動(dòng)態(tài)分配,在一定程度上會(huì)影響執(zhí)行效率。并且放入Vector中的對(duì)象,一般都具有相同的屬性和行為,比如,都按同一軌跡運(yùn)行。而自定義子彈類的方法,則比較靈活??梢酝ㄟ^給定不同的子彈圖片,定義各種不同形狀的子彈,可以設(shè)計(jì)多種運(yùn)行軌跡,使得不同的子彈可以按不同的軌跡運(yùn)行。需要注意的是,Bullet類只是一個(gè)普通的JAVA類,并沒有繼承自精靈類。主要原因是精靈類占用內(nèi)存空間比較大一些,而且運(yùn)行起來比較慢。因此,在本任務(wù)中只聲明了一個(gè)子彈精靈spBullet,而不是十五個(gè)。并該子彈精靈看成是一個(gè)“精靈圖章”,當(dāng)需要顯示15顆子彈中的某一顆時(shí),只需在相應(yīng)的位置上“蓋”上對(duì)應(yīng)的“精靈圖章”即可,這樣既節(jié)省了內(nèi)存,又提高了運(yùn)行效率。第二十八頁,共六十頁,2022年,8月28日4.3.4延伸任務(wù):實(shí)現(xiàn)散彈第二十九頁,共六十頁,2022年,8月28日知識(shí)提煉(2)精靈對(duì)象的旋轉(zhuǎn)使用setTransform()方法可以實(shí)現(xiàn)精靈對(duì)象的旋轉(zhuǎn),語法格式如下:publicviodsetTransform(introtating)其中,參數(shù)Rotating是由8個(gè)靜態(tài)屬性常量來表示。TRANS_NONE:保持圖像的原始位置。TRANS_ROT90:順時(shí)針旋轉(zhuǎn)90度。TRANS_ROT180:順時(shí)針旋轉(zhuǎn)180度。TRANS_ROT270:順時(shí)針旋轉(zhuǎn)270度。TRANS_MIRROR:沿著圖片垂直Y軸翻轉(zhuǎn)。TRANS_MIRROR_ROT90:沿著圖片垂直Y軸翻轉(zhuǎn)后,再順時(shí)針旋轉(zhuǎn)90度。TRANS_MIRROR_ROT180:沿著圖片垂直Y軸翻轉(zhuǎn)后,再順時(shí)針旋轉(zhuǎn)180度。TRANS_MIRROR_ROT270:沿著圖片垂直Y軸翻轉(zhuǎn)后,再順時(shí)針旋轉(zhuǎn)270度。(1)精靈圖片的動(dòng)態(tài)轉(zhuǎn)換使用setImage()方法可以在運(yùn)行時(shí),實(shí)現(xiàn)精靈圖片的動(dòng)態(tài)轉(zhuǎn)換,語法格式如下:publicvoidsetImage(Imageimg,intframeWidth,intframeHeight)其中,參數(shù)img表示要?jiǎng)討B(tài)改變的圖片對(duì)象,frameWidth和frameHeight是圖片幀的寬度和高度。第三十頁,共六十頁,2022年,8月28日4.4NPC(非玩家控制的角色)設(shè)計(jì)NPC,即非玩家控制的角色,比如:射擊類游戲中的敵機(jī)。NPC的設(shè)計(jì)通常包括:形象設(shè)計(jì)、出現(xiàn)的時(shí)機(jī)、出現(xiàn)方式、運(yùn)行軌跡、碰撞檢測(cè)、生命值和得分等簡單的數(shù)值設(shè)計(jì)、以及簡單的AI設(shè)計(jì)等等。在本學(xué)習(xí)單元中,以射擊類游戲中的敵機(jī)為NCP的特例。首先,對(duì)其的出現(xiàn)方式和運(yùn)行軌跡進(jìn)行設(shè)計(jì);然后,通過添加時(shí)間軸,對(duì)其的出現(xiàn)時(shí)機(jī)進(jìn)行了統(tǒng)一的安排和設(shè)計(jì);接著,進(jìn)行主角子彈和敵機(jī)的碰撞檢測(cè);最后,通過出現(xiàn)BOSS,進(jìn)行簡單的數(shù)值設(shè)計(jì)和AI設(shè)計(jì)。第三十一頁,共六十頁,2022年,8月28日4.4.2任務(wù)六:出現(xiàn)敵機(jī)(隊(duì)列)第三十二頁,共六十頁,2022年,8月28日要點(diǎn)提示:敵機(jī)隊(duì)形的設(shè)計(jì)在本任務(wù)中,設(shè)計(jì)了四種隊(duì)形,但實(shí)現(xiàn)方法都是類似的。要點(diǎn)是首先定位第一架敵機(jī),后面的敵機(jī)位置分別是前一架敵機(jī)在x位置或y位置上間隔一定的距離。比如,斜線排列的隊(duì)形。首先,定位第一架敵機(jī)的位置是(18,-10);然后,后面的敵機(jī)分別在前一架敵機(jī)的右上側(cè),x方向上距離36像素,y方向上距離35像素。代碼如下:
spNpc1[0].setPosition(18,-10);//設(shè)置隊(duì)列中第一架敵機(jī)出現(xiàn)的位置
for(inti=1;i<spNpc1.length;i++){ spNpc1[i].setPosition(spNpc1[i-1].getX()+36,spNpc1[i-1].getY()-35); }水平排列和垂直排列的方法與此類似。根據(jù)這個(gè)方法還可以設(shè)計(jì)出很多其他的隊(duì)形。第三十三頁,共六十頁,2022年,8月28日4.4.3延伸任務(wù):添加時(shí)間軸,安排游戲情節(jié)timing++;if(timing==20*1||timing==20*7){npcPlane.setNpc0Position(spNpc0,screenWidth);}elseif(timing==20*3||timing==20*9){ npcPlane.setNpcQueue1(spNpc1);}elseif(timing==20*4||timing==20*14){ npcPlane.setNpcQueue2(spNpc2,screenWidth,screenHeight);}elseif(timing==20*5||timing==20*15){ npcPlane.setNpcQueue3(spNpc3,screenWidth);}elseif(timing==20*6||timing==20*18){ npcPlane.setNpcQueue4(spNpc4);}時(shí)間出現(xiàn)NPC1秒和7秒出現(xiàn)一架敵機(jī)3秒和9秒出現(xiàn)敵機(jī)隊(duì)列14秒和14秒出現(xiàn)敵機(jī)隊(duì)列25秒和15秒出現(xiàn)敵機(jī)隊(duì)列36秒和20秒出現(xiàn)敵機(jī)隊(duì)列4第三十四頁,共六十頁,2022年,8月28日要點(diǎn)提示:時(shí)間軸在射擊類游戲中,敵機(jī)的出現(xiàn)都應(yīng)該是事先安排好的,在什么時(shí)刻出現(xiàn)什么敵機(jī),什么時(shí)刻出現(xiàn)什么狀態(tài)。例如,在本任務(wù)中,游戲開始1秒鐘后,出現(xiàn)第一架敵機(jī),過3秒鐘后,出現(xiàn)敵機(jī)隊(duì)列1,過4秒鐘后,出現(xiàn)敵機(jī)隊(duì)列2,……。這類似于游戲的腳本,從游戲的開始到結(jié)束,都貫穿著時(shí)間軸的概念。在時(shí)間軸的設(shè)計(jì)中,使用了記錄時(shí)間的一個(gè)長整型變量timing,在每個(gè)線程周期中,該變量值就會(huì)增加1。因?yàn)槊總€(gè)線程周期為50毫秒,當(dāng)timing的值為20×1時(shí),就意味著過了50×20×1毫秒,即1秒鐘。依次類推,當(dāng)tming的值為20×2時(shí),就意味著游戲開始后2秒鐘,……。時(shí)間軸的實(shí)現(xiàn)方法,可以使用如任務(wù)中的if…elseif結(jié)構(gòu),當(dāng)然,也可以使用swtich結(jié)構(gòu)。不管是什么游戲,都會(huì)有條“主線”,例如:對(duì)于射擊游戲,主線就是時(shí)間。對(duì)于RPG(角色扮演類)游戲,主線可能就是游戲的故事情節(jié)。而對(duì)于益智類游戲來說,主線則顯得不是很明朗,例如五子棋游戲,那么他的主線就是根據(jù)玩家下的每一步棋子,來判斷下一步應(yīng)該怎么操作。第三十五頁,共六十頁,2022年,8月28日4.4.4任務(wù)七:實(shí)現(xiàn)主角子彈和敵機(jī)的碰撞檢測(cè)第三十六頁,共六十頁,2022年,8月28日要點(diǎn)提示:關(guān)于爆炸效果程序中,每一架敵機(jī)都對(duì)應(yīng)地定義了一個(gè)爆炸精靈,這是因?yàn)楸◣牟シ判枰粋€(gè)過程,因此兩架甚至多架敵機(jī)的爆炸效果可能會(huì)同時(shí)出現(xiàn)在屏幕上,所以爆炸精靈一般不共用。爆炸效果的繪制是一個(gè)逐幀繪制的過程,當(dāng)最后一幀繪制完畢的時(shí)候,就應(yīng)該停止。否則,爆炸效果會(huì)反復(fù)出現(xiàn)。精靈類提供的getFrame()方法,可以獲取當(dāng)前正在播放的幀索引號(hào)。當(dāng)幀索引號(hào)再次變?yōu)?的時(shí)候,表示幀序列已經(jīng)播放完畢,此時(shí),應(yīng)該再次設(shè)置當(dāng)前的爆炸精靈為不可見。代碼如下:if(spExplosion.getFrame()==0){//如果幀序列播放完畢(重新開始下一循環(huán)序列了)
spExplosion.setVisible(false);}第三十七頁,共六十頁,2022年,8月28日知識(shí)提煉①publicfinalbooleancollidesWith(Sprites,booleanpixelLevel)②publicfinalbooleancollidesWith(Imageimage,intx,inty,booleanpixelLevel)③publicfinalbooleancollidesWith(TiledLayert,booleanpixelLevel)每種碰撞的檢測(cè)都存在兩種級(jí)別的檢測(cè)模式:區(qū)域級(jí)模式和像素級(jí)模式。第三十八頁,共六十頁,2022年,8月28日4.4.5任務(wù)八:出現(xiàn)BOSS第三十九頁,共六十頁,2022年,8月28日要點(diǎn)提示(1)數(shù)值設(shè)計(jì)在本任務(wù)中,設(shè)計(jì)Boss的初始生命值為100,被子彈擊中一次,生命值就減2,直至為0,Boss爆炸。在玩家得分的設(shè)計(jì)上,擊中一架敵機(jī),得分加10。當(dāng)Boss被擊爆時(shí),得分加100。(2)Boss的AI設(shè)計(jì)在Boss完全移入屏幕之前,子彈擊中Boss,其生命值是不減的。當(dāng)Boss作水平移動(dòng)時(shí),碰到左右邊界,會(huì)自動(dòng)折返。當(dāng)被子彈擊中時(shí),顯示閃爍效果,并且移動(dòng)速度變慢。第四十頁,共六十頁,2022年,8月28日4.5游戲背景設(shè)計(jì)游戲背景設(shè)計(jì)是游戲的一個(gè)亮點(diǎn)所在,當(dāng)拿到一款游戲的時(shí)候,這款游戲是否吸引人,由兩個(gè)方面所決定,游戲的控制和游戲的背景設(shè)計(jì)。在MIDP1.0中沒有提供專門負(fù)責(zé)背景設(shè)計(jì)的類,而在MIDP2.0中提供了一個(gè)TiledLayer類,該類專門負(fù)責(zé)對(duì)游戲背景進(jìn)行管理和操作。由于移動(dòng)設(shè)備的存儲(chǔ)資源有限,因此不可能裝載過大的圖片來作為游戲的背景。本學(xué)習(xí)單元中,首先,通過一個(gè)圖塊(瓷片)“鋪設(shè)”單一的游戲背景;然后,使用由一塊一塊圖塊(瓷片)合成的圖片,來“鋪設(shè)”豐富的游戲背景;最后,學(xué)習(xí)使用地圖編輯器,進(jìn)行大型地圖的設(shè)計(jì),并顯示在手機(jī)屏幕上。第四十一頁,共六十頁,2022年,8月28日4.5.2任務(wù)九:使用一個(gè)圖塊,“鋪設(shè)”單一的游戲背景第四十二頁,共六十頁,2022年,8月28日知識(shí)提煉TiledLayer類被定義在包中。該類代表一個(gè)背景圖層,將背景所占區(qū)域分成大小相等的一系列單元格,每個(gè)單元格可被一個(gè)圖塊填充,最終構(gòu)成一個(gè)組合成的大圖塊背景。(1)背景的初步規(guī)劃根據(jù)手機(jī)屏幕的大小,以及圖塊的寬、高,設(shè)計(jì)使用該圖塊鋪滿整個(gè)屏幕,橫著需要多少個(gè)圖塊,豎著需要多少個(gè)圖塊。使用TiledLayer類的構(gòu)造方法可以進(jìn)行游戲背景的初步規(guī)劃。TiledLayer類的構(gòu)造方法語法如下:publicTiledLayer(intcolumns,introws,Imageimage,inttileWidth,inttileHeight)(2)背景的鋪設(shè)為了形成背景,必須將圖塊填充到單元格中,通過調(diào)用setCell()方法可以為單元格設(shè)置引用的圖塊。語法如下:publicvoidsetCell(intcol,introw,inttileIndex)(3)背景的繪制背景形成后,需要通過paint(Graphicsg)方法繪制出TiledLayer實(shí)例。第四十三頁,共六十頁,2022年,8月28日要點(diǎn)提示在本任務(wù)中,water.png文件中只有一個(gè)圖塊,該圖塊的大小為30×30,整個(gè)屏幕都使用同一個(gè)圖塊進(jìn)行填充,類似這種使用同一個(gè)圖塊填充一片連續(xù)區(qū)域的情況,也可以使用fillCells()方法來完成。語法如下:publicvoidfillCells(intcol,introw,intnumCols,intnumRows,inttileIndex)因此,程序中如下的相關(guān)代碼:
for(inti=0;i<backCols;i++){for(intj=0;j<backRows;j++){tlgBackground.setCell(i,j,1);}}可以使用如下這條語句進(jìn)行替代:tlgBackground.fillCells(0,0,backCols,backRows,1);第四十四頁,共六十頁,2022年,8月28日任務(wù)十:使用合成圖塊,“鋪設(shè)”豐富的游戲背景第四十五頁,共六十頁,2022年,8月28日要點(diǎn)提示本任務(wù)中,使用了由一個(gè)一個(gè)圖塊合成的圖片文件進(jìn)行地圖的鋪設(shè),這些圖塊必須擁有相同的寬度和高度。每個(gè)圖塊按從左到右,從上到下的順序分配一個(gè)索引號(hào),索引號(hào)從1開始。小提示:如果使用索引為0去填充單元格,則表示該區(qū)域不填充、繪制任何東西。第四十六頁,共六十頁,2022年,8月28日4.5.4任務(wù)十一:使用地圖編輯器,設(shè)計(jì)大型地圖
對(duì)于飛行射擊類、角色扮演類等手機(jī)游戲,在設(shè)計(jì)游戲背景的時(shí)候,通常比手機(jī)屏幕要大很多,并且在游戲過程中,背景會(huì)自動(dòng)地滾動(dòng),或者隨著游戲主角的移動(dòng)而移動(dòng),以增加游戲的動(dòng)感。這樣大的一個(gè)游戲背景,全憑想象來設(shè)計(jì)二維的地圖數(shù)據(jù),顯然是不可行的。因此,在本任務(wù)中,通過借助于第三方開發(fā)的地圖編輯器,來設(shè)計(jì)大型地圖,將大大簡化工作量和工作難度。比較常用的手機(jī)游戲地圖編輯器有Mappy(mapwin)、Tiled、TILESTUDIO等等,這些地圖編輯工具可以到相關(guān)網(wǎng)站免費(fèi)下載。第四十七頁,共六十頁,2022年,8月28日(2)在手機(jī)屏幕上顯示地圖首先,將導(dǎo)出并修改的“map1.png”文件拷貝到“Ch4_Unit4”工程的“res”文件夾下。
在“Ch4_Unit4”工程中新建類,類名為“Map1”。打開“Map1”類,聲明一個(gè)二維數(shù)組,并把map1.txt文件中的二維數(shù)組“map1_map0”的值拷貝過來。將原先聲明的二維數(shù)組“mapData”刪除,并將代碼中所有引用該二維數(shù)組的地方,全部用“Map1.map1Data”替代(1)使用mapwin編輯地圖新建地圖導(dǎo)入圖塊鋪設(shè)地圖保存地圖文件導(dǎo)出地圖數(shù)據(jù)實(shí)現(xiàn)過程小提示:單擊菜單“MapTools”→“RemoveUnusedorDuplicate…”,可以在導(dǎo)出的圖塊文件中移除那些在編輯地圖過程中沒有用到的圖塊。第四十八頁,共六十頁,2022年,8月28日4.5.5延伸任務(wù):鋪設(shè)多層地圖第四十九頁,共六十頁,2022年,8月28日4.6滾屏設(shè)計(jì)的任務(wù)十一和的延伸任務(wù)中,鋪設(shè)的地圖都比手機(jī)屏幕大許多。默認(rèn)情況下,手機(jī)屏幕上顯示的僅僅是地圖的左上角部分,其余部分由于位于屏幕之外,而無法顯示。如果能讓屏幕“滾動(dòng)”起來,不僅能逐漸展示完整的地圖,豐富玩家的視覺效果,而且還可以根據(jù)游戲情節(jié)需要,切換游戲場(chǎng)景,增加游戲的動(dòng)感。在本學(xué)習(xí)單元中,首先,實(shí)現(xiàn)游戲屏幕的自動(dòng)滾動(dòng),了解實(shí)現(xiàn)滾屏的基本原理;然后,與任務(wù)八中完成的成果相結(jié)合,實(shí)現(xiàn)一個(gè)簡單的滾屏飛行射擊游戲;最后,實(shí)現(xiàn)RPG游戲中的滾屏效果,即屏幕隨著游戲主角的移動(dòng)而移動(dòng)。第五十頁,共六十頁,2022年,8月28日4.6.2知識(shí)準(zhǔn)備:了解層管理器事實(shí)上,Sprite類和TiledLayer類的父類均是定義在包中的Layer類。Layer類是一個(gè)抽象類,表示游戲中的一個(gè)可視元素——圖層。圖層是可以在游戲畫布中單獨(dú)繪制并能夠移動(dòng)的對(duì)象。每個(gè)Layer類實(shí)例都有一定的位置、寬度、高度和是否可見的狀態(tài)。Layer類的子類必須實(shí)現(xiàn)一個(gè)piant(Graphics)方法,使得它們能夠被繪制在屏幕上。游戲中不止一個(gè)圖層存在,每個(gè)加入LayerManager中的圖層都會(huì)被分配一個(gè)索引值,索引值從0開始順序分配。就想排隊(duì)一樣,先加入的排在前面,后加入的排在后面。但需要注意的是,圖層的繪制過程卻是相反的,排后面的(即索引值大的)先繪制,排前面的(即索引值小的)后繪制。顯然,后繪制的圖層將覆蓋先繪制的圖層。另外,LayerManager中的圖層索引號(hào)永遠(yuǎn)是連續(xù)的,如果一個(gè)圖層從LayerManager中被移除,那么后面圖層的索引號(hào)都將相應(yīng)地作調(diào)整,以便使得圖層索引號(hào)保持連續(xù)性。第五十一頁,共六十頁,2022年,8月28日4.6.3任務(wù)十二:實(shí)現(xiàn)游戲屏幕的自動(dòng)滾動(dòng)實(shí)現(xiàn)滾屏的原理:只需要在線程周期中不斷改變可視窗口的x坐標(biāo)(實(shí)現(xiàn)橫向滾動(dòng)),或者改變y坐標(biāo)(實(shí)現(xiàn)縱向滾動(dòng))。然后,將改變坐標(biāo)位置后的可視窗口重新繪制在手機(jī)屏幕上即可。X軸(0,0)Y軸(0,viewY)手機(jī)屏幕可視窗口(0,0)screenHeightscreenWidthsetViewWindow(0,viewY,screenWidth,screenHeight)paint(g,0,0)第五十二頁,共六十頁,2022年,8月28日知識(shí)提煉::LayerManager類其他常用方法(1)LayerManager類構(gòu)造方法(2)append方法(3)remove方法(4)getLayerAt方法(5)getSize方法小提示:綜合使用上述三個(gè)方法,可以實(shí)現(xiàn)將加入圖層管理器對(duì)象中的圖層全部清空的功能。清空?qǐng)D層管理器對(duì)象在RPG游戲的場(chǎng)景轉(zhuǎn)換中非常有用。參考代碼如下:publicvoidclearLayerManager(){if(lm!=null){while(lm.getSize()!=0){ lm.remove(lm.getLayerAt(0));}}System.gc();//垃圾回收}第五十三頁,共六十頁,2022年,8月28日4.6.4延伸任務(wù):實(shí)現(xiàn)滾動(dòng)背景下的飛行射擊效果第五十四頁,共六十頁,2022年,8月28日4.6.5任務(wù)十三:根據(jù)主角人物的位置,重置地圖視角第五十五頁,共六十頁,2022年,8月28日要點(diǎn)提示(1)重置地圖視角所謂“重置地圖視角”就是根據(jù)主角的位置,重新設(shè)置可視窗口的位置。設(shè)置可視窗口的代碼如下:lm.setViewWindow(viewX,viewY,screenWidth,screenHeight);其中,參數(shù)viewX和viewY是可視窗口在地圖層中的左上角坐標(biāo),這個(gè)坐標(biāo)是根據(jù)主角行走時(shí),在地圖層中的位置來確定的,并保證主角在屏幕的正中間。就像舞臺(tái)上的追光燈一樣,追著舞臺(tái)上的主角,使得主角始終位于燈光的中間。viewX=spPlayer.getX()+spPlayer.getWidth()/2-screenWidth/2;viewY=spPlayer.getY()+spPlayer.getHeight()/2-screenHeight/2;
當(dāng)然,如果主角的位置距離屏幕的上、下、左、右邊緣小于屏幕高度和寬度的一半時(shí),當(dāng)主角繼續(xù)按原方向行走時(shí),屏幕就不再移動(dòng)了。這時(shí),viewX和viewY的值就始終是可視窗口在地圖層中的邊界值。
viewX=0;//左邊界值
viewX=backCols*16-screenWidth;//右邊界值
viewY=0;//上邊界值
viewY=backRows*16-screenHeight;//下邊界值(2)精靈與地圖層的碰撞在本任務(wù)中,使用的地圖有兩層,0層是行走層,1層是碰撞層。主角在走動(dòng)過程中,需要檢測(cè)是否和碰撞層發(fā)生了碰撞,如果碰撞,則回退并站立。精靈和地圖層的碰撞檢測(cè)方法語法如下:publicfinalbooleancollidesWith(TiledLayert,booleanpixelLevel)在碰撞檢測(cè)過程中,為了使效果更逼真一些,可以自定義精靈對(duì)象的碰撞區(qū)域。默認(rèn)情況下,精靈對(duì)象的碰撞檢測(cè)區(qū)定位在左上角(0,0),并與精靈對(duì)象的大小相同。自定義碰撞檢測(cè)區(qū)域方法的語法如下:publicvoiddefineCollisionRectangle(intx,inty,intwidth,intheight)比如,本任務(wù)中,在進(jìn)行主角和地圖碰撞層的碰撞檢測(cè)之前,首先自定義了主角精靈的碰撞檢測(cè)區(qū)域,代碼如下:spPlayer.defineCollisionRectangle(0,spPlayer.getHeight()/2,spPlayer .getWidth(),spPlayer.getHeight()/2);這樣,就將主角精靈的碰撞檢測(cè)區(qū)域定位在了下半身,當(dāng)主角精靈的上半身和碰撞層中的房屋、數(shù)木、石頭等發(fā)生重疊的時(shí)候,不會(huì)產(chǎn)生回退和站立的效果,使得主角在地圖中行走的效果更加逼真。第五十六頁,共六十頁,2022年,8月28日本章小結(jié)通過完成本章任務(wù),學(xué)習(xí)到了如何編寫一個(gè)簡單的游戲程序。知道了游戲的基本組成,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲化教學(xué)與小學(xué)語文教材的有機(jī)結(jié)合
- 教育心理學(xué)在家庭教育中的實(shí)踐案例
- 提升學(xué)術(shù)研究質(zhì)量技巧與策略
- 2025年龍巖道路貨運(yùn)從業(yè)資格證模擬考試
- 小學(xué)數(shù)學(xué)校園文化的建設(shè)與推廣
- 二零二五年度經(jīng)理合同分享與員工培訓(xùn)與發(fā)展合同
- 二零二五年度物業(yè)管理交接及社區(qū)安全保障合同
- 二零二五年度商業(yè)門面轉(zhuǎn)讓合同書(含品牌管理權(quán))
- 2025年度自愿不上學(xué)協(xié)議書-家庭教育輔導(dǎo)與子女綜合素質(zhì)培養(yǎng)合同
- 二零二五年度教育機(jī)構(gòu)職工勞動(dòng)合同解除及教育資源分配協(xié)議
- 【人教版化學(xué)】必修1 知識(shí)點(diǎn)默寫小紙條(答案背誦版)
- 江蘇省無錫市2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 全國第三屆職業(yè)技能大賽(無人機(jī)駕駛(植保)項(xiàng)目)選拔賽理論考試題庫(含答案)
- 《奧特萊斯業(yè)態(tài)淺析》課件
- 2022年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 養(yǎng)殖場(chǎng)獸醫(yī)服務(wù)合同
- HR六大板塊+三支柱體系
- 慢性病患者門診身份管理方案
- 變壓器更換施工方案
- 安徽新宸新材料有限公司年產(chǎn)6000噸鋰離子電池材料雙氟磺酰亞胺鋰項(xiàng)目環(huán)境影響報(bào)告書
評(píng)論
0/150
提交評(píng)論