Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Курс лекции по дисциплине Современные программные средства - файл 05. ЯЗЫК ACTION SCRIPT.doc


Загрузка...
Курс лекции по дисциплине Современные программные средства
скачать (21152.1 kb.)

Доступные файлы (590):

Задание.doc21kb.05.02.2002 00:56скачать
Лекция_1.doc49kb.04.02.2004 09:27скачать
ЗАДАНИЕ.DOC37kb.13.02.2007 12:28скачать
Программирование с DAO и ADO.doc426kb.13.02.2007 17:20скачать
CRE_INFO.GID
CRE_INFO.HLP
Helpscr.doc213kb.11.09.1998 08:50скачать
README.TXT1kb.27.09.1998 08:05скачать
задание СПС лаб4.doc24kb.16.03.2005 12:15скачать
Задание.doc23kb.17.03.2006 16:06скачать
cube.swf
snegovic.swf
bubbles.fla
bubbles_Scene 1.swf
bubbles.swf
Animate-Shape Tween.fla
cube.fla
Dirt Gear.fla
Globe.fla
Sun Town.fla
Theater.fla
Writing Pen.fla
3d_animat.asp
3d_animat.swf
ani_but.asp
ani_but.swf
faq.asp
fla.asp
fonts.asp
f_viewer.swf
mail-list.asp
optimization.asp
player.swf
practic.swf
protect.asp
ruhelp.asp
rut.gif1kb.21.05.2000 22:16скачать
shortcuts.asp
sounds.asp
ssavers.asp
textfield.asp
trigger.asp
trigger.swf
2 Рисование.fla
5 Работа с текстом.fla
flash4_1_D.doc160kb.01.09.2001 06:27скачать
2 Слои.fla
flash4_2_layers.doc143kb.01.09.2001 06:27скачать
Имитация увеличительного стекла.doc32kb.05.04.2001 07:31скачать
3 Символы и Копии.fla
flash4_3_simbol.doc99kb.01.09.2001 06:29скачать
Skywriting.fla
Skywriting.swf
4 Кнопки.fla
5 Звуки.fla
flash4_5_sound.doc106kb.01.09.2001 06:30скачать
8 Анимация.fla
8 Анимация.swf
flash4_6_animation.doc98kb.01.09.2001 06:31скачать
Основы анимации.aviскачать
Macromedia Flash 5 (Лекция 1).doc217kb.19.11.2002 18:47скачать
test.swf
Вставка Flash.doc30kb.28.04.2004 15:17скачать
Вставка Flash-роликов в HTML.doc73kb.28.04.2004 11:10скачать
Использование SWiSH в HTML.doc80kb.28.04.2004 15:28скачать
Как вставить Flash в HTML.doc28kb.28.04.2004 15:40скачать
Код вставки SWF файла Flash MX.doc24kb.28.04.2004 15:54скачать
Am179.gif31kb.05.04.1998 14:42скачать
ANATOMY3.GIF12kb.20.02.1998 18:25скачать
ANATOMY5.GIF7kb.20.02.1998 18:23скачать
ANATOMY7.GIF10kb.20.02.1998 18:26скачать
anieyes.gif50kb.11.10.1998 03:43скачать
Aniheart.gif5kb.05.04.1998 14:46скачать
BAT.GIF13kb.20.02.1998 08:37скачать
BIRD2.GIF4kb.20.02.1998 08:23скачать
BULL1.GIF44kb.20.02.1998 08:25скачать
BULL.GIF15kb.20.02.1998 08:23скачать
BUTTE~56.GIF34kb.20.02.1998 08:18скачать
BUTTE~58.GIF51kb.22.02.1998 02:44скачать
CAT10.GIF25kb.20.02.1998 08:06скачать
CAT13.GIF20kb.20.02.1998 17:02скачать
CAT14.GIF9kb.20.02.1998 07:56скачать
CAT2.GIF28kb.20.02.1998 08:11скачать
CAT8.GIF12kb.20.02.1998 17:03скачать
CAT9.GIF3kb.20.02.1998 17:01скачать
DOG13.GIF5kb.22.02.1998 02:36скачать
DOG1.GIF12kb.20.02.1998 07:53скачать
DOLPHIN.GIF18kb.20.02.1998 16:53скачать
DOLPHINS.GIF18kb.20.02.1998 07:34скачать
DOVE.GIF102kb.20.02.1998 16:59скачать
EAGLES.GIF85kb.22.02.1998 02:45скачать
FISH.GIF31kb.20.02.1998 07:30скачать
FLAM~172.GIF10kb.20.02.1998 07:11скачать
FLYI~176.GIF17kb.20.02.1998 07:12скачать
FROG.GIF8kb.20.02.1998 07:09скачать
LEOPARD.GIF8kb.20.02.1998 06:56скачать
MONKEY2.GIF34kb.20.02.1998 06:59скачать
MOOSE.GIF19kb.20.02.1998 06:55скачать
MOUSE1.GIF27kb.20.02.1998 07:02скачать
MOUSE2.GIF11kb.20.02.1998 06:53скачать
MOUSE3.GIF39kb.20.02.1998 06:55скачать
MOUSE.GIF72kb.20.02.1998 16:53скачать
ORCA.GIF10kb.20.02.1998 06:52скачать
OWL.GIF34kb.20.02.1998 16:42скачать
POLA~232.GIF16kb.20.02.1998 06:52скачать
PTER~234.GIF14kb.20.02.1998 19:19скачать
PUMA.GIF10kb.20.02.1998 06:50скачать
REDWORMS.GIF4kb.20.02.1998 06:51скачать
SEAGULL.GIF5kb.20.02.1998 06:48скачать
SPIDER1.GIF7kb.20.02.1998 06:46скачать
SWAN.GIF31kb.20.02.1998 06:45скачать
TIGER1.GIF10kb.20.02.1998 06:42скачать
TIGER2.GIF39kb.20.02.1998 06:54скачать
TIGER3.GIF12kb.20.02.1998 06:40скачать
TIGER4.GIF6kb.20.02.1998 06:40скачать
TIGER5.GIF9kb.20.02.1998 06:40скачать
TIGER6.GIF22kb.20.02.1998 05:44скачать
TRACKS.GIF3kb.20.02.1998 05:35скачать
T-REX.GIF50kb.20.02.1998 16:42скачать
TURTLE2.GIF12kb.20.02.1998 05:31скачать
WORM.GIF4kb.20.02.1998 05:30скачать
ani-tri.gif2kb.03.11.1998 15:51скачать
A-ANI5.GIF38kb.20.02.1998 06:40скачать
ASTERO~8.GIF49kb.20.02.1998 16:40скачать
EARTH10.GIF24kb.20.02.1998 16:36скачать
EARTH12.GIF8kb.20.02.1998 16:33скачать
EARTH13.GIF36kb.20.02.1998 16:33скачать
EARTH14.GIF52kb.20.02.1998 16:34скачать
EARTH16.GIF15kb.20.02.1998 16:30скачать
EARTH18.GIF87kb.20.02.1998 16:35скачать
EARTH1.GIF10kb.20.02.1998 16:37скачать
EARTH2.GIF113kb.23.02.1998 14:01скачать
EARTH4.GIF21kb.20.02.1998 06:32скачать
EARTH6.GIF55kb.20.02.1998 16:47скачать
EARTH8.GIF18kb.20.02.1998 16:35скачать
EARTH9.GIF7kb.20.02.1998 06:23скачать
EARTHBUT.GIF8kb.20.02.1998 06:07скачать
EARTH.GIF28kb.20.02.1998 06:34скачать
GLDGLOBE.GIF87kb.20.02.1998 16:29скачать
GLOBE.GIF19kb.20.02.1998 06:07скачать
GP_GLO~6.GIF37kb.20.02.1998 06:07скачать
MOON1.GIF40kb.20.02.1998 06:04скачать
MOON2.GIF26kb.20.02.1998 16:25скачать
MOON3.GIF47kb.20.02.1998 06:04скачать
MOON.GIF14kb.20.02.1998 06:05скачать
PLANET1.GIF168kb.22.02.1998 23:17скачать
PLANET3.GIF146kb.20.02.1998 16:26скачать
PLANET.GIF20kb.20.02.1998 16:29скачать
PULSAR.GIF3kb.20.02.1998 05:48скачать
REDGLOBE.GIF68kb.20.02.1998 16:24скачать
SATURN.GIF30kb.20.02.1998 05:52скачать
SHINING.GIF7kb.20.02.1998 05:47скачать
SPIKE.GIF4kb.20.02.1998 05:48скачать
STAR1.GIF53kb.22.02.1998 22:22скачать
STAR2.GIF3kb.20.02.1998 05:48скачать
STAR3.GIF17kb.20.02.1998 05:45скачать
STAR4.GIF3kb.20.02.1998 05:40скачать
STAR5.GIF1kb.20.02.1998 05:39скачать
STAR6.GIF7kb.20.02.1998 05:41скачать
STAR7.GIF3kb.20.02.1998 05:41скачать
STAR8.GIF5kb.20.02.1998 05:39скачать
STAR.GIF2kb.20.02.1998 05:47скачать
STARRY.GIF9kb.20.02.1998 05:39скачать
STARS.GIF11kb.20.02.1998 05:52скачать
TWSTAR.GIF3kb.20.02.1998 05:37скачать
ABALL1AB.GIF9kb.20.02.1998 09:59скачать
ABALL1A.GIF7kb.20.02.1998 09:58скачать
ABALL2A.GIF9kb.20.02.1998 09:57скачать
ABALL3A.GIF9kb.20.02.1998 09:57скачать
ABALL4A.GIF9kb.20.02.1998 10:07скачать
ABALL6A.GIF9kb.20.02.1998 09:56скачать
AG_BALL3.GIF4kb.20.02.1998 09:58скачать
AN_ICONA.GIF6kb.20.02.1998 18:22скачать
BALL1.GIF4kb.20.02.1998 09:54скачать
BALL2.GIF2kb.20.02.1998 09:54скачать
BALL3.GIF4kb.20.02.1998 09:54скачать
BALL.GIF6kb.20.02.1998 09:57скачать
BLINE.GIF3kb.20.02.1998 09:53скачать
BLINK~42.GIF3kb.20.02.1998 09:53скачать
BLINKIE.GIF3kb.20.02.1998 09:53скачать
BLUBOU.GIF1kb.20.02.1998 09:52скачать
BLUEBALL.GIF9kb.20.02.1998 09:53скачать
BLUER~50.GIF11kb.20.02.1998 09:53скачать
BLUERED.GIF2kb.20.02.1998 09:52скачать
BLUES~52.GIF3kb.20.02.1998 09:52скачать
BLUEY~54.GIF10kb.20.02.1998 09:51скачать
BLUPULSE.GIF2kb.20.02.1998 09:51скачать
BNC_ANM.GIF5kb.20.02.1998 09:53скачать
BUBBLER.GIF6kb.20.02.1998 09:48скачать
CONENB.GIF50kb.20.02.1998 09:52скачать
GLOBE.GIF40kb.20.02.1998 18:25скачать
GOLD1.GIF2kb.20.02.1998 09:41скачать
GP_BUT27.GIF10kb.22.02.1998 23:59скачать
GP_BUT29.GIF18kb.20.02.1998 09:44скачать
GP_BUT37.GIF2kb.20.02.1998 09:37скачать
GP_BUT38.GIF1kb.20.02.1998 09:36скачать
GP_BUT39.GIF2kb.20.02.1998 09:39скачать
GP_BUT40.GIF7kb.20.02.1998 09:44скачать
GP_GLO~7.GIF77kb.24.02.1998 00:22скачать
GP_GLO~8.GIF6kb.20.02.1998 09:39скачать
GP_GLO~9.GIF5kb.20.02.1998 09:32скачать
GP_GRN~2.GIF13kb.20.02.1998 09:36скачать
GP_MOON.GIF8kb.20.02.1998 09:31скачать
GP_PIC3.GIF72kb.20.02.1998 09:36скачать
GP_PIC4.GIF119kb.24.02.1998 00:21скачать
G_SPIRAL.GIF9kb.23.02.1998 00:02скачать
PALLA.GIF8kb.20.02.1998 09:30скачать
PERLREDB.GIF2kb.20.02.1998 09:29скачать
PURPIN.GIF2kb.20.02.1998 09:29скачать
ROLLBALL.GIF5kb.20.02.1998 09:29скачать
ROTDONE.GIF25kb.20.02.1998 09:31скачать
SBUTTON.GIF15kb.20.02.1998 09:26скачать
SOC_ANM.GIF14kb.22.02.1998 23:59скачать
SPIK~126.GIF8kb.20.02.1998 09:22скачать
SQUI~128.GIF9kb.20.02.1998 09:29скачать
TCWD_106.GIF7kb.20.02.1998 05:29скачать
TCWD_118.GIF4kb.20.02.1998 05:29скачать
banner_3.gif14kb.22.12.1998 20:36скачать
1P_BAR1.GIF135kb.23.02.1998 20:41скачать
AG_BAR2.GIF3kb.20.02.1998 09:22скачать
ANIMA~22.GIF9kb.20.02.1998 09:21скачать
ANIM-BAR.GIF7kb.20.02.1998 09:20скачать
ANI-TUBE.GIF8kb.20.02.1998 09:19скачать
BAR_ANM.GIF7kb.20.02.1998 09:18скачать
BAR_EL.GIF11kb.20.02.1998 09:18скачать
BARMOVE.GIF28kb.20.02.1998 09:19скачать
BARSTAR.GIF5kb.20.02.1998 09:17скачать
BBOMB.GIF14kb.20.02.1998 09:17скачать
BEEP2.GIF4kb.20.02.1998 09:16скачать
BLOODBAR.GIF5kb.20.02.1998 09:17скачать
BLUEONE.GIF4kb.20.02.1998 09:16скачать
BLUERULE.GIF4kb.20.02.1998 09:16скачать
BLUETWO.GIF2kb.20.02.1998 09:15скачать
BOLT_ANI.GIF18kb.20.02.1998 09:15скачать
BOMBBAR.GIF11kb.20.02.1998 09:14скачать
BR_BAR.GIF12kb.20.02.1998 09:18скачать
BULBOUT.GIF2kb.20.02.1998 09:13скачать
BURST~70.GIF10kb.20.02.1998 09:14скачать
CANON.GIF15kb.20.02.1998 09:14скачать
CAT.GIF10kb.20.02.1998 09:16скачать
COLOR~82.GIF16kb.20.02.1998 09:17скачать
COLORBAR.GIF5kb.20.02.1998 09:13скачать
COLORLIN.GIF8kb.20.02.1998 09:13скачать
CON-BAR3.GIF7kb.20.02.1998 09:10скачать
COP.GIF13kb.20.02.1998 17:16скачать
DANCEBAR.GIF1kb.20.02.1998 09:09скачать
DOG_H~94.GIF64kb.20.02.1998 09:12скачать
DRIP1.GIF4kb.20.02.1998 09:09скачать
DRIP.GIF7kb.20.02.1998 09:09скачать
ELECTRIC.GIF6kb.20.02.1998 09:08скачать
FIREBAR2.GIF12kb.20.02.1998 09:09скачать
FIREBAR.GIF42kb.20.02.1998 09:12скачать
FLOW~110.GIF1kb.20.02.1998 09:07скачать
FUSS.GIF5kb.20.02.1998 09:07скачать
G_BAR_N3.GIF11kb.20.02.1998 09:08скачать
GEOBAR.GIF12kb.20.02.1998 09:09скачать
GP_BAR10.GIF12kb.20.02.1998 08:54скачать
GP_BAR11.GIF10kb.20.02.1998 17:12скачать
GP_BAR12.GIF18kb.20.02.1998 08:52скачать
GP_BAR1.GIF27kb.20.02.1998 09:05скачать
GP_BAR2.GIF45kb.20.02.1998 09:05скачать
GP_BAR3.GIF9kb.20.02.1998 17:16скачать
GP_BAR4.GIF13kb.20.02.1998 09:00скачать
GP_BAR5.GIF20kb.20.02.1998 09:00скачать
GP_BAR6.GIF17kb.20.02.1998 08:59скачать
GP_BAR7.GIF34kb.20.02.1998 17:13скачать
GP_BAR8.GIF62kb.23.02.1998 20:38скачать
GP_BAR9.GIF32kb.20.02.1998 08:59скачать
GP_GLO~5.GIF31kb.20.02.1998 08:55скачать
GREY~150.GIF14kb.20.02.1998 08:53скачать
HR1.GIF8kb.20.02.1998 08:49скачать
HR_S~156.GIF9kb.20.02.1998 08:50скачать
INDI~158.GIF10kb.20.02.1998 08:50скачать
JETRIGHT.GIF14kb.22.02.1998 02:46скачать
KILROY.GIF5kb.20.02.1998 08:48скачать
LASER.GIF6kb.20.02.1998 08:47скачать
LIBUNT.GIF1kb.20.02.1998 08:47скачать
LILRED.GIF3kb.20.02.1998 08:46скачать
LINE04C.GIF29kb.20.02.1998 17:15скачать
LINEDOT.GIF18kb.20.02.1998 08:47скачать
LOLLIPOP.GIF7kb.20.02.1998 17:11скачать
MATC~178.GIF9kb.20.02.1998 08:44скачать
NASCAR.GIF26kb.20.02.1998 17:12скачать
NEWS~182.GIF11kb.20.02.1998 08:41скачать
PROGRESS.GIF5kb.20.02.1998 08:38скачать
RULE02.GIF6kb.20.02.1998 08:38скачать
SABE~190.GIF30kb.20.02.1998 08:40скачать
SLIDBAR.GIF9kb.20.02.1998 08:36скачать
SPARK.GIF5kb.20.02.1998 08:33скачать
STAR~196.GIF14kb.20.02.1998 17:10скачать
WELLMESS.GIF12kb.20.02.1998 05:36скачать
WLCME.GIF8kb.20.02.1998 05:30скачать
YELLCAR.GIF28kb.20.02.1998 05:38скачать
BOOK2.GIF10kb.20.02.1998 18:57скачать
BOOK3.GIF20kb.20.02.1998 18:56скачать
ANIMASCT.GIF12kb.20.02.1998 11:32скачать
ANIRATZ.GIF4kb.20.02.1998 16:05скачать
ANMCALLE.GIF4kb.20.02.1998 11:32скачать
BUGSD~14.GIF68kb.20.02.1998 11:42скачать
CALVIN.GIF6kb.20.02.1998 11:28скачать
DEVIL~28.GIF8kb.20.02.1998 11:23скачать
DEVIL.GIF62kb.20.02.1998 11:30скачать
DRINK~30.GIF33kb.20.02.1998 11:22скачать
FOX.GIF18kb.20.02.1998 11:22скачать
FREAK~38.GIF3kb.20.02.1998 11:17скачать
GENIE.GIF67kb.20.02.1998 11:27скачать
GOLDHERO.GIF11kb.20.02.1998 11:15скачать
HERORUN.GIF57kb.20.02.1998 11:16скачать
OSCAR.GIF12kb.20.02.1998 10:59скачать
PNKPAN.GIF6kb.20.02.1998 10:58скачать
SHARPS.GIF99kb.20.02.1998 10:55скачать
SONIC.GIF5kb.20.02.1998 10:50скачать
SPIDE~54.GIF4kb.20.02.1998 10:50скачать
ST.GIF68kb.20.02.1998 10:56скачать
SUPER~58.GIF14kb.20.02.1998 10:49скачать
SYLVEST.GIF22kb.20.02.1998 10:49скачать
TWEETY.GIF9kb.20.02.1998 10:46скачать
VIKING.GIF38kb.20.02.1998 10:48скачать
WB.GIF16kb.20.02.1998 10:45скачать
WIZARD.GIF8kb.20.02.1998 10:43скачать
WOLF.GIF10kb.20.02.1998 10:43скачать
clownanim48.gif28kb.03.04.1998 17:05скачать
counting_fingers.gif4kb.11.10.1998 03:43скачать
3D.GIF20kb.20.02.1998 11:48скачать
COMETANI.GIF23kb.20.02.1998 11:49скачать
ORBIT.GIF57kb.20.02.1998 11:48скачать
WRING.GIF32kb.20.02.1998 11:37скачать
dancers.gif3kb.18.06.1998 21:05скачать
dansman.gif4kb.19.11.1998 02:53скачать
dtr10x.jpg35kb.18.03.1999 11:04скачать
dtr7.jpg25kb.07.11.1998 17:18скачать
ANI_EYE.GIF4kb.20.02.1998 12:00скачать
ANIMAL94.GIF22kb.20.02.1998 12:00скачать
EYE1.GIF17kb.20.02.1998 11:58скачать
EYE2.GIF41kb.20.02.1998 11:58скачать
EYE3.GIF19kb.20.02.1998 11:58скачать
EYE5.GIF17kb.20.02.1998 11:56скачать
EYE-LOOK.GIF3kb.20.02.1998 11:56скачать
EYE-MOV.GIF71kb.20.02.1998 12:00скачать
EYES2ANI.GIF30kb.20.02.1998 11:53скачать
EYES.GIF3kb.20.02.1998 11:54скачать
GP_PIC5.GIF134kb.20.02.1998 12:04скачать
GRN_E~40.GIF3kb.20.02.1998 11:50скачать
GRNEYES.GIF7kb.20.02.1998 11:49скачать
PEEP.GIF21kb.20.02.1998 13:12скачать
ANGEL.GIF54kb.20.02.1998 12:19скачать
ANKH.GIF8kb.20.02.1998 12:13скачать
DFLYGB.GIF28kb.25.02.1998 05:15скачать
DFLYGS.GIF28kb.25.02.1998 05:15скачать
DFLYSB.GIF19kb.25.02.1998 05:16скачать
DFLYS.GIF43kb.25.02.1998 05:16скачать
DRAGON~1.GIF12kb.20.02.1998 12:12скачать
DRAGON1.GIF41kb.20.02.1998 12:14скачать
DRAGON2.GIF18kb.20.02.1998 12:11скачать
HPS.GIF10kb.20.02.1998 12:10скачать
MONSTER.GIF11kb.20.02.1998 12:07скачать
PEGASUS2.GIF12kb.20.02.1998 12:05скачать
PEGASUS.GIF143kb.23.02.1998 20:26скачать
SORCE~44.GIF14kb.20.02.1998 12:05скачать
SPIRIT.GIF6kb.20.02.1998 12:05скачать
SWORD1.GIF51kb.20.02.1998 12:06скачать
SWORD.GIF23kb.20.02.1998 13:10скачать
SWORDS1.GIF23kb.20.02.1998 12:02скачать
UNUS_~58.GIF102kb.22.02.1998 02:34скачать
WIZARD1.GIF20kb.20.02.1998 13:08скачать
WRAITH.GIF24kb.20.02.1998 12:01скачать
ANI020.GIF22kb.20.02.1998 12:42скачать
BLUFIRE.GIF4kb.20.02.1998 12:42скачать
CANDLE1.GIF8kb.20.02.1998 12:41скачать
CANDLE2.GIF2kb.20.02.1998 12:41скачать
CANDLE3.GIF4kb.20.02.1998 12:40скачать
CANDLE6.GIF22kb.20.02.1998 12:48скачать
CANDLE7.GIF8kb.20.02.1998 12:45скачать
CANDLE.GIF10kb.20.02.1998 12:42скачать
DOOMFIRE.GIF13kb.20.02.1998 12:38скачать
DRKTORCH.GIF15kb.20.02.1998 13:10скачать
EXPLO~34.GIF19kb.20.02.1998 12:37скачать
FIRE001.GIF17kb.20.02.1998 12:35скачать
FIRE1.GIF7kb.20.02.1998 12:34скачать
FIRE2.GIF46kb.20.02.1998 12:36скачать
FIRE3.GIF6kb.20.02.1998 12:34скачать
FIREANM.GIF6kb.20.02.1998 12:33скачать
FIRELINK.GIF100kb.20.02.1998 12:41скачать
FIREW~54.GIF65kb.20.02.1998 13:09скачать
FIREW~56.GIF65kb.20.02.1998 12:33скачать
FIREW~58.GIF69kb.20.02.1998 12:33скачать
FIREWRKS.GIF37kb.20.02.1998 12:32скачать
FLAME1.GIF12kb.20.02.1998 13:07скачать
FLAME2.GIF4kb.20.02.1998 13:06скачать
FLAME3.GIF22kb.20.02.1998 13:07скачать
FLAME.GIF21kb.20.02.1998 12:30скачать
FLAMM~72.GIF7kb.20.02.1998 12:23скачать
FLIKER.GIF40kb.20.02.1998 13:07скачать
NUCLEAR.GIF34kb.20.02.1998 12:22скачать
RTORCH.GIF9kb.20.02.1998 12:19скачать
TORCH1.GIF16kb.20.02.1998 13:07скачать
TORCH.GIF12kb.20.02.1998 12:21скачать
TORCHSM.GIF16kb.20.02.1998 12:20скачать
ANIMDIAB.GIF26kb.20.02.1998 13:06скачать
BCROSS.GIF21kb.20.02.1998 13:06скачать
BLACK~10.GIF15kb.20.02.1998 13:05скачать
BONED~12.GIF23kb.20.02.1998 13:05скачать
BUTCHER.GIF15kb.20.02.1998 13:04скачать
CHESS.GIF23kb.20.02.1998 13:04скачать
DEDDI~20.GIF83kb.20.02.1998 12:49скачать
DIABL~24.GIF67kb.20.02.1998 13:03скачать
DIABL~26.GIF65kb.20.02.1998 13:12скачать
DIABL~28.GIF25kb.20.02.1998 13:02скачать
DIABL~30.GIF69kb.20.02.1998 13:06скачать
DNTIGER1.GIF16kb.20.02.1998 13:00скачать
DOOM2.GIF5kb.20.02.1998 13:00скачать
DRUIDD.GIF67kb.20.02.1998 13:03скачать
EXPLO~42.GIF26kb.20.02.1998 12:59скачать
FIGHTER.GIF8kb.20.02.1998 12:58скачать
GANGS.GIF47kb.25.02.1999 17:37скачать
INCIN~48.GIF21kb.20.02.1998 16:07скачать
INVIS~50.GIF12kb.20.02.1998 12:58скачать
KNIGHT.GIF35kb.20.02.1998 13:05скачать
LAZARUS.GIF21kb.20.02.1998 13:00скачать
LORDS~56.GIF25kb.20.02.1998 12:58скачать
MAGEAT.GIF19kb.20.02.1998 12:53скачать
MAGE.GIF30kb.20.02.1998 12:53скачать
MAGICIAN.GIF50kb.20.02.1998 13:02скачать
PEN.GIF27kb.20.02.1998 12:52скачать
PENTA~68.GIF3kb.20.02.1998 12:51скачать
PENTA~70.GIF11kb.20.02.1998 12:51скачать
QUAKE.GIF13kb.20.02.1998 12:51скачать
RAD.GIF10kb.20.02.1998 12:51скачать
ROGUEBOW.GIF12kb.20.02.1998 12:51скачать
SCORPIO.GIF14kb.20.02.1998 12:51скачать
SKULL~84.GIF5kb.20.02.1998 12:50скачать
SKULL~86.GIF9kb.20.02.1998 12:50скачать
SORCERF.GIF19kb.20.02.1998 12:50скачать
SUB-ZERO.GIF13kb.20.02.1998 12:52скачать
SUCCUBUS.GIF14kb.20.02.1998 12:50скачать
UNRAV~96.GIF9kb.20.02.1998 12:50скачать
UO.GIF13kb.20.02.1998 12:50скачать
WARRIORA.GIF17kb.20.02.1998 12:50скачать
WARRIORB.GIF19kb.20.02.1998 12:49скачать
WARRIOR.GIF19kb.20.02.1998 12:49скачать
HAND1.GIF37kb.20.02.1998 12:46скачать
HAND3.GIF55kb.20.02.1998 12:47скачать
HAND.GIF23kb.20.02.1998 12:46скачать
HANDS.GIF24kb.20.02.1998 12:45скачать
HANDWAVE.GIF17kb.20.02.1998 12:45скачать
HEART2.GIF10kb.20.02.1998 18:55скачать
ABELLL~6.GIF25kb.23.02.1998 04:29скачать
ABELLR~8.GIF24kb.23.02.1998 04:39скачать
XMASLT2.GIF21kb.23.02.1998 02:42скачать
hoparlor.gif10kb.02.04.1998 15:11скачать
hot_mix.gif20kb.09.06.1998 14:04скачать
line13.gif15kb.18.04.1998 02:16скачать
mailmove.gif7kb.18.05.1998 02:36скачать
1P_LVER1.GIF61kb.24.02.1998 19:22скачать
ALARMCL.GIF8kb.24.02.1998 19:20скачать
ANADIM.GIF29kb.24.02.1998 19:21скачать
ART.GIF33kb.24.02.1998 19:19скачать
ASTER.GIF13kb.24.02.1998 19:19скачать
BLOB.GIF5kb.24.02.1998 19:04скачать
BRUSH.GIF30kb.24.02.1998 19:04скачать
C_FAN.GIF13kb.24.02.1998 19:03скачать
CLAP.GIF49kb.24.02.1998 19:03скачать
$.GIF30kb.24.02.1998 19:22скачать
GUNANIM.GIF9kb.24.02.1998 18:51скачать
LLRINGS.GIF31kb.25.02.1998 05:16скачать
LOOKER1.GIF2kb.25.02.1998 05:16скачать
M14.GIF9kb.25.02.1998 05:16скачать
PLAYBOY.GIF9kb.24.02.1998 00:38скачать
RCHAIR.GIF30kb.24.02.1998 00:37скачать
REDRINGS.GIF37kb.24.02.1998 00:36скачать
RFHEA~40.GIF19kb.24.02.1998 00:37скачать
RING_ANM.GIF9kb.24.02.1998 00:36скачать
ROSE01.GIF22kb.24.02.1998 00:35скачать
STARR.GIF138kb.24.02.1998 00:32скачать
MOV11.GIF5kb.03.04.1998 17:10скачать
mp3cd.gif30kb.20.11.1998 05:07скачать
newSmCLR.gif2kb.18.06.1998 21:07скачать
PERL.GIF32kb.02.04.1998 15:20скачать
pulsar1.gif12kb.17.01.1998 21:25скачать
ATOM1.GIF7kb.24.02.1998 21:00скачать
ATOM2.GIF37kb.24.02.1998 21:00скачать
ATOM3.GIF25kb.24.02.1998 21:00скачать
NUC_AN3.GIF12kb.24.02.1998 20:59скачать
SPIKES.GIF15kb.24.02.1998 20:59скачать
DANCIN~8.GIF34kb.24.02.1998 20:54скачать
SKELE~14.GIF7kb.24.02.1998 20:52скачать
SKELE~16.GIF66kb.24.02.1998 20:52скачать
SKELEDAN.GIF22kb.24.02.1998 20:53скачать
SKELETON.GIF70kb.24.02.1998 20:54скачать
SKULL1.GIF40kb.24.02.1998 20:52скачать
SKULL2.GIF31kb.24.02.1998 20:52скачать
SKULL33.GIF4kb.24.02.1998 20:49скачать
SKULL3.GIF13kb.24.02.1998 20:50скачать
SKULL.GIF46kb.24.02.1998 20:51скачать
Smile.gif2kb.03.04.1998 17:10скачать
SMILELY.GIF1kb.03.04.1998 17:10скачать
ABDUCT~6.GIF33kb.24.02.1998 20:50скачать
ALIEN1.GIF14kb.24.02.1998 20:49скачать
ALIEN2.GIF17kb.24.02.1998 20:49скачать
ALIENBAL.GIF33kb.24.02.1998 20:49скачать
AL_IEN.GIF6kb.24.02.1998 20:49скачать
ALIEN.GIF15kb.24.02.1998 20:49скачать
ALION.GIF5kb.24.02.1998 20:47скачать
BORGSHIP.GIF121kb.24.02.1998 20:48скачать
COOL_D1.GIF15kb.24.02.1998 20:47скачать
FLASH.GIF5kb.24.02.1998 20:46скачать
FLYIN~30.GIF6kb.24.02.1998 20:46скачать
GBOWL.GIF22kb.24.02.1998 20:46скачать
KLINGON.GIF33kb.24.02.1998 20:45скачать
LIGHTMAN.GIF126kb.24.02.1998 20:47скачать
MECH10.GIF35kb.24.02.1998 20:40скачать
MECH1.GIF7kb.24.02.1998 20:43скачать
MECH2.GIF54kb.24.02.1998 20:45скачать
MECH3.GIF56kb.24.02.1998 20:43скачать
MECH4.GIF55kb.24.02.1998 20:43скачать
MECH5.GIF37kb.24.02.1998 20:41скачать
MECH6.GIF53kb.24.02.1998 20:42скачать
MECH7.GIF62kb.24.02.1998 20:41скачать
MECH8.GIF60kb.24.02.1998 20:41скачать
MECH9.GIF15kb.24.02.1998 20:39скачать
NXTGEN.GIF53kb.24.02.1998 20:38скачать
R2D2.GIF146kb.24.02.1998 20:39скачать
REDSHIP.GIF95kb.24.02.1998 20:37скачать
SHIPANI.GIF39kb.24.02.1998 20:34скачать
SHIP.GIF96kb.24.02.1998 20:36скачать
SPACE~84.GIF27kb.24.02.1998 20:29скачать
SPACE~90.GIF76kb.24.02.1998 20:31скачать
SPACE~92.GIF46kb.24.02.1998 20:27скачать
SPACE.GIF111kb.24.02.1998 20:34скачать
SPSHIP10.GIF10kb.24.02.1998 20:16скачать
SPSHIP12.GIF44kb.24.02.1998 19:44скачать
SPSHIP1.GIF28kb.24.02.1998 20:24скачать
SPSHIP2.GIF104kb.24.02.1998 20:24скачать
SPSHIP3.GIF18kb.24.02.1998 20:22скачать
SPSHIP4.GIF67kb.24.02.1998 20:22скачать
SPSHIP6.GIF36kb.24.02.1998 20:21скачать
SPSHIP7.GIF36kb.24.02.1998 20:20скачать
SPSHIP8.GIF114kb.24.02.1998 20:21скачать
SPSHIP9.GIF42kb.24.02.1998 20:18скачать
SPSHIP.GIF84kb.24.02.1998 20:26скачать
STARBADG.GIF14kb.24.02.1998 19:43скачать
STARWARS.GIF102kb.24.02.1998 19:42скачать
TIEF~130.GIF74kb.24.02.1998 19:42скачать
TREK.GIF21kb.24.02.1998 19:39скачать
VOYBAR2.GIF17kb.24.02.1998 19:38скачать
WINK~142.GIF19kb.24.02.1998 19:38скачать
XWINGS.GIF25kb.24.02.1998 19:38скачать
Spicker.gif6kb.03.11.1998 16:03скачать
thatsall200.gif21kb.13.12.1998 12:43скачать
CAMERA1.GIF108kb.25.02.1998 05:13скачать
XFILES.GIF25kb.25.02.1998 05:09скачать
under5.gif6kb.13.04.1998 00:28скачать
LIGHT~14.GIF37kb.25.02.1998 05:13скачать
LIGHT~18.GIF42kb.25.02.1998 05:13скачать
TWISTER2.GIF13kb.25.02.1998 05:09скачать
задание СПС лаб6.doc27kb.20.04.2005 11:14скачать
1. РАЗРАБОТКА СПРАВОЧНЫХ HTML-СИСТЕМ.DOC103kb.24.02.2001 09:44скачать
2. ОБЗОР СИСТЕМЫ HTML HELP.DOC95kb.24.02.2001 07:47скачать
3. Работа с HTML Work Shop.doc225kb.28.03.2005 11:56скачать
4. ИНФОРМАЦИОННЫЕ МАТЕРИАЛЫ HTML И ФАЙЛ ПРОЕКТА.DOC54kb.23.02.2001 11:07скачать
5. MICROSOFT HTML HELP.DOC263kb.24.02.2001 10:04скачать
Как организовать вызов дополнительного окна на гиперссылку.doc30kb.23.03.2005 22:33скачать
Добавление закладки ПОИСК в HTML-HELP.doc56kb.23.03.2005 23:01скачать
Создание Pop-Up окна в HTML-HELP файлах.doc53kb.21.03.2005 23:51скачать
Встраивание сценариев в HTML.doc27kb.28.03.2005 20:46скачать
Прочие элементы.doc26kb.27.03.2005 20:23скачать
Словарь по HTML для начинающих.doc43kb.28.03.2005 15:06скачать
Таблица цветов RGB и HTML.doc232kb.28.03.2005 15:15скачать
1. Добавление Flash к Html-Help.doc43kb.27.03.2005 18:59скачать
2. Подключение Flash к html.doc41kb.26.03.2005 10:27скачать
3. Атрибуты тэгов OBJECT и EMBED.doc76kb.26.03.2005 01:00скачать
Hh_C++.pdf77kb.12.02.2001 06:56скачать
Hh_VB.pdf60kb.12.02.2001 06:56скачать
1. ИСПОЛЬЗОВАНИЕ HTML HELP В ПРИЛОЖЕНИЯХ НА VISUAL BASIC.DOC123kb.24.05.2005 19:31скачать
2. Добавление HTML Help в приложение VB 6.0.doc28kb.02.04.2010 11:57скачать
3. Как вызывать help из приложения С++.doc48kb.06.03.2005 10:05скачать
4. Использование HTML Help в проекте MFC.doc29kb.17.03.2005 14:52скачать
Теги HTML.doc1691kb.31.03.2006 14:36скачать
01. Все, что нужно знать о программировании в Macromedia Flash.doc178kb.04.05.2005 14:38скачать
02. СПРАВОЧНИК по программированию во FLASH.doc407kb.04.05.2005 14:37скачать
03. ОБЪЕКТНО ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ в ACTION SCRIPT.doc605kb.03.05.2005 17:24скачать
04. Программирование клиентских приложений с использованием Macromedia Flash.doc133kb.28.03.2005 19:09скачать
05. ЯЗЫК ACTION SCRIPT.doc2998kb.20.04.2005 10:27скачать
06. ActionScript - во Flash.doc104kb.30.03.2005 11:08скачать
07. Отладка во Flash 5.doc124kb.01.03.2004 11:23скачать
08. Обнаружение ошибок в именах переменных Actionscript.doc26kb.26.11.2003 10:45скачать
09. Создание элементов сайтов с использованием Flash.doc133kb.28.03.2005 19:20скачать
10. Программное создание часов во Flash.doc76kb.28.03.2005 19:24скачать
11. Программирование во Flash.doc54kb.01.03.2004 10:54скачать
12. Стандарты Actionscript.doc218kb.26.03.2005 01:07скачать

05. ЯЗЫК ACTION SCRIPT.doc

1   2   3   4   5   6   7   8   9   ...   82
Реклама MarketGid:
Загрузка...
^

Глава 11. Массивы

Содержание:


Что такое массив?
Анатомия массива
Создание массивов
Обращение к элементам массива
Определение размера массива
Именованные элементы массива
Добавление элементов в массив
Удаление элементов из массива
Общие средства обработки массивов
Многомерные массивы
Вопросник с вариантами выбора: подход № 3
Вперед!

Ранее в главе 3 "Данные и типы данных" говорилось о том, что элементарные типы данных - строки (Strings), числа (Numbers), булевы величины (Booleans), null и undefined - представляют в сценариях основную информацию. Было также отмечено, что ActionScript поддерживает несколько составных типов данных, которые могут объединять насколько фрагментов данных в один элемент данных.

Первым составным типом данных для изучения станет массив (Array). Массивы используются для хранения упорядоченных списков и работы с ними, и потому являются базовым средством для последовательного программирования с многократными повторениями. Одни применяются к таким задачам, как хранение значений, полученных из формы, заполненной пользователем, создание выпадающих меню, слежение за неприятельским космическим кораблем в игре и т. д. В наиболее общем виде массив можно представить как список элементов, например, список необходимых покупок или записей в бухгалтерской книге.
^

11.1. Что такое массив?


Массив - это структура данных, которая может заключать в себе несколько отдельных значений данных, подобно тому, как здание - это физическая структура, которая может содержать несколько этажей. В отличие от элементарных типов данных, массив может содержать более одного значения данных. Вот простой пример, в котором сначала показаны две строки по отдельности, а потом массив, содержащий две строки:

"oranges" // Одно элементарное строковое значение

"apples" // Еще одно элементарное строковое значение

["oranges", "apples"] // Один массив, содержащий два строки

Массив является контейнером общего назначения. В нем может содержаться любое количество элементов, в том числе и элементы разных типов данных. Массив может содержать даже другие массивы. Вот простой пример, демонстрирующий массив, содержащий как строки, так и числа. В нем может быть представлен перечень покупок и количество каждого товара, который вы собираетесь приобрести:

["oranges", 6, "apples", 4, "bananas", 3]

Вот еще одна аналогия, позволяющая сделать понятие массива более осязаемым. Представьте себе комод с ящиками. В каждом отдельном ящике есть некоторое содержимое (носки, рубашки и т.д.). Но в самом комоде нет содержимого, он содержит в себе только выдвижные ящики. Содержимое хранят ящики. Комод объединяет ящики в единое целое.

При работе с массивом (комодом) нас обычно интересует значения, хранящиеся в массиве (содержимое ящиков). Значения, хранимые в массиве, являются информацией, которой мы хотим распоряжаться. Но можно работать и с самой структурой хранения. Можно, например, изменить размер массива (добавить или вытащить ящик) или переупорядочить значения (обменять ящики содержимым).

Хотя мы и говорим, что массив содержит много значений, важно понять, что сам массив является одним элементом данных, так же как строка, содержащая несколько символов, считается единой строкой, и число из нескольких цифр считается одним числом. В качестве одиночного элемента данных массив можно присвоить переменной или использовать в более сложных выражениях:

product = ["ladies downhill skis", 475] // Сохранить массив в переменной product

display (product); // Передать массив в функцию display


^

11.2. Анатомия массива


Каждый отдельный предмет, хранящийся в массиве, называется элементом массива, и у каждого элемента есть уникальный номер (индекс (index)), по которому можно на него ссылаться.
^

11.2.1. Элементы массива


Как и переменная, каждый элемент массива может хранить любой допустимый тип данных. Поэтому массив в целом похож на совокупность последовательно именованных переменных, но вместо того, чтобы давать каждому отдельному элементу имя, он его нумерует (при этом номер первого элемента 0, а не 1).

На рис. 11-1 схематически изображена структура массива из трех элементов. Элемент 0 содержит значение "Erica", элемент 1 - "Slavik", а элемент 2 - "Gary".


^

Рис 11-1. Пример структуры массива


При работе со значениями, хранящимися в элементах массива, следует запрашивать их по номерам (индексам). В нашей аналогии с комодом можно попросить ActionScript сохранить что-то в первом ящике или извлечь то, что находится во втором.
^

11.2.2. Индексация элементов массива


Положение элемента в массиве называют индексом. Так же как можно обратиться к седьмому символу строки, можно обратиться к седьмому элементу массива с помощью его индекса (в данном случае индекс будет равен 6). Индекс элемента используется для присвоения элементу значения или извлечения значения, либо работы с элементом каким-либо другим способом. Например, некоторые функции при работе с массивами используют индексы массивов для задания диапазона элементов, подлежащих обработке.

Кроме того, можно вставлять и удалять элементы в начало, конец и доже в середину массива. В массиве могут быть пустые промежутки (т.е. некоторые элементы могут отсутствовать). Например, в позициях 0 и 4 могут быть элементы, а в позициях 1, 2 и 3 - отсутствовать. Массивы с пустыми промежутками называют разреженными (sparse).
^

11.2.3. Размер массива


В каждом массиве в любой момент срока его жизни содержится определенное количество элементов. Количество элементоа, которые могут быть размещены в массиве, называется его длиной (length), о которой мы поговорим позднее.
^

Массивы в других языках программирования


Почти любой язык программирования высокого уровня поддерживает тот или иной тип массивов или похожих на массив конструкций. При этом в способах реализации массивов в разных языках есть различия. Например, во многих языках не допускается хранение в массиве данных разных типов. Во многих языках массив может содержать либо числа, либо строки, но не одновременно. Интересно, что в языке С отсутствует элементарный тип данных строка (String). Вместо этого в С поддерживается тип относительных данных с именем char ; строки считаются составным типом данных и реализованы в виде массива элементов типа char!

В ActionScript размер массива автоматически изменяется при добавлении или удалении элементов. Во многих языках размер массива должен быть указан при первом объявлении массива - это называется заданием его размерности (dimensioned) (при этом для хранения данных массива выделяется память). В Lingo, языке сценариев для Macromedia Director, массивы называются списками (lists). Как и ActionScript, Lingo разрешает хранить в одном массиве данные разных типов и при необходимости автоматически изменять их размер. В отличие от ActionScript и C, в которых массив нумеруется с 0 (так называемый 0-относительный (zero-relative) массив), в Lingo он начинается с 1 (так называемый 1-относительный (one-relative) массив).

Языки различаются и по тому, что происходит при попытке доступа к элементу, находящемуся за границами массива. ActionScript и Lingo при попытке присвоить значение элементу за пределами массива просто добавляет этот элемент. Если же попытаться получить значение элемента за пределами массива, ActionScript возвратит undefined, а в Lingo произойдет ошибка. Язык С не проверяет, является ли допустимым номер элемента, к которому происходит обращение. Он позволяет задавать и извлекать значения элементов за пределами массива, что обычно влечет изменение в памяти других данных или чтение бессмысленных данных, не принадлежащих массиву (C вообще часто предоставляет веревку, на которой можно повеситься).



^

11.3. Создание массивов


Новый массив можно создать с помощью литерала данных (т.е. просто набрав в тексте все элементы) или с помощью специальной встроенной функции конструктора массивов Array( ).
^

11.3.1. Конструктор массивов


Для создания массива с помощью конструктора Array( ) используется оператор new, за которым следует ключевое слово Array и круглые скобки, в результате чего образуется пустой (т.е. не содержащий элементов) массив. Обычно вновь созданный массив присваивается переменной или другому контейнеру данных, которые позволяют обращаться к массиву в будущем. Например:

var myList = new Array( ); // Сохранить пустой массив в переменной myList

Часто нужно присвоить элементам массива начальные значения. Сделать это можно путем передачи параметров конструктору Array( ) при его вызове. В зависимости от передаваемых параметров вызов конструктора приводит к различным результатам.

При передаче конструктору Array( ) нечислового параметра или просто нескольких параметров, каждый параметр становится одним из значений элементов нового массива. Например:

var frameLabels = new Array("intro", "section1", "section2", "home");

Массив, хранящийся в frameLabels, будет содержать следующие элементы:

0: "intro"

1: "section1"

2: "section2"

3: "home"

При передаче конструктору Array( ) ровно одного числового параметра создается массив с указанным числом пустых элементов-заместителей:

var myList = new Array(14); // Создает массив из 14 пустых элементов

Параметры, передаваемые конструктору Array( ), могут быть любыми допустимыми выражениями, в том числе составными:

var x = 10;

var y = 5;

var myNumbers = new Array(x + 1, x * y, Math.random( ));

В результате переменная myNumbers будет хранить массив с такими элементами:

0: 11

1: 50

2: число с плавающей точкой между 0 и 1
^

11.3.2. Литералы массивов


Иногда удобнее создавать массивы с помощью литералов, а не конструктора Array( ). Напомним, что литерал является прямым представителем фиксированного участка определенных данных. Например:

"beaver" // Строковый литерал

234.2034 // Числовой литерал

true // Булев литерал

В литерале массива о начале и конце массива сигнализируют квадратные скобки. Внутри квадратных скобок задаются значения элементов массива в виде списка выражений, разделяемых запятыми. Общий синтаксис такой:

[expression1, expression2, expression3]

Выражения вычисляются, и полученные значения сохраняются в виде элементов описываемого массива. Могут использоваться любые допустимые выражения, в том числе вызовы функций, переменные, литералы и даже другие массивы (массив, находящийся внутри другого массива, называется вложенным). Вот несколько примеров:

[4, 5, 63]; // Простые числовые элементы

["jeremy", "janice", "eman"] // Простые строковые элементы

[1, 4, 6 + 10] // Числовые выражения и операции

[firstName, lastName, "tall", "skinny"] // Переменные и строки в качестве элементов массива

["month end days", [31, 30, 28]] // Вложенный литерал массива

Сравним, как то же самое делается с помощью конструктора Array( ):

new Array(4, 5, 63)

new Array("jeremy", "janice", "eman")

new Array(1, 4, 6 + 10)

new Array(firstName, lastName, "tall", "skinny")

new Array("month end days", new Array(31, 30, 28))

Обратите внимание, что в ActionScript элементы одного массива могут содержать данные разных типов, как было отмечено ранее во вставке "Массивы в других языках программирования".
^

11.4. Обращение к элементам массива


Когда массив создан, неизбежно потребуется извлечь или изменить значения его элементов. Для этого можно использовать квадратные скобки [ ] (оператор доступа к массиву), который рассматривался в главе 5 "Операторы".
^

11.4.1. Извлечение значения элемента


Чтобы получить значение элемента, нужно просто сослаться на него, указав его индекс в квадратных скобках, например:

arrayName[elementNumber]

где arrayName представляет массив, а elementNumber может быть любым выражением, дающим числовое значение. Номер первого элемента - 0, а номер последнего - на единицу меньше длины массива (arrayName.length - 1). Если задать номер элемента, превышающий номер последнего действительного элемента, интерпретатор возвратит значение undefined. Например:

// Создать массив с помощью литерала массива и сохранить его в переменной trees

var trees = ["birch", "maple", "oak", "cedar"];


// Вывести первый элемент массива trees в окно Output

trace(trees[0]); // Выводит: "birch"


// Присвоить значение третьего элемента переменной favoriteTree

// (индексы начинаются с 0, поэтому индекс 2 соответствует третьему элементу!!)

var favoriteTree = trees[2]; // favoriteTree получает значение "oak"

Теперь начинается самое интересное. Так как индекс элемента можно задавать в виде любого выражения, дающее число, то в качестве индекса можно использовать и переменную. Например:

var i = 3;

var lastTree = trees[i]; // Присвоить lastTree значение "cedar"

Возможно даже использование в этом качестве выражений, содержащих вызовы функций, которые возвращают числовые значения:

// Присвоить переменной randomTree значение случайно выбранного элемента

// массива trees, получив случайное число между 0 и 3

var randomTree = trees[Math.floor(Math.random( ) * 4)];

Сила! Аналогичный подход можно применить для выбора случайного вопроса из массива простых вопросов или случайной карты из массива, представляющего колоду.

Обратите внимание на сходство между доступом к массиву и доступу к значению переменной. Элементы массива можно включать в состав сложных выражений, например так:

var myNums = [12, 4, 155, 90];

var myTotal = myNums[0] + myNums[1] + myNums[2] + myNums[3]; // Сложить элементы массива

Использованный в предыдущем примере подход к суммированию значений элементов массива не служит эталоном оптимального кода. Ниже будет показан значительно более быстрый и удобный способ последовательного доступа к элементам массива.
^

11.4.2. Присваивание элементу значения


Чтобы присвоить значение элементу массива, в качестве левого операнда в выражении присвоения используется arrayName [elementNumber] :

// Сделать массив

var cities = ["Toronto", "Montreal", "Vancouver", "Waterloo"];

// Теперь массив cities содержит: ["Toronto", "Montreal", "Vancouver", "Waterloo"]


// Присвоить значение первому элементу массива

cities[0] = "London";

// Массив cities становится: ["London", "Montreal", "Vancouver", "Waterloo"]


// Присвоить значение четвертому элементу массива

cities[3] = "Hamburg";

// Массив cities стал: ["London", "Montreal", "Vancouver", "Hamburg"]


// Присвоить значение третьему элементу массива

cities[2] = 293.3; // Обратите внимание, что можно изменять тип данных

// Массив cities стал: ["London", "Montreal", 293.3, "Hamburg"]

Обратите внимание, что при присваивании значения элементу массива можно использовать в качестве индекса любое числовое выражение:

var i = 1;

// Установить значение элемента, равного i

cities[i] = "Prague";

// Массив cities стал: ["London", "Prague", 293.3, "Hamburg"]

^

11.5. Определение размера массива


У всех массивов есть встроенное свойство length, показывающее текущее количество элементов (включая и пустые). Для доступа к свойству массива length используется оператор точка, например:

arrayName.length

Свойство массива length сообщает о том, сколько элементов в данный момент находится в массиве. Вот несколько примеров:

myList = [34, 45, 57];

trace(myList.length); // Выводит: 3


myWords = ["this", "that", "the other"];

trace(myWords.length); // Выводит: 3, количество элементов,

// а не количество слов или символов


frameLabels = new Array(24); // Обратите на единственный числовой параметр,

// передаваемый в конструктор Array( )

trace(frameLabels.length); // Выводит: 24

Длина массива (length) всегда на единицу больше индекса его последнего элемента. Например, массив, состоящий из элементов с индексами 0, 1 и 2 имеет длину 3. Массив, состоящий из элементов 0, 1, 2 и 50, имеет длину 51. Неужели 51? Да, 51. Не смотря на то, что индексы с 3 по 49 пусты, они учитываются в длине массива. Последним элементом массива всегда является myArray[myArray.length - 1], т.к. нумерация индексов начинается с0, а не с 1.

При добавлении или удалении элементов свойство массива length обновляется, отражая сделанные изменения. На самом деле можно даже присваивать этому свойству значения, тем самым добавляя или удаляя элементы в конец массива.

Может возникнуть вопрос, какая польза от свойства length? С помощью свойства length можно создавать циклы для перебора всех элементов массива, подобно тому, что был продемонстрирован в примере 8-1. Перебор элементов массива является базовой задачей, возникающей в программировании. Чтобы получить представление о возможностях, возникающих при комбинировании циклов и массивов, изучите пример 11-1, где код "рыщет" по массиву soundtracks в поисках элемента со значением "hip hop". Цикл for должен быть вам знаком из главы 8 "Предложения цикла", а оператор инкрементирования - по главе 5 "Операторы". Что касается написание кода для доступа к массиву, вы только что узнали, как это делается.
^

Пример 11-1. Поиск в массиве


// Создать массив

var soundtracks = ["electronic", "hip hop", "pop", "alternative", "classical"];


// Проверить каждый элемент на содержание значения "hip hop"

for (var i = 0; i < soundtracks.length; i++) {

trace("Сейчас проверим элемент: " + i);

if (soundtracks[i] == "hip hop") {

trace("'hip hop' имеет индекс: " + i);

break;

}

}

Разработаем на основе примера 11-1 обобщенную функцию поиска, которая может искать в любом массиве любой элемент, как показано в примере 11-2. Эта функция возвращает позицию в массиве, где был найден элемент, или null, если он не был найден.
^

Пример 11-2. Обобщенная функция поиска в массиве


function searchArray (whichArray, searchElement) {

// Проверить каждый элемент на содержание значения searchElement

for (var i = 0; i < whichArray.length; i++) {

if (whichArray[i] == searchElement) {

return i;

}

}

return null;

}

Вот как с помощью этой новой функции можно проверить, есть ли имя "Fritz" в массиве userNames разрешенных имен пользователей:

if (searchArray (userNames, "Fritz") == null) {

trace ("Извините, такого пользователя нет.");

} else {

trace ("Добро пожаловать в игру!");

}

Это радует! Наступил один из тех драгоценных моментов, когда тяжелые усилия привели к созданию единой системы. Тривиальные с виду отдельные операции в своем сочетании могут образовывать чрезвычайно мощные и гибкие программы. Из строительных элементов, находящихся в вашем распоряжении, можно создавать любые мыслимые конструкции, как из букв алфавита или последовательностей аминокислот в цепочке ДНК. В оставшейся части этой главы более подробно рассказывается о технике работы с массивами, в том числе об использовании встроенных функций, уже готовых к тому, чтобы вместо вас выполнять часто встречающиеся задачи. Если возникшую задачу нельзя решить с помощью встроенных функций, можно написать собственную функцию, такую, например, как функция searchArray( ) из предыдущего примера.
^

11.6. Именованные элементы массива


Обычно элементы массивов нумеруются, но можно также давать им имена. С помощью именованных элементов можно моделировать так называемые ассоциативные массивы (associative arrays) или хеши (hashes). Отметим, что именованные элементы массива нельзя обрабатывать методами класса Array ( push( ), pop( ) и т. д., о которых будет рассказано ниже) и они не входят в состав списка нумерованных элементов. Массив из одного именованного элемента и двух нумерованных имеет длину (length) 2, а не 3. Поэтому для перебора всех именованных элементов массива нужно применять цикл for-in (о котором рассказывалось в главе 8 "Предложения цикла"), "пробегающий" как по именованным, так и нумерованным элементам.
^

11.6.1. Создание именованных элементов массива и обращение к ним


Для добавления элемента в массив, который потом можно будет использовать по имени, к существующему массиву применяются уже знакомые нам квадратные скобки, содержащие строку вместо числа:

arrayName[elementName] = expression

где elementName является строкой. Например:

var importantDates = new Array( );

importantDates["dadsBirthday"] = "June 1";

importantDates["mumsBirthday"] = "January 16";

Можно также воспользоваться оператором "точка":

arrayName.elementName = expression

В этом случае elementName является идентификатором, а не строкой. Например:

var importantDates = new Array( );

importantDates.dadsBirthday = "June 1";

importantDates.mumsBirthday = "January 16";

Предположим, что идентификатор элемента известен, (например, dadsBirthday в массиве importantDates), можно обратиться к нему одним из двух способов:

var goShopping = importantDates["dadsBirthday"];

var goShopping = importantDates.dadsBirthday;

Как в случае присвоения значения именованному элементу, так и в случае чтения его значения, при использовании квадратных скобок elementName является строкой или выражением, возвращающем строку. Аналогично, при использовании оператора точка elementName является идентификатором (Identifier) (т.е. именем элемента без кавычек), а не строкой.
^

11.6.2. Удаление именованных элементов


Чтобы избавить массив от ненужного именованного элемента, применяется оператор delete, о котором сообщалось в главе 5 "Операторы":

delete arrayName.elementName

Удаление именованного элемента разрушает как значение элемента, так и его контейнер, освобождая при этом помять, занимаемую элементом и его содержимым. Сравните это с поведением оператора delete при удалении нумерованных элементов, который удаляет только значение, а контейнер сохраняет.

^

11.7. Добавление элементов в массив


Добавить элементы в массив можно путем задания значения для нового элемента, увеличения значения свойства массива length или с помощью одной из встроенных функций для работы с массивами.
^

11.7.1. Непосредственное добавление новых элементов в массив


Чтобы добавить в существующий массив новый элемент по заданному индексу, можно просто присвоить этому индексу значение:

// Создать массив и присвоить ему три значения

var myList = ["apples", "oranges", "pears"];


// Добавить четвертое значение

myList[3] = "tangerines";

Новый элемент не обязательно помещать сразу за последним элементом прежнего массива. Если поместить новый элемент дальше, чем на один элемент после конца массива, ActionScript создаст автоматически пустые элементы для промежуточных индексов:

// Оставить индексы с 4 по 38 пустыми

myList[39] = "grapes";


trace (myList[12]); // Выводит undefined, т.к. 12 элемент массива не определен
^

11.7.2. Добавление новых элементов с помощью свойства массива length


Чтобы расширить массив, не присваивая значений новым элементам, можно просто увеличить свойство length, ActionScript добавит нужное количество элементов для достижения указанной длины:

// Создать массив из трех элементов

var myColors = ["green", "red", "blue"];


// Добавить в массив 47 пустых элементов, с индексами от 3 до 49

myColors.length = 50;

С помощью такого подхода можно создать ряд пустых элементов, чтобы выделить место для данных, которые вы рассчитываете получить, например, для результата сдачи экзаменов студентами.
^

11.7.3. Добавление новых элементов с помощью методов класса Array


С помощью встроенных методов массивов можно осуществлять выполнение более сложных сценариев добавления элементов. В главе 12 "Объекты и классы" будет объяснено, что метод - это функция, действующая над объектом
^

11.7.3.1. Метод push( )


Метод push( ) добавляет один или более элементов в конец массива. Он автоматически дописывает данные вслед за последним элементом массива, поэтому нет необходимости беспокоиться о реальном количестве существующих элементов. Метод push( ) может и добавлять в массив одновременно несколько элементов. Для вызова метода push( ) с массивом указывается имя массива, затем ставиться оператор "точка", ключевое слово push и 0 или более параметров, заключенных в круглые скобки:

arrayName.push(item1, item2,...itemN);

где item1, item2,...itemN составляют разделяемый запятыми список элементов, добавляемых в конец массива в качестве новых элементов. Вот несколько примеров:

// Создать массив из двух элементов

var menuItems = ["home", "quit"];


// Добавить один элемент в конец массива

menuItems.push("products");

// Массив menuItems стал: ["home", "quit", "products"]


// Добавит еще два элемента

menuItems.push("services", "contact");

// Массив menuItems стал теперь: ["home", "quit", "products", "services", "contact"]

При вызове метода push( ) без параметров в конец массива добавляется один пустой элемент:

menuItems.push( ); // Увеличить размер массива на 1


// То же, что

menuItems.length++;

Метод push( ) возвращает новую длину изменившегося массива:

var myList = [12, 23, 98];

trace(myList.push(28, 36)); // Добавляет 28 и 36 в массив myList и выводит: 5

Обратите внимание, что элементы, добавляемые в список, могут быть любыми выражениями. Перед добавлением элементов выражения вычисляются:

var temperature = 22;

var sky = "sunny";

var weatherListing = new Array( );

weatherListing.push(temperature, sky);

trace (weatherListing); // Выводит: "22, sunny", а не "temperature, sky"
^

Стеки и методы push( ) и pop( )


Имя метода push( ) берет начало от понятия программирования, называемого стеком (Stack). Стек можно представить себе в виде вертикального массива, похожего на стопку тарелок. Если вы бываете в кафетериях и ресторанах с буфетом, то вам должны быть знакомы стойки для тарелок. Новые чистые тарелки буквально проталкиваются (pushed) на самый верх стопки (Stack), а старые тарелки проваливаются все глубже в стойку. Когда клиент выталкивает (pops) тарелку из стопки, он берет ту тарелку, которая была помещена в стопку последней. Это называют стеком "последним пришел - первым ушел" (last-in-first-out, LIFO) и обычно используют в таких вещах, как команды буфера. Например, если вы в браузере щелкаете по кнопке "Назад", он переместит вас на предыдущую страницу, где вы побывали. Если снова щелкнуть по этой же кнопке, вы переместитесь назад еще на одну страницу и т.д. Это осуществляется путем проталкивания (pushing) URL-адреса каждой посещаемой страницы на стек и выталкивания (popping) ее со стека при щелчке по кнопке "Назад".

Стеки LIFO встречаются и в реальной жизни. Тот, кто последний сдает свой багаж в самолет, обычно первым получает его после приземления, поскольку очередность разгрузки багажа обратно очередности его погрузки. Тот пострел, который первым сдал свой багаж, обречен дольше всех ждать его на конвейере после посадки самолета. Стек типа "первым пришел - первым и уйдешь" (first-in-first-out, FIFO) обеспечивает большее равноправие. Он действует так, чтобы первым обслужить того, кто пришел первым. Стек FIFO - это как очередь в местном банке. Вместо того, чтобы взять последний элемент массива, стек FIFO в качестве очередного элемента обрабатывает первый элемент массива. Затем он удаляет первый элемент, и все остальные элементы "сдвигаются вверх", так же как вы передвигаетесь вперед в очереди, когда "удаляется тот, кто стоял перед вами (т.е. он уходит, потому что его обслужили или он устал ждать). Поэтому слово push обычно подразумевает, что используется стек типа LIFO, в то время как append подразумевает, что используется стек типа FIFO. В любом случае элементы добавляются в "конец" стека. Разница заключается в том, с какого конца массива берется элемент для очередной операции.
^

11.7.3.2. Метод unshift( )


Метод unshift( ) сходен с методом push( ), но элементы (один или несколько) добавляются в начало массива, проталкивая дальше все уже существующие элементы (т.е. индексы существующих элементов увеличиваются, чтобы дать место новым элементам в начале массива). Синтаксис метода unshift( ) следует тому же стилю, что и все методы массивов:

arrayName.unshift(item1, item2,...itemN);

где item1, item2,...itemN составляют разделенный запятыми список элементов, добавляемых в начало массива в качестве новых элементов. Note that multiple items are added in the order that they were supplied. Вот несколько примеров:

var flashVersions = new Array( );

flashVersions[0] = 5;

flashVersions.unshift(4); // Массив flashVersions теперь [4, 5]

flashVersions.unshift(2,3); // Массив flashVersions теперь [2, 3, 4, 5]

Метод unshift( ), как и метод push( ), возвращает новую длину увеличившегося массива.
^

11.7.3.3. Метод splice( )


Метод splice( ) может добавлять элементы в массив или удалять их из него. Обычно он используется для вставки элементов в середину массива (последующие элементы перенумеровываются, чтобы освободить пространство) или удаления элементов из середины массива (последующие элементы перенумеровываются, чтобы ликвидировать разрыв). Если метод splice( ) используется для выполнения обеих этих задач за один вызов, то в результате некоторые элементы заменяются новыми (хотя количество удаляемых и вставляемых элементов не обязательно должно совпадать). Вот синтаксис метода splice( ) :

arrayName.splice(startIndex, deleteCount, item1, item2,...itemN)

Здесь startIndex является числом, задающим индекс, с которого должно начаться удаление элементов и, возможно, вставка новых (помните, что индекс первого элемента в массивах начинается с 0). Необязательный параметр deleteCount определяет количество удаляемых элементов (включая элемент с индексом startIndex). Если deleteCount опущен, то удаляются все элементы начиная и включая startIndex. Необязательные параметры item1, item2,...itemN составляют разделяемый запятыми список элементов, добавляемых к массиву, начиная со startIndex.

Пример 11-3 демонстрирует многосторонность метода splice( ).
^

Пример 11-3. Использование метода массива splice( )


// Сделать массив...

months = new Array("January", "Friday", "April", "May", "Sunday", "Monday", "July");

// Н-да. Что-то с нашим массивом не так. Нужно его исправить.

// Сначала избавимся от "Friday"

months.splice(1,1);

// Теперь массив months стал:

// ["January", "April", "May", "Sunday", "Monday", "July"]


// Теперь добавим два месяца перед "April".

// Обратите внимание, что ничего не будет удалено (deleteCount равен 0).

months.splice(1, 0, "February", "March");

// Теперь массив months стал:

// ["January", "February", "March", "April", "May", "Sunday", "Monday", "July"]


// Наконец, удалим "Sunday" и "Monday", вставив вместо них "June"

months.splice(5, 2, "june");

// Теперь months:

// ["January", "February", "March", "April", "May", "June", "July"]


// Теперь, когда массив months исправлен, обрежем его так, чтобы в нем

// содержались месяцы только первого квартала, удалив все элементы

// с индексами, большими 3 (т.е. начиная с "April")

months.splice(3); // Теперь months стал: ["January", "February", "March"]

Другая полезная особенность метода splice( ) состоит в том, что он возвращает массив тех элементов, которые удалил. Поэтому его можно использовать для извлечения последовательности элементов из массива:

myList = ["a", "b", "c", "d"];

trace(myList.splice(1, 2)); // Теперь массив myList содержит ["a", "d"]

// Выводит: "b, c"

Если ни один элемент не был удален, splice( ) возвращает пустой массив.
^

11.7.3.4. Метод concat( )


Подобно методу push( ), метод concat( ) добавляет элементы в конец массива. Но, в отличие от push( ), метод concat( ) не изменяет массив, к которому он был применен - новый массив он только возвращает. Кроме того, метод concat( ) может "разбирать" массивы, переданные ему в качестве параметров, на отдельные элементы и объединять два массива в один новый. Вот синтаксис для метода concat( ):

origArray.concat(elementList)

Метод concat( ) добавляет элементы, содержащиеся в elementList, по одному в конец массива origArray и возвращает результат как новый массив, оставляя origArray в неприкосновенности. Обычно возвращаемый массив сохраняется в переменной. Ниже в качестве элементов, добавляемых в массив, используются обычные числа:

var list1 = new Array(11, 12, 13);

var list2 = list1.concat(14, 15); // Массив list2 стал: [11, 12, 13, 14, 15]

В следующем примере метод concat( ) используется для объединения двух массивов:

var guests = ["Panda", "Dave"];

var registeredPlayers = ["Gray", "Doomtrooper", "TRK9"];

var allUsers = registeredPlayers.concat(guests);

// Массив allUsers теперь: ["Gray", "Doomtrooper", "TRK9", "Panda", "Dave"]

Обратите внимание, что concat( ) выделил элементы в массиве guests, чего не стал бы делать метод push( ). Если выполнить такой код:

var allUsers = registeredPlayers.push(guests);

то получится следующий вложенный массив:

["Gray", "Shift", "TRK9", ["Panda", "Dave"]]

Кроме того, метод push( ) изменил бы массив registeredPlayers, чего concat( ) не делает.

Отметим, однако, что метод concat( ) не разбивает на элементы вложенные массивы (элементы, сами являющиеся массивами внутри главного массива), что можно видеть из следующего кода:

var x = [1, 2, 3];

var y = [[5, 6], [7, 8]];

var z = x.concat(y); // Результат [1, 2, 3, [5, 6], [7, 8]].

// Элементы массива y 0 и 1 не были "выровнены"
^

11.8. Удаление элементов из массива


Элементы можно удалить из массива с помощью оператора delete, уменьшив свойство массива length, или с помощью одного из встроенных методов массива.
^

11.8.1. Удаление элементов массива с помощью оператора delete


Оператор delete присваивает элементу массива значение undefined, используя следующий синтаксис:

delete arrayName[index]

где arrayName является любым массивом , а index - номер или имя элемента, значению которого требуется присвоить undefined. Честно говоря, название оператора delete (удалить) вводит в заблуждение. Метод не удаляет элемент из массива, а только присваивает ему значение undefined. Поэтому операция delete совпадает по результату с присвоением элементу значения undefined. В этом можно убедиться, проверив свойство массива length после "удаления" одного из элементов массива:

var myList = ["a", "b", "c"];

trace(myList.length); // Выводит: 3

delete myList[2];

trace(myList.length); // Снова выводит 3. Элемент с индексом 2 имеет

// значение undefined, а не "c", но продолжает существовать

Чтобы действительно удалить элементы из массива, следует использовать метод splice( ) (для удаления из середины массива) или методы shift( ) и pop( ) (для удаления из начала или конца массива соответственно). Обратите внимание, что оператор delete ведет себя по-разному со свойствами объектов и именованными элементами массива, нежели с нумерованными элементами. Применение оператора delete к свойствам и именованным элементам навсегда разрушает свойства и именованные элементы, не оставляя никаких следов.
^

11.8.2. Удаление элементов с помощью свойства массива length


Ранее свойство length было использовано для добавление элементов в массив. Можно также присвоить свойству массива length значение, меньшей текущей длины массива, чтобы удалить элементы из массива (т.е. выполнить усечение массива):

var toppings = ["pepperoni", "tomatoes", "cheese", "green pepper", "broccoli"];

toppings.length = 3;

trace(toppings); // Выводит: "pepperoni,tomatoes,cheese"

// Были отрезаны элементы 3 и 4 (последние два).
^

11.8.3. Удаление элементов с помощью методов класса Array


Существует несколько встроенных методов удаления элементов массива. Уже было показано, как с помощью метода splice( ) удалить последовательность элементов из середины массива. Методы pop( ) и shift( ) используются для удаления элементов из конца и начала массива соответственно.
^

11.8.3.1. Метод pop( )


Метод pop( ) противоположен методу push( ): он удаляет последний элемент из массива. Синтаксис метода pop( ) простой:

arrayName.pop( )

(Не знаю почему, но мне всегда кажется, что "выталкивание" массива выглядит смешно). Тем не менее, метод pop( ) уменьшает длину (length) массива на 1 и возвращает удаленный элемент. Например:

x = [56, 57, 58];

x.pop( ); // Массив x теперь [56, 57]

Как уже отмечалось, метод pop( ) часто используется в сочетании с методом push( ) в операциях со стеком LIFO. В примере 11-4 массив siteHistory используется для отслеживания перемещений пользователя по сайту. Когда пользователь переходит в новый кадр, его место нахождение добавляется в массив с помощью метода push( ). При перемещении обратно из siteHistory его предыдущее местонахождение "выталкивается" с помощью метода pop( ), и пользователь направляется туда. Пример 11-4 можно загрузить из сетевого Хранилища кодов.
^

Пример 11-4. Кнопка "Назад" с буфером памяти


// КОД В КАДРЕ №1

stop( );

var siteHistory = new Array( );


function goto(theLabel) {

// Если мы еще не в требуемом кадре...

if (theLabel != siteHistory[siteHistory.length - 1]) {

// ...добавляем запрос в буфер и переходим в нужный кадр

siteHistory.push(theLabel);

gotoAndStop(siteHistory[siteHistory.length - 1]);

}

trace(siteHistory);

}


function goBack( ) {

// Удаляем последний элемент в буфере

siteHistory.pop( );

// Если в буфере еще что-то осталось...

if (siteHistory.length > 0) {

// ...переходим в самый последний кадр

gotoAndStop(siteHistory[siteHistory.length - 1]);

} else {

// ...иначе идем домой

gotoAndStop("home");

}

trace(siteHistory);

}


// КОД В КНОПКЕ НАВИГАЦИИ

on (release) {

goto("gallery");

}


// КОД В КНОПКЕ "Назад"

on (release) {

goBack( );

}
^

11.8.3.2. Метод shift( )


Помните метод unshift( ), применявшийся для добавления элемента в начало массива? Познакомьтесь с его парой - методом shift( ), который удаляет элемент из начала массива:

arrayName.shift( )

Не так смешно, как использование метода по имени pop. И вполне прилично.

Как и метод pop( ), метод shift( ) возвращает значение удаленного им элемента. Оставшиеся элементы перемещаются вверх в начало массива с сохранением порядка. Например:

var sports = ["hackey sack", "snowboarding", "inline skating"];

sports.shift( ); // Теперь ["snowboarding", "inline skating"]

sports.shift( ); // А теперь ["inline skating"]

Так как метод shift( ) действительно удаляет элемент, этот метод полезнее применять для удаления первого элемента массива, чем оператор delete. Можно так же применять метод shift( ) для ограничения диапазона списка. Например, мы рассчитываем частоту смены кадров (fps) Flash-ролика. После вывода каждого кадра мы отправляем текущее время в массив с помощью метода push( ). Чтобы ограничить размер массива последними 10-ю значениями времени, при необходимости выполняем метод shift( ) для самого старого отсчета. Чтобы найти скорость воспроизведения Flash-ролика, усредняем значения, хранящиеся в массиве. Этот способ продемонстрирован в примере 11-5.
^

Пример 11-5. Расчет скорости воспроизведения Flash-ролика


// Создать массив значений времени в мувиклипе

onClipEvent(load) {

var elapsedTime = new Array( );

}


// Используем событие мувиклипа enterFrame для определения времени после каждого кадра

onClipEvent(enterFrame) {

// Добавляем текущее время в массив elapsedTime

elapsedTime.push(getTimer( ));


// Если чисел достаточно для вычисления среднего...

if (elapsedTime.length > 10) {

// ...удалить из elapsedTime самый старый отсчет

elapsedTime.shift( );


// Вычислить среднее число миллисекунд на кадр

elapsedAverage = (elapsedTime[elapsedTime.length - 1] - elapsedTime[0]) / elapsedTime.length;


// Число кадров в секунду: делим 1 на среднее время воспроизведения

fps = 1000 / elapsedAverage;

trace("current fps " + fps);

}

}
^

11.8.3.3. Метод splice( )


Ранее отмечалось, что метод splice( ) может как удалять элементы из массива, так и добавлять их. Так как метод splice( ) уже был подробно рассмотрен, не будем здесь повторно возвращаться к его изучению. Однако в данном контексте специально продемонстрируем его возможности по удалению элементов:

var x = ["a", "b", "c", "d", "e", "f"];

x.splice(1,3); // Удаляет элементы 1, 2 и 3, сохраняя ["a", "e", "f"]

x.splice(1); // Удаляет элементы с 1 и до конца массива, оставляя ["a"]

^

11.9. Общие средства обработки массивов


Ранее было показано, как применять методы массивов для удаления элементов из массивов и добавления их. ActionScript предлагает также встроенные методы для переупорядочения и сортировки элементов, преобразование элементов массивов в строки и извлечения массивов из других массивов.
^

11.9.1. Метод reverse( )


Метод reverse( ), в соответствии со своим названием, изменяет порядок элементов в массиве на противоположный. Вот его синтаксис:

arrayName.reverse( )

А здесь результат, получаемый с его помощью:

var x = [1, 2, 3, 4];

x.reverse( );

trace(x); // Выводит: "4,3,2,1"

Обычно метод reverse( ) применяется для изменения порядка сортировки в списке. Например, если есть список товаров, отсортированный по возрастанию цены, можно вывести его в порядке от самого дешевого к самому дорогому, а можно изменить порядок на обратный и вывести от самого дорогого к самому дешевому.

^ Упражнение для самостоятельной работы:

Попробуйте написать собственную функцию для инверсии порядка элементов в массиве. Это труднее, чем кажется: скорее всего использование встроенного метода reverse( ) окажет существенную помощь.
^

11.9.2. Метод sort( )


Метод sort( ) переупорядочивает последовательность элементов массива в соответствии с любым заданным правилом. Если правило не задано, то метод sort( ) по умолчанию размещает элементы, грубо говоря, в алфавитном порядке. Отсортировать массив по алфавиту действительно просто:

arrayName.sort( )

При вызове метода массива sort( ) без параметров его элементы временно преобразуются в строки и сортируются соответственно кодовым позициям символов, приведенным в приложении B "Набор символов Latin 1 и коды клавиш" (важные детали можно также найти в главе 4 "Элементарные типы данных" в разделе "Сравнение по порядку символов и алфавиту"):

// Это работает как и ожидалось...

var animals = ["zebra", "ape"];

animals.sort( );

trace(animals); // Выводит: "ape,zebra"

// Здорово! Какой удобный маленький код.


// Осторожно, порядок сортировки не строго алфавитный. Заглавная

// буква "Z" в слове "Zebra" идет раньше строчной "a" в слове "ape".

var animals = ["Zebra", "ape"];

animals.sort( );

trace(animals); // Выводит: "Zebra,ape". Увы. См. приложение B "Набор символов Latin 1 и коды клавиш"

Можно также использовать метод sort( ) для организации элементов массива в соответствии с собственным правилом. Это более сложный в работе прием, но весьма мощный. Сначала нужно создать функцию сравнения (compare function), определяющую, как интерпретатор должен сортировать любые два элемента массива. Затем эта функция передается методу sort( ) при его вызове, например:

arrayName.sort(compareFunction)

где compareFunction является именем функции, сообщающей интерпретатору, как принимать решение при сортировке.

Чтобы построить функцию сравнения, нужно создать новую функцию, которая принимает два параметра (представляющие любые два элемента массива). В теле функции нужным образом определяется, какой элемент массива должен появится раньше в списке элементов после сортировки методом sort( ). Если нужно, чтобы первый элемент появился прежде второго, функция должна возвратить отрицательное число. Если нужно, чтобы первый элемент появился после второго, функция должна возвратить положительное число. Если нужно оставить элементы в том же положении, функция должна возвратить 0. На псевдокоде этот подход в общем выглядит так:

function compareElements (element1, element2) {

if (условие при котором element1 должен появиться раньше element2) {

return -1;

} else if (условие при котором element1 должен появиться после element2) {

return 1;

} else {

return 0; // Оставить элементы в покое

}

}

Например, чтобы отсортировать элементы массива по возрастанию числовых значений, можно использовать такую функцию:

function sortAscendingNumbers (element1, element2) {

if (element1 < element2) {

return -1;

} else if (element1 > element2) {

return 1;

} else {

return 0; // Элементы равны

}

}


// Подготовив функцию сравнения, опробуем ее

var x = [34, 55, 33, 1, 100];

x.sort(sortAscendingNumbers);

trace(x); // Выводит: "1,33,34,55,100"

Функции сравнения чисел можно в действительности формулировать значительно более кратко. Предыдущую функцию sortAscendingNumbers( ) можно записать так:

function sortAscendingNumbers (element1, element2) {

return element1 - element2;

}

В оптимизированной версии отрицательное число возвращается, если element1 меньше element2, положительное число возвращается, если element1 больше element2, а 0 возвращается, если оба числа равны. Теперь это более элегантно! А вот версия сортировки по убыванию:

function sortDescendingNumbers (element1, element2) {

return element2 - element1;

}

В примере 11-6 показана функция сравнения, которая немного изменяет поведение метода sort( ) так, чтобы заглавные и строчные буквы сортировались безотносительно к регистру.
^

Пример 11-6. Алфавитная сортировка массива без учета регистра


var animals = ["Zebra", "ape"];


function sortAscendingAlpha (element1, element2) {

return (element2.toLowerCase() < element1.toLowerCase( ));

}


animals.sort(sortAscendingAlpha);

trace(animals); // Выводит: "ape,Zebra"

Конечно, в сравнении не обязательно должны участвовать только простые строки и числа. Сделаем сортировку массива мувиклипов в убывающем порядке соответственно их площади в пикселях:

var clips = [square1, square2, square3];


function sortByClipArea (clip1, clip2) {

clip1area = clip1._width * clip1._height;

clip2area = clip2._width * clip2._height

return clip1area - clip2area;

}


clips.sort(sortByClipArea);

Это тонкий механизм сортировки!
^

11.9.3. Метод slice( )


Будучи своего рода подмножеством метода splice( ), метод slice( ) возвращает из массива ряд элементов. В отличие от splice( ), метод slice( ) только возвращает элементы. Он создает новый массив и не оказывает воздействия на массив, для которого был вызван. Синтаксис метода slice( ) следующий:

origArray.slice(startIndex, endIndex)

где startIndex задает первый извлекаемый элемент, а endIndex указывает элемент следующий за последним извлекаемым элементом . Метод slice( ) возвращает новый массив, содержащий копию последовательности элементов начиная с origArray[startIndex] по origArray[endIndex - 1]. Если параметр endIndex опущен, то по умолчанию принимается значение origArray.length и возвращаемый массив содержит элементы начиная с origArray[startIndex] по origArray[origArray.length-1]. Вот несколько примеров:

var myList = ["a", "b", "c", "d", "e", "f"];

myList.slice(1, 3); // Возвращает ["b", "c"], а не ["b", "c", "d"]

myList.slice(2); // Возвращает ["c", "d", "e", "f"]
^

11.9.4. Метод join( )


Метод join( ) можно применять для создания строки, изображающей все элементы массива. Метод join( ) начинает работу с преобразования каждогоэлемента указанного массива в строку. Пустые элементы преобразуются в пустые строки (""). Затем метод join( ) конкатенирует все строки в одну длинную строку, разделяя их символом (или последовательностью символов), называемым разделителем (delimiter). Наконец, join( ) возвращает созданную им строку. Синтаксис метода join( ) такой:

arrayName.join(delimiter)

где delimiter является строкой, служащей для разделения преобразованных элементов массива arrayName. Если параметр delimiter не задан, по умолчанию используется запятая. Действие метода join( ) легче всего понять на примере:

var siteSections = ["animation", "short films", "games"];


// Присвоить массиву siteTitle значение "animation>> short films>> games"

var siteTitle = siteSections.join(">> ");


// Присвоить массиву siteTitle значение "animation:short films:games"

var siteTitle = siteSections.join(":");

Обратите внимание, что метод join( ) не изменяет массив, к которому применен, а возвращает строку, получающуюся из этого массива.

При вызове без параметра, метод join( ) ведет себя в точности как метод toString( ). Так как метод toString( ) не добавляет пробела после запятой, используемой им для разделения элементов, то для получения красиво форматированной выдачи применение метода join( ) более удобно:

var x = [1, 2, 3];

trace(x.join(", ")); // Выводит: "1, 2, 3" вместо "1,2,3" в toString()

Метод join( ) может дать неожиданный результат, если применить его к массиву, содержащему элементы, которые сами являются массивами. Поскольку метод join( ) преобразует элементы в строки, а массивы преобразуются в строки с помощью метода toString( ), то вложенные массивы преобразуются в строки с разделителем-запятой, а не тем разделителем, который был передан join( ) в качестве параметра. Иными словами, разделитель, переданный join( ), не действует во вложенных массивах. Например:

var x = [1, [2, 3, 4], 5];

x.join("|"); // Возвращает "1|2,3,4|5"
^

11.9.5. Метод toString( )


Как будет показано в главе 12 "Объекты и классы", метод toString( ) является универсальным для некоторых объектов, возвращающим строковое представление любого объекта, с которым он вызывается. В случае с объектом Array метод toString( ) возвращает список элементов массива, преобразованных в строки и разделенных запятыми. Метод toString( ) можно вызвать явно:

arrayName.toString( )

Но обычно метод toString( ) не используется явным образом, а вызывается автоматически, когда массив arrayName используется в строковом контексте. Например, когда мы пишем trace (arrayName), в окне Output появляется список значений массива, разделенных запятыми. Команда trace(arrayName) эквивалентна trace(arrayName.toString( )). Метод toString( ) часто удобно использовать во время отладки, когда требуется быстро взглянуть на элементы массива, не форматируя их. Например:

var sites = ["www.moock.org", "www.macromedia.com", "www.oreilly.com"];


// Вывести значения массива в динамическое текстовое поле

debugOutput = "the sites array is " + sites.toString( );


// Тоже самое в окно Output

trace ("the sites array is " + sites.toString( ));
^

11.9.6. Массивы как объекты


После прочтения главы 12 "Объекты и классы" вы должны рассматривать массивы как тип объекта, а именно, как экземпляры класса Array. Как и к другим объектам, к массивам можно добавлять свойства. При добавлении к массиву именованных элементов в действительности происходит просто добавление свойств к объекту Array. Однако, как было отмечено выше, для использования встроенных методов класса Array нужно работать с нумерованными элементами.

В главе 9 "Функции" был рассмотрен полезный гибрид "массив-объект" - объект arguments, в котором нумерованные элементы сочетались со свойствами. (Вспомните, что у объекта arguments есть свойство callee, и в нем также хранится массив параметров в виде массива элементов.) Теперь можно понять, что все массивы хранят: пронумерованный список элементов, встроенное свойство length, а также любые свойства, добавленные пользователем.
^

11.10. Многомерные массивы


До сих пор изложение было ограничено одномерными (one-dimensional) массивами, которые похожи на одну строку (или один столбец) таблицы. Но что делать, если требуется создать эквивалент таблицы, содержащий и строки, и столбцы? Необходимо второе измерение. ActionScript естественным образом поддерживает только одномерные массивы, но можно моделировать многомерные массивы, создавая массивы внутри массивов. Это означает, что можно создавать массивы, элементы которых сами являются массивами (иногда называемыми вложенными массивами).

Простейшим типом многомерного массива является двумерный массив, в котором элементы мысленно организованы в сетку строк и столбцов: строки представляют первое измерение массива, а столбцы - второе.

Посмотрим, как действуют двумерные массивы, на практическом примере. Допустим, что обрабатывается заказ, содержащий три наименования товара, их количество и цену. Требуется моделировать таблицу из трех строк (по одной для каждого наименования) и двух столбцов (один для количества, другой для цены). Создадим для каждой строки отдельный массив:

var row1 = [6, 2.99]; // Количество 6, цена 2.99

var row2 = [4, 9.99]; // Количество 4, цена 9.99

var row3 = [1, 59.99]; // Количество 1, цена 59.99

Затем поместим строки в массив-контейнер с именем spreadsheet:

var spreadsheet = [row1, row2, row3];

Теперь можно подсчитать суммарную стоимость заказа, перемножив в каждой строке количество и цену, и сложив произведения вместе. Обращение к элементам двумерного массива производится с помощью двух индексов (один для строки, другой для столбца). Выражение spreadsheet[0], например, представляет массив из двух столбцов первой строки. Поэтому для доступа ко второму столбцу первой строки таблицы spreadsheet используется spreadsheet[0][1]:

// Создать переменную для хранения суммарной стоимости заказа

var total;


// Теперь найти стоимость заказа. Для каждой строки

// перемножить столбцы и прибавить результат к total.

for (var i = 0; i < spreadsheet.length; i++) {

total += spreadsheet[i][0] * spreadsheet[i][1];

}


trace(total); // Выводит: 117.89

За исключением хранения и доступа, многомерные массивы ведут себя как и обычные массивы. Для работы с данными, хранящиеся в многомерных массивах, с успехом можно использовать все методы класса Array.
^

11.11. Вопросник с вариантами выбора: подход № 3


В примере 9-10 был переиначен вопросник с вариантами выбора из примера 1-1. Тогда мы усовершенствовали код, создав многократно используемые централизованные функции. После изучения массивов можно вернуться к вопроснику и сделать несколько усовершенствований. На этот раз посмотрим, как с помощью массивов хранить ответы пользователя и правильные ответы на каждый вопрос, что сделает код более кратким, разборчивым и легко расширяемым, если нужно будет добавить новые вопросы.

Все изменения, которые нужно произвести в вопроснике, будут теперь касаться только слоя scripts кадра №1, где расположен основной код вопросника. Как предыдущую, так и данную обновленную версию вопросника можно найти в сетевом Хранилище кода. Чтобы обнаружить, какие изменения будут сделаны на этот раз, прочтите код примера 11-7, уделив особое внимание комментариям.
^

Пример 11-7. Вопросник с вариантами выбора, версия 3


stop( );

// *** Инициализация переменных главной шкалы времени

var displayTotal; // Текстовое поле для вывода результата

var numQuestions = 2; // Количество вопросов в вопроснике

var totalCorrect = 0; // Переменная для правильных ответов

var userAnswers = new Array( ); // Массив ответов пользователя

var correctAnswers = [3, 2]; // Массив правильных ответов

// Обратите внимание, что больше не нужны два длинных списка переменных с

// именами q1answer, q2answer и т.д., и correctAnswer1, correctAnswer2...

// Теперь нам удобно хранить эти данные в массиве


// *** Функция для регистрации ответов пользователя

function answer (choice) {

// Так как теперь можно проверить, сколько ответов дано, с помощью

// свойства length массива userAnswers, нет нужды вручную отслеживать

// эти данные с помощью свойства answer.currentAnswer. Заметим также, что

// мы избавились от неуклюжего предложения set, которое ранее присваивало

// ответ пользователя динамически именованной переменной


// Поместим ответ пользователя в наш массив

userAnswers.push(choice);

// Двигайся, детка

if ((userAnswers.length) == numQuestions) {

gotoAndStop ("quizEnd");

} else {

gotoAndStop ("q"+ (userAnswers.length + 1));

}

}


// *** Функция для подсчета результата пользователя

function gradeUser( ) {

// Подсчитать число правильных ответов. Наше сравнение элементов

// userAnswer/correctAnswer гораздо аккуратнее змеиной ямы с

// функциями eval( ), использовавшимися для той же цели в прежней версии

for (var i = 0; i < userAnswers.length; i++) {

if (userAnswers[i] == correctAnswers[i]) {

totalCorrect++;

}

}

// Вывести результат пользователя в динамическом текстовом поле

displayTotal = totalCorrect;

}

^ Упражнение для самостоятельной работы:

Попробуйте обобщить версию вопросника, использующую массивы, воспользовавшись correctAnswers.length вместо переменной numQuestions.

1   2   3   4   5   6   7   8   9   ...   82



Скачать файл (21152.1 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru