摘"要:本文在可視化編程軟件scratch基礎(chǔ)上,探討通過(guò)3d軟件創(chuàng)建模型,轉(zhuǎn)換可視化編程為具體的程序代碼,以3d游戲引擎完成項(xiàng)目融合,在游戲中提升小學(xué)生編程能力的可行性策略。
關(guān)鍵詞:家庭教育;可視化編程;3d建模
中圖分類號(hào):G4"文獻(xiàn)標(biāo)識(shí)碼:A""doi:10.19311/j.cnki.16723198.2024.13.078
1"項(xiàng)目教學(xué)
隨著信息技術(shù)的普及和深入,學(xué)生在可視化編程方面的能力獲得了較大的提升。但是,scratch等可視化編程軟件不能成為編程行業(yè)主流,也不能進(jìn)一步提升學(xué)生的編程能力。為此,在家庭教育中,針對(duì)有興趣和特長(zhǎng)的學(xué)生,可以設(shè)計(jì)以godot游戲編程平臺(tái)為主導(dǎo)的編程,在保留趣味性的同時(shí),提高學(xué)生編碼水平,為以后的學(xué)習(xí)和工作打下堅(jiān)實(shí)的基礎(chǔ)。
2"算法分析
現(xiàn)假設(shè)雞兔放在超市購(gòu)物車(chē)?yán)?,上面?shù)有20個(gè)頭,下面數(shù)有58只腳,問(wèn)共有多少只雞和兔子。
在scratch中用可視化編程來(lái)描述算法,在算法中通常用偽代碼來(lái)描述解題過(guò)程,這樣方便轉(zhuǎn)化為具體的編程語(yǔ)言。
在編程語(yǔ)言里,解題通常用判斷和循環(huán)來(lái)解決,這道題目,可以通過(guò)循環(huán)計(jì)算求得結(jié)果,偽代碼如下:
假設(shè)有1只雞,則兔子有(20-1)只;從1循環(huán)至20;如果雞*2+(20-雞)*4=58,則計(jì)算出最終結(jié)果;否則繼續(xù)循環(huán)。
從上面?zhèn)未a可以看出,整個(gè)解題思路和可視化編程類似,可以作為編寫(xiě)程序的過(guò)渡。
具體編碼如圖1:首先設(shè)置初始值var"chicken=1,設(shè)計(jì)循環(huán)while"chickenlt;=20,實(shí)現(xiàn)判斷語(yǔ)句if"(chicken*2+(20-chicken)*4)==58,如果條件成立print(chicken),否則條件不成立chicken+=1。
3"模型創(chuàng)建
模型可以用簡(jiǎn)單的3d形狀,如果學(xué)生動(dòng)手能力比較強(qiáng),同時(shí)為了增強(qiáng)趣味性,我們也可以自己創(chuàng)建模型。首先創(chuàng)建超市購(gòu)物車(chē)3d模型,這里介紹3d模型在開(kāi)源軟件blender中的搭建過(guò)程。
3.1"購(gòu)物車(chē)外邊框的創(chuàng)建
在物體模式下,布局選項(xiàng)卡中,選擇添加網(wǎng)格平面,90度旋轉(zhuǎn)該網(wǎng)格平面,使其平行于正視圖。切換至編輯模式,正視圖視角下,刪除四邊形的一個(gè)頂點(diǎn),移動(dòng)其他三個(gè)頂點(diǎn)分別至外邊框的左上、左下和右下三個(gè)位置,并通過(guò)擠出命令生成新頂點(diǎn),沿手推桿生成外輪廓。選中所有頂點(diǎn),切換至右視圖視角,按E鍵擠出該輪廓移動(dòng)至購(gòu)物車(chē)另一側(cè)外邊框位置,生成對(duì)稱的外輪廓。刪除不需要的手推桿位置的邊,只保留需要的點(diǎn)和邊。將以上四邊形轉(zhuǎn)換為曲線,并且設(shè)置倒角為0.03m,此時(shí)顯示出購(gòu)物車(chē)的外輪廓,通過(guò)倒角命令還可以將棱角加以光滑。這種方式生成的模型布線不夠規(guī)則,所以也可以直接用多邊形創(chuàng)建模型。
切換至物體模式,布局選項(xiàng)卡中,選擇添加網(wǎng)格圓環(huán),在彈出的菜單中,設(shè)置頂點(diǎn)數(shù)為12,半徑為0.01米。選擇網(wǎng)格圓環(huán),正視圖視角下,切換至編輯模式,沿著x軸旋轉(zhuǎn)90度,拖動(dòng)至購(gòu)物車(chē)外輪廓右下角。選擇網(wǎng)格圓環(huán)所有頂點(diǎn),左鍵點(diǎn)擊擠出選區(qū),沿著y軸移動(dòng)選區(qū)至購(gòu)物車(chē)外輪廓左下角。接著需要向上生成外輪廓,將剛才的選區(qū)沿著x軸旋轉(zhuǎn)45度,左鍵點(diǎn)擊擠出選區(qū),沿著z軸移動(dòng)至外輪廓左上角。此時(shí)的折角是直的,我們選擇輪廓左下角的一圈頂點(diǎn),左鍵點(diǎn)擊倒角命令,在彈出的菜單中,設(shè)置寬度為0.01米,段數(shù)為4,這時(shí)的直角就變得圓滑了?;氐捷喞笊辖?,并選擇一圈頂點(diǎn),沿著x軸旋轉(zhuǎn)-45度,左鍵點(diǎn)擊擠出選區(qū),沿著y軸移動(dòng)選區(qū)至購(gòu)物車(chē)把手。繼續(xù)選擇該選區(qū)一圈頂點(diǎn),沿著z軸旋轉(zhuǎn)45度,接著旋轉(zhuǎn)外輪廓右下角一圈頂點(diǎn),同樣沿著z軸旋轉(zhuǎn)45度?;氐轿矬w模式,選擇整個(gè)右輪廓,復(fù)制該輪廓沿著x軸移動(dòng)到左輪廓位置,沿著x軸鏡像該輪廓,這樣我們就創(chuàng)建了外輪廓的左、右兩個(gè)部分。將購(gòu)物車(chē)左、右輪廓合并,選擇左、右輪廓的把手部分,依次選擇對(duì)應(yīng)的兩組頂點(diǎn),右鍵點(diǎn)擊從頂點(diǎn)創(chuàng)建面命令,完成購(gòu)物車(chē)把手部分的橫桿。同理,選擇購(gòu)物車(chē)底框前端的左、右兩部分,依次選擇對(duì)應(yīng)的兩組頂點(diǎn),右鍵點(diǎn)擊從頂點(diǎn)創(chuàng)建面命令,完成購(gòu)物車(chē)底框橫桿的創(chuàng)建。
3.2"購(gòu)物車(chē)內(nèi)邊框的創(chuàng)建
切換至物體模式,布局選項(xiàng)卡中,選擇添加柱體網(wǎng)格。沿x軸旋轉(zhuǎn)90度,分別縮放x軸、y軸和z軸至內(nèi)邊框上邊緣大小。選擇該柱體網(wǎng)格,添加陣列修改器,適配類型選擇固定數(shù)量,并設(shè)置數(shù)量為4,相對(duì)偏移系數(shù)x為0,y為-6,z為0,選擇應(yīng)用該修改器,這樣我們就創(chuàng)建了購(gòu)物車(chē)內(nèi)邊框的橫梁。用同樣的方式繼續(xù)添加柱體網(wǎng)格,分別縮放x軸、y軸和z軸至內(nèi)邊框右邊緣大小。選擇該柱體網(wǎng)格即內(nèi)邊框右豎梁,繼續(xù)添加陣列修改器,適配類型仍然選擇固定數(shù)量,并設(shè)置數(shù)量為5,相對(duì)偏移系數(shù)x為0,y為6.2,z為0,然后選擇應(yīng)用該修改器,這樣我們就創(chuàng)建了購(gòu)物車(chē)內(nèi)邊框的豎梁。復(fù)制內(nèi)邊框豎梁,切換至右視圖,沿著x軸移動(dòng)復(fù)制的網(wǎng)格至購(gòu)物車(chē)左內(nèi)邊框位置,這樣購(gòu)物車(chē)的左、右內(nèi)邊框就創(chuàng)建完成了。合并購(gòu)物車(chē)左、右內(nèi)邊框,切換回主視圖調(diào)整邊框位置。選擇外輪廓,在把手處我們添加2處環(huán)切,選擇中間一圈平面點(diǎn)擊擠出命令,然后按法線方向進(jìn)行縮放,這樣我們可以生成比外邊框厚一些的扶手,再次回到主視圖查看生成的效果。
3.3"購(gòu)物車(chē)車(chē)輪的創(chuàng)建
添加圓形多邊形,在正視圖下填充平面,在側(cè)視圖下擠壓生成厚度。分別選擇車(chē)輪的內(nèi)外一圈頂點(diǎn),點(diǎn)擊倒角命令,在彈出的菜單中設(shè)置影響范圍為邊,寬度類型為偏移量,寬度為0.05米,段數(shù)為4。分別選擇內(nèi)外最內(nèi)一圈頂點(diǎn),點(diǎn)擊縮放命令,在彈出的菜單中設(shè)置x軸、y軸和z軸的縮放量為0.25。選擇外側(cè)從車(chē)輪中心數(shù)第2圈頂點(diǎn),點(diǎn)擊縮放命令,在彈出的菜單中設(shè)置x軸、y軸和z軸的縮放量為0.5,同時(shí)沿著x軸方向移動(dòng)0.001米。接著選擇外側(cè)從車(chē)輪中心數(shù)第3圈頂點(diǎn),點(diǎn)擊縮放命令,在彈出的菜單中設(shè)置x軸、y軸和z軸的縮放量為0.75,同第2圈頂點(diǎn)一樣也沿著x軸方向移動(dòng)0.001米。這樣車(chē)輪的基本形狀就創(chuàng)建好了。創(chuàng)建四邊形網(wǎng)格,生成幾何節(jié)點(diǎn),添加實(shí)例化于點(diǎn)上節(jié)點(diǎn),組輸入中的幾何數(shù)據(jù)連接實(shí)例化于點(diǎn)上的輸入頂點(diǎn),實(shí)例化于點(diǎn)上的輸出項(xiàng)實(shí)例,連接到組輸出中的幾何數(shù)據(jù)。添加物體信息幾何節(jié)點(diǎn),物體選擇車(chē)輪,物體信息中的輸出項(xiàng)幾何數(shù)據(jù)連接到實(shí)例化于點(diǎn)上的輸入項(xiàng)實(shí)例。調(diào)整四邊形位置,完成購(gòu)物車(chē)輪子的創(chuàng)建。切換到著色編輯器,在原理化PSDF節(jié)點(diǎn)中,給購(gòu)物車(chē)各個(gè)部件設(shè)置基礎(chǔ)顏色。
4"題目拓展
為了增強(qiáng)趣味性,我們把購(gòu)物車(chē)加載到Godot中,制作成簡(jiǎn)單的游戲。
首先,為了增強(qiáng)程序的可讀性,我們把根目錄中的默認(rèn)的Node3D重命名為根節(jié)點(diǎn)。接下來(lái)右鍵單擊該節(jié)點(diǎn),并選擇添加子節(jié)點(diǎn),也可以選用快捷鍵Ctrl+A。在彈出的對(duì)話框中搜索角色身體3D節(jié)點(diǎn),這是一個(gè)Godot內(nèi)部的節(jié)點(diǎn),我們?cè)诰幋a過(guò)程中可以通過(guò)它的屬性和函數(shù)控制這個(gè)3D節(jié)點(diǎn)。我們將之前在blender中制作的購(gòu)物車(chē)導(dǎo)出為glb格式,glb是一種開(kāi)放的3d模型存儲(chǔ)格式,方便在不同的3d軟件里傳輸。將該文件放在Godot項(xiàng)目文件夾中,Godot會(huì)自動(dòng)加載該模型。我們左鍵拖動(dòng)該模型并放置在剛才建立的角色身體3D節(jié)點(diǎn)上,Godot主視圖界面里就會(huì)出現(xiàn)我們導(dǎo)入的購(gòu)物車(chē)模型。Godot和Blender的兼容性非常好,現(xiàn)在主流3d軟件通常選用PBR(Physically"Base"Rendering,基于物理渲染)渲染引擎,我們可以看到在Blender設(shè)置的顏色和材質(zhì)屬性,都完整的保留在Godot里。如果希望描述更多的細(xì)節(jié),也可以采用貼圖的方式。
其次,為了模擬現(xiàn)實(shí)世界里物體的運(yùn)動(dòng),需要給購(gòu)物車(chē)加上碰撞器。購(gòu)物車(chē)雖然結(jié)構(gòu)并不復(fù)雜,但是在進(jìn)行實(shí)時(shí)的游戲運(yùn)算過(guò)程中,頂點(diǎn)過(guò)多會(huì)耗費(fèi)大量的時(shí)間,所以Godot里對(duì)物體的形狀進(jìn)行了化簡(jiǎn)。我們右鍵單擊角色身體3D節(jié)點(diǎn),在彈出的對(duì)話框中搜索碰撞形狀3D節(jié)點(diǎn),點(diǎn)擊確定添加該3D節(jié)點(diǎn)。接下來(lái)我們需要選擇適合購(gòu)物車(chē)模型的形狀。常用的3D形狀有球體形狀3D、箱體形狀3D、膠囊形狀3D和圓柱體形狀3D。如果覺(jué)得這些設(shè)置不夠精細(xì)也可以選擇凸面多邊形形狀3D或者凹面多邊形形狀3D,同時(shí)在角色身體3D模型上加以適配。
最后,我們給項(xiàng)目加上迷宮地圖。地圖的創(chuàng)建可以在blender中,也可以直接在Godot中創(chuàng)建。在blender中創(chuàng)建的地圖導(dǎo)入到Godot中同樣需要添加碰撞器;在Godot中可以通過(guò)GridMap(網(wǎng)格地圖)直接創(chuàng)建迷宮地圖。在文件系統(tǒng)中新建文件夾并命名為地板磚,右鍵該文件夾新建場(chǎng)景并命名為brick,右鍵brick節(jié)點(diǎn)在彈出的對(duì)話框中搜索網(wǎng)格實(shí)例并創(chuàng)建。我們可以在Godot右邊的檢查器中設(shè)置brick的類型,這里我們選擇箱體網(wǎng)格,并設(shè)置喜歡的顏色和箱體的長(zhǎng)、寬、高。與購(gòu)物車(chē)模型的碰撞設(shè)置不同,我們左鍵單擊brick網(wǎng)格,并選擇創(chuàng)建三角網(wǎng)格靜態(tài)實(shí)體,就可以給地板磚添加碰撞形狀??梢栽O(shè)置不同顏色和形狀的brick網(wǎng)格,分別代表不同的區(qū)域和墻體。選擇場(chǎng)景導(dǎo)出為網(wǎng)格庫(kù),選擇樹(shù)節(jié)點(diǎn)類型保存brick模塊?;氐街鲌?chǎng)景在根節(jié)點(diǎn)下添加網(wǎng)格地圖,將我們保存的brick模塊添加到網(wǎng)格地圖的網(wǎng)格庫(kù)中,這時(shí)就可以在主視圖中繪制地圖了。此外,如果在blender中給購(gòu)物車(chē)創(chuàng)建了動(dòng)畫(huà),Godot中也可以引用這些動(dòng)畫(huà)。Godot游戲開(kāi)發(fā)平臺(tái)要比Scratch復(fù)雜,其中涉及到建模、動(dòng)畫(huà)、渲染和編程等知識(shí),但是其趣味性和擴(kuò)展性也更強(qiáng),家長(zhǎng)可以啟發(fā)孩子一步一步來(lái)解決實(shí)際問(wèn)題。
5"總結(jié)
隨著信息時(shí)代的發(fā)展,社會(huì)對(duì)各行各業(yè)的從業(yè)者信息化水平要求越來(lái)越高,單純的可視化編程已不能滿足社會(huì)對(duì)未來(lái)人才的需求。本文以Godot為例,介紹了在不失趣味性的同時(shí),讓學(xué)生進(jìn)一步學(xué)習(xí)編程的方法,可以作為有編程興趣或特長(zhǎng)學(xué)生的家長(zhǎng)作為參考。
參考文獻(xiàn)
[1]秦玉學(xué),孫在麗.新時(shí)代我國(guó)家庭教育中家長(zhǎng)角色的價(jià)值重塑[J].中國(guó)成人教育,2022.
[2]于冬青.家庭教育知識(shí)體系構(gòu)建的邏輯與實(shí)踐進(jìn)路[J].東北師大學(xué)報(bào)(哲學(xué)社會(huì)科學(xué)版),2023.
[3]劉曄.基于Scratch平臺(tái)的小學(xué)信息技術(shù)課堂教學(xué)模式探究[J].中國(guó)新通信,2020.
[4]李劍雄.Scratch編程走進(jìn)小學(xué)信息技術(shù)課堂[J].科學(xué)咨詢(科技·管理),2019.
[5]徐英.多元融通,打造健康家?!肮灿龍?chǎng)”[J].教育界,2022.
[6]滕倩,張偉.把握“雙減”契機(jī),構(gòu)建家校協(xié)同共育[J].中小學(xué)班主任,2022.