官术网_书友最值得收藏!

二、動(dòng)手練:閱兵方陣列隊(duì)行進(jìn)

(一)實(shí)驗(yàn)?zāi)康?/h4>

讓小貓排成一個(gè)閱兵方陣,并且列隊(duì)行進(jìn)。

(二)基本思路

我們首先創(chuàng)建一個(gè)小貓角色,名字叫Sprite1,然后讓這個(gè)小貓生成多個(gè)克隆體。比如方陣有3行2列,我們就生成6個(gè)克隆體,加上原始角色Sprite1,我們會(huì)看到一共有7只小貓。

在用克隆技術(shù)時(shí),我們要注意下面幾點(diǎn):

1)創(chuàng)建克隆體時(shí)使用的是“克隆自己”積木塊(在“控制”類里)。

2)當(dāng)克隆體剛剛生成時(shí),跟原角色是一模一樣的,當(dāng)然了,后面克隆體可以改變自己的狀態(tài)。這里,我們讓角色每走到一個(gè)位置就克隆一次,這樣克隆的初始位置就有了。

3)克隆體執(zhí)行哪段腳本呢?我們把克隆體要執(zhí)行的腳本前面加上“當(dāng)作為克隆體啟動(dòng)時(shí)”積木(在“控制”類中),就是圖5-2中顯示的這個(gè)。

066-1

圖5-2 “當(dāng)作為克隆體啟動(dòng)時(shí)”積木

提醒一下:原始角色Sprite1的腳本前面是“當(dāng)066-2被點(diǎn)擊”(在“事件”類),可不要弄混了啊!

(三)編程步驟

(1)角色設(shè)計(jì)

只有一個(gè)角色小貓,名字叫Sprite1。

(2)變量設(shè)計(jì)

跟上一講一樣,我們?cè)O(shè)置兩個(gè)變量“幾行”和“幾列”,表示閱兵方陣的行數(shù)和列數(shù);此外,我們還要新增加兩個(gè)變量“我的x坐標(biāo)”“我的y坐標(biāo)”。不過(guò)建立這兩個(gè)變量時(shí)一定要選擇“僅適用于當(dāng)前角色”,否則所有克隆體的“我的x坐標(biāo)”變量都是同樣的值,“我的y坐標(biāo)”變量也都是同樣的值。

(3)過(guò)程描述與代碼展示

我們讓小貓從第一行的第一列開(kāi)始,逐個(gè)去站位,每隔50步站一只;站滿了一隊(duì)就換下一隊(duì),再?gòu)念^開(kāi)始。不過(guò)站位時(shí)是“克隆”一個(gè)自己(見(jiàn)圖5-3中左側(cè)部分)。

067-1

圖5-3 用克隆技術(shù)實(shí)現(xiàn)的閱兵方陣腳本(左)及實(shí)驗(yàn)結(jié)果(右)

(四)實(shí)驗(yàn)結(jié)果

現(xiàn)在點(diǎn)擊綠旗,輸入行數(shù)和列數(shù),你就會(huì)看到小貓排好方陣,然后每秒走一次了(見(jiàn)圖5-2中右側(cè)部分)。

注意,這六個(gè)克隆體的腳本相同,但是起始位置是各不相同的;每個(gè)克隆體的起始位置是創(chuàng)建克隆體時(shí)角色的位置。

(五)遇到的bug及改正過(guò)程

bug:今天我遇到一件奇怪的事情,一開(kāi)始程序運(yùn)行得好好的,突然再運(yùn)行時(shí)小貓都不出現(xiàn)了。程序沒(méi)做任何改動(dòng)啊,真奇怪!

改正:我查了半天,才發(fā)現(xiàn)一個(gè)低級(jí)錯(cuò)誤——我不小心按到了角色區(qū)的顯示開(kāi)關(guān)上,關(guān)閉了小貓的顯示。怪不得呢!重新打開(kāi)顯示開(kāi)關(guān)就好了。

(六)思考與延伸

我覺(jué)得克隆最大的好處就是避免了對(duì)每個(gè)角色重復(fù)編寫相同的腳本。

克隆很有用,但是也不能無(wú)限制地生成克隆體。當(dāng)克隆體達(dá)到一定數(shù)量的時(shí)候,Scratch就會(huì)停止克隆。

我們可以自己測(cè)試一下,比如新建一個(gè)變量,將變量的初始值設(shè)置為0,每克隆一個(gè)就增加1,最后就可以看到最終的克隆體個(gè)數(shù)了。我試了一下,克隆到300個(gè)左右就無(wú)法繼續(xù)下去了。這是因?yàn)榭寺◇w越多,需要的內(nèi)存也越多,短時(shí)間內(nèi)大量增加克隆體會(huì)導(dǎo)致計(jì)算機(jī)內(nèi)存消耗極大,容易卡死。

那么,在使用克隆功能的過(guò)程中要如何解決這個(gè)問(wèn)題呢?Scratch提供了一個(gè)“刪除此克隆體”的積木(在“控制”類中),在用完克隆體后要及時(shí)刪除。

主站蜘蛛池模板: 寻乌县| 武威市| 桐柏县| 克东县| 安岳县| 怀来县| 彰化市| 博客| 镇远县| 岳阳市| 方城县| 嫩江县| 娱乐| 新沂市| 永仁县| 麻江县| 仙桃市| 灵山县| 吴桥县| 克山县| 突泉县| 麻阳| 尉犁县| 江口县| 进贤县| 花莲县| 益阳市| 大港区| 佛坪县| 彭州市| 桓台县| 遵义市| 页游| 康定县| 元氏县| 日照市| 湘潭县| 泉州市| 莱阳市| 潞西市| 垫江县|