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:
Загрузка...
^

Глава 15. Более сложные темы

Содержание:


Копирование, сравнение и передача данных
Поразрядное программирование
Более сложные вопросы областей видимости функций
Типы данных movieclip
Вперед!

В данной главе собран ряд более сложных примеров и вопросов программирования на ActionScript.
^

15.1. Копирование, сравнение и передача данных


Существует три основных способа обращения с данными. Можно копировать (copy) данные (например, присваивать значение переменной x переменной y), можно сравнивать (compare) данные (например, проверять равенство переменных x и y) и можно передавать (pass) данные (например, передавать переменную в функцию в качестве параметра). Значения элементарных типов данных копируются, сравниваются и передаются совсем иначе, чем значения составных типов данных. Когда элементарные типы данных копируются в переменную, эта переменная получает свой собственный уникальный экземпляр данных, не зависимо хранящийся в памяти. Поэтому следующие строки кода приводят к тому, что строка "Dave" сохраняется в памяти дважды - один раз в пространстве памяти name1, и второй раз в пространстве памяти для name2:

name1 = "Dave";

name2 = name1;

Мы говорим, что элементарные типы данных копируются по значению (by value), потому что буквальное значение данных сохраняется в пространстве памяти, выделенном для переменной. Напротив, когда в переменную копируются составные типы данных, то в памяти, отведенной для переменной, сохраняется только ссылка на эти данные, а не фактические данные. Эта ссылка сообщает интерпретатору, где хранятся фактические данные (т.е. их адрес в памяти). Когда переменная, содержащая составные типы данных, копируется в другую переменную, то копируется ссылка (часто называемая указателем (pointer)), а не сами данные. Поэтому говорят, что составные типы данных копируются по ссылке (by reference).

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

Давайте посмотрим, какое влияние это оказывает на практическое приложение. Когда две переменные ссылаются на одни и те же элементарные типы данных, каждая переменная получает свой собственный экземпляр этих данных. Присвоим переменной x значение 12:

var x = 12;

Теперь присвоим значение x новой переменной y:

var y = x;

Как можно догадаться, теперь y равен 12. Но y имеет свою собственную копию значения 12, отличную от копии в x. Если изменить значение x, на значении y это не отразится:

x = 15;

trace(x); // Выводит: 15

trace(y); // Выводит: 12

Значение y не изменилось в результате изменения x, потому что при присвоении x переменной y последняя получила собственный экземпляр числа 12 (т.е. элементарных данных, содержащихся в x).

Теперь давайте попробуем то же самое осуществить с составными типами данных. Создадим новый массив из трех элементов и присвоим его переменной x:

var x = ["first element", 234, 18.5];

Теперь, как и ранее, присвоим значение x переменной y:

var y = x;

Теперь значение y такое же, как и значение x. Но что является значением x ? Запомните, что, поскольку x ссылается на массив, являющийся составным элементом данных, значение x является не буквально массивом ["first element", 234, 18.5], а просто ссылкой на этот элемент данных. Поэтому, присваивая x переменной y, мы копируем в y не сам массив, а ссылку, содержащуюся в x и указывающую на этот массив. Поэтому как x, так и y указывают на один и тот же массив, содержащийся где-то в памяти.

Если изменить этот массив через переменную x, например так:

x[0] = "1st element";

то изменение отразится и на y :

trace(y[0]); // Выводит: "1st element"

Аналогично, если изменить массив через y, то изменение можно увидеть и через x :

y[1] = "second element";

trace (x[1]); // Выводит: "second element"

Эту связь можно разорвать с помощью метода slice( ), которая создает совершенно новый массив:

var x = ["first element", 234, 18.5];

// Копировать каждый элемент x в новый массив, хранящийся y

var y = x.slice(0);

y[0] = "hi there";


trace(x[0]); // Выводит: "first element" (а не "hi there")

trace(y[0]); // Выводит: "hi there" (а не "first element")

Расширим этот пример и посмотрим, как сравниваются элементарные и составные значения данных. Присвоим x и y одинаковое элементарное значение и затем сравним обе переменные:

x = 10;

y = 10;

trace(x == y); // Выводит: true

Поскольку x и y содержат элементарные типы данных, они сравниваются по значению. При сравнении по значению данные сравниваются буквально. Число 10 в x считается равным числу 10 в y, потому что эти числа составлены из одинаковых байтов.

Теперь присвоим x и y идентичные варианты одинаковых составных данных и снова сравним две переменные:

x = [10, "hi", 5];

y = [10, "hi", 5];

trace(x == y); // Выводит: false

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

x = y;

trace(x == y); // Выводит: true

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

Элементарные и составные типы данных по-разному обрабатываются и при передаче в функции, о чем говорилось в разделе 9.8.3 "Элементарные и составные значения параметров" главы 9 "Функции". Самое важное, что при передаче элементарной переменной в качестве параметра в функцию любые изменения этого элемента данных, произведенные функцией, не отражаются на исходной переменной. Однако при передаче составной переменной изменения в функции влияют на исходную переменную. То есть, если передать в функцию целочисленную переменную x, то изменения, производимые с ней в функции, не влияют на ее первоначальное значение. Но если передать в функцию массив y, любые изменения этого массива внутри функции изменят исходное значение y вне функции, потому что изменения в массиве оказывают действия на данные, на которые указывает y .
^

15.2. Поразрядное программирование


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

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

Двоичное число хранится в виде последовательности нулей и единиц, представляющих число в системе исчисления по основанию 2 (т.е. в двоичной системе). Каждая цифра числа представляет собой основание числовой системы, возведенное в некоторую степень. Двоичные числа используют в качестве основания 2, поэтому первые четыре цифры двоичного числа представляют с права налево, 1 (20), 2 (21), 4 (22) и 8 (23). Вот несколько примеров двоичных чисел с разъяснением того, как по значениям их цифр можно вычислить эквивалентное число в десятичной системе счисления (десятичное число):

1 // Число 1 в десятичной системе: (1 x 1) = 1

10 // Число 2 в десятичной системе: (1 x 2) + (0 x 1) = 2

11 // Число 3 в десятичной системе: (1 x 2) + (1 x 1) = 3

100 // Число 4 в десятичной системе: (1 x 4) + (0 x 2) + (0 x 1) = 4

1000 // Число 8 в десятичной системе: (1 x 8) + (0 x 4) + (0 x 2) + (0 x 1) = 8

1001 // Число 9 в десятичной системе: (1 x 8) + (0 x 4) + (0 x 2) + (1 x 1) = 9

В двоичных числах цифры, о которых мы говорим, называют битами (bits, от "binary digit"). Например, четырехбитовое число состоит из четырех цифр (каждая из которых может быть нулем или единицей). Самый правый бит считается битом 0, слева от него находится бит 1 и т.д. Ниже приведено 8-битовое число с единицей в битах 0, 6 и 7 (номера бит проставлены над числами):

бит: 76543210

11000001

Как и во всех системах исчисления, наибольшее значение для каждой цифры на единицу меньше основания (так же известного, как radix). Например, в числах десятичной системы счисления (десятичных) наибольшей цифрой является 9. Поскольку мы используем в качестве основания 2, каждая двоичная цифра должна быть 0 или 1. Как известно, числа 1 и 0 эквивалентны булевым значениям true и false, поэтому очень удобно использовать двоичные числа как последовательность ключей, находящихся в положении on (включено) и off (выключено)! Как раз это позволяют делать поразрядные операторы.

О бите, имеющем значение 1, говорят, что он установлен (set, т.е. включен или имеет значение true). О бите, имеющем значение 0, говорят, что он сброшен (cleared, т.е. выключен или имеет значение false). Биты иногда представляют как флажок (flag) или ключ (switch), имея в виду, что они указывают на нечто, способное находится в одном из двух состояний (включено/выключено или true/false).

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

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

Можно хранить опции оборудования автомобиля в четырех отдельных булевых переменных, например:

var hasAirCon = true;

var hasCD = true;

var hasSunRoof = true;

var hasLeather = true;

По существу, есть четыре ключа (флажка) - по одному для каждого дополнительного компонента оборудования автомобиля, для каждого из которых нужна переменная. Все прекрасно, но это означает, что необходимы четыре переменные в памяти и четыре поля в базе данных с настройками пользователя на сервере. Если же записать выбор дополнительного оборудования в виде отдельных двоичных цифр, можно сохранить все четыре опции в одном 4-битовом числе: бит 0 (цифра 1) для кондиционера, бит 1 (цифра 2) для CD-плеера, бит 2 (цифра 4) для люка и бит 3 (цифра 8) для кожаных сидений. Вот несколько примеров комплектации автомобиля, показывающих, как одно число может представлять любую комбинацию из четырех опций:

var options;

options = 1 // 1 = 0001 (двоичное); бит 0 включен: только кондиционер

options = 2 // 2 = 0010 (двоичное); бит 1 включен: только CD-плеер

options = 4 // 4 = 0100 (двоичное); бит 2 включен: только люк

options = 8 // 8 = 1000 (двоичное); бит 3 включен: только кожаный салон


// А теперь комбинированные опции

options = 5 // 5 = 0101 (двоичное): кондиционер (1) и люк (4)

options = 10 // 10 = 1010 (двоичное): CD-плеер (2) и кожаный салон (8)

options = 15 // 15 = 1111 (двоичное): полный пакет - крошка!

Если нужно добавить или удалить опции, прибавляем или вычитаем значение соответствующего бита:

var options = 0; // Сначала ничего дополнительного

options += 4; // Добавить люк (options = 4, или 0100)

options += 1; // Добавить кондиционер (options = 5, или 0101)

options += 2; // Добавить CD-плеер (options = 7, или 0111)

options -= 4; // Удалить люк (options = 3, или 0011)

options += 8; // Добавить кожаный салон (options = 11, или 1011)

Теперь мы умеем хранить несколько опций в виде последовательности битов в одном числе. Как получить значение этих битов для расчета стоимости автомобиля? Нужно использовать поразрядные операторы. Сначала рассмотрим все операторы, а затем вернемся к этому примеру с машинами.
^

15.2.1. Поразрядное "И"


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

Поразрядное выражение "И" имеет вид:

operand1 & operand2

Операндами поразрядного "И" могут быть любые числа, но перед операцией они преобразуются в 32-разрядные двоичные числа. Если у операнда есть дробная часть (например, 2.5), она отбрасывается.

Обратите внимание на то, что поразрядный оператор "И" используется одним символом & и действует над отдельными битами в операндах, в то время как логический оператор "И", обсуждавшийся в главе 5 "Операторы", обозначается двумя символами && и рассматривает каждый операнд как единое целое.

Поразрядное "И" возвращает число, значение которого определяется в результате сравнения отдельных битов в числовых операндах operand1 и operand2. Если некоторый бит в обоих операндах содержит единицу, то в результате соответствующему биту будет тоже присвоена единица, в противном случае этот бит будет установлен в 0.

Операции поразрядного "И" легче всего изобразить, расположив двоичные представления десятичных операндов, вертикально друг под другом и выровняв колонки разрядов. В таком представлении легко найти биты операндов, в обоих из которых содержится 1.

В данном примере в обоих операндах бит 2 (третий бит справа) содержит 1 в обоих операндах, и поэтому ему в результате присваивается 1. Результаты остальных битов устанавливаются в 0:

1111

& 0100

------

0100

В следующем примере биты 0 и 3 равны 1 в обоих операндах, и поэтому устанавливаются в результате в 1. Биты 1 и 2 устанавливаются в результате в 0:

1101

& 1011

------

1001

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

15 & 4 // Результат = 4

13 & 11 // Результат = 9

На практике оператор поразрядного "И" используется для проверки установки отдельного флажка или группы флажков (т.е. битов) в true или false.

В следующем примере проверяется, установлен ли бит 2 (имеющий значение 4) в true:

if (x & 4) {

// Сделать что-то

}

Можно проверить, установлен ли хотя бы один из битов 2 или 3 (имеющий значение 8) в true:

if (x & (4|8)) {

// Сделать что-то

}

Обратите внимание, что для проверки установки бита 2 или бита 3 используется оператор |, который будет обсуждаться ниже. Для проверки того, что оба бита - 2 и 3 заданы (установлены), можно воспользоваться следующим кодом:

if (x & (4|8) == (4|8)) {

// Сделать что-то

}

Оператор поразрядного "И" используется также для присваивания отдельным битам числа значения false. Смотрите раздел 15.2.4 Поразрядное "НЕ" ниже в этой главе.
^

15.2.2. Поразрядное "ИЛИ"


Оператор поразрядное "ИЛИ" (|) объединяет биты двух чисел, выполняя операцию логического "ИЛИ" над каждым битом операндов. Подобно поразрядному "И", поразрядное "ИЛИ" возвращает результат комбинирования в виде числа. Выражение поразрядного "ИЛИ" имеет вид:

operand1 | operand2

Операнды могут быть любыми числами, но перед операцией преобразуются в 32-разрядные двоичные числа. Если у операнда есть дробная часть, она отбрасывается.

Обратите внимание на то, что поразрядный оператор "ИЛИ" обозначается одним символом | и действует над отдельными битами в операндах, в то время как логический оператор "ИЛИ", обсуждавшийся в главе 5 "Операторы", обозначается двумя символами || и рассматривает каждый операнд как единое целое.

Каждый бит результата получается в результате применения логического "ИЛИ" к битам двух операндов. Поэтому, если бит установлен в 1 в одном (или обоих) из operand1 или operand2, то в результате этот бит будет установлен в 1. Сравните следующие псевдопримеры с приведенными выше для поразрядного оператора "И".

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

1101

| 0100

------

1101

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

1101

| 1011

------

1111

В реальном коде это записывается так:

13 | 4 // Результат = 13

13 | 11 // Результат = 15

На практике оператор поразрядного "ИЛИ" часто используется для объединения нескольких чисел, представляющих отдельные опции, в одно числовое значение, которое представляет все опции системы. Например, следующий код объединяет бит 2 (значение 4) с битом 3 (значение 8):

options = 4 | 8;

Оператор поразрядного "ИЛИ" используется также для установки в true некоторой опции в существующем значении. Следующий пример устанавливает опцию, представляемую битом 3 (значение 8) в true. Если значение в бите 3 уже true, оно остается в неприкосновенности:

options = options | 8;

Можно также одновременно задать несколько битов:

options = options | 4 | 8;
^

15.2.3. Поразрядное "исключающее ИЛИ" (XOR)


Начинаем официально изучать странные символы пунктуации, используемые в качестве операторов. Оператором поразрядного "исключающее ИЛИ" (XOR, от eXclusive OR) служит знак вставки (его еще называют "крышка") ^ (на большинстве клавиатур вводится как Shift + 6). Выражение поразрядного "исключающего ИЛИ" имеет вид:

operand1 ^ operand2

Операнды могут быть любыми числами, но перед операцией преобразовываются в 32-разрядные двоичные числа. Если у операнда есть дробная часть, она отбрасывается.

Оператор "исключающее ИЛИ" отличается от поразрядного оператора "ИЛИ" тем, что для каждого разряда, содержащего 1 в обоих операндах, в результате будет 0, а не 1. Иными словами, результат "исключающего ИЛИ" содержит 0 для всех битов, которые одинаковы в обоих операндах, и содержит 1 для всех битов, различных в двух операндах.

В следующем примере биты 0 и 3 совпадают в обоих операндах, поэтому в результате эти биты устанавливаются в 0. Биты 1 и 2 различны в операндах, поэтому в результате они устанавливаются в 1:

1011

^ 1101

------

0110

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

0010

^ 0010

------

0000

В следующем примере биты 0, 2 и 3 различны в двух операндах, поэтому в результате они устанавливаются в 1. Бит 1 одинаков в обоих операндах, поэтому в результате он устанавливается в 0:

0110

^ 1011

------

1101

В переводе на десятичные числа предшествующие примеры становятся такими:

11 ^ 13 // Результат = 6

2 ^ 2 // Результат = 0

6 ^ 11 // Результат = 13

Поразрядный оператор "исключающее ИЛИ" обычно используется для опций переключателей между 1 и 0 (true и false). Чтобы переключить опцию, задаваемую битом 2 (значение которого 4), можно использовать следующий код:

options = options ^ 4;
^

15.2.4. Поразрядное "НЕ"


В отличие от поразрядных "И", "ИЛИ" и "исключающего ИЛИ", получаемых результирующее число из двух других, поразрядное "НЕ" изменяет биты одного числа. Он использует символ "тильда" (~), находящийся на большинстве клавиатур в левом верхнем углу, и имеет вид:

operand

Операнд может быть любым числом, но перед операцией он преобразуется в 32-разрядное двоичное число. Если у операнда есть дробная часть, она отбрасывается.

Поразрядное "НЕ" просто инвертирует биты своего операнда. Например:

00000000000000000000000000000010

// Результат = 11111111111111111111111111111101


11111111111111111111111111111010

// Результат = 00000000000000000000000000000101

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

2 // Результат -3. См. разъяснения ниже.

-6 // Результат 5. См. Разъяснения ниже.

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

-10 // Поменять -10 на 10, затем вычесть 1. Результат = 9.

Оператор поразрядного "НЕ" обычно используется вместе с оператором поразрядного "И" для сброса определенных битов (т.е. присваивания им 0). Например, для сброса бита 2 можно выполнить:

options = options & ~4;

Выражение ~4 возвращает 32-разрядное целое, состоящее из сплошных единиц, кроме 0 в разряде 2. Поразрядное "И" этого числа с переменной options сбрасывает бит 2 и оставляет все остальные биты неизменными. Более кратко предыдущий пример можно записать так:

options &= ~4;

Таким же способом можно одновременно сбросить несколько битов. Вот, например, как сбросить биты 2 и 3:

options &= ~(4 | 8);
^

15.2.5. Поразрядные операторы сдвига


Мы уже видели, что поразрядное программирование рассматривает двоичные числа как последовательность ключей (switches). Часто оказывается удобно перемещать эти ключи. Например, если включен бит 0 и нужно выключить его, а бит 2 включить, можно просто передвинуть бит 0 влево на две позиции. Либо, если требуется узнать, задан ли бит 5, можно сдвинуть его вправо на 5 позиций и проверить значение бита 0. Такие перемещения могут осуществляться поразрядными операторами сдвига.

Поразрядные операторы сдвига позволяют также быстро выполнять умножения и деление на степени двойки. Если нужно разделить десятичное число (число десятичной системы счисления) на 10, можно просто сдвинуть десятичную точку на одну позицию влево. Аналогично для умножения на 10 десятичная точка сдвигается на одну позицию вправо, а для умножения на 103 (т.е. 1000) следует переместить десятичную точку на три позиции вправо. Поразрядные операторы сдвига позволяют осуществлять аналогичные операции над двоичными числами. При сдвиге битов вправо число делится на 2 для каждого перемещения на одну позицию. При сдвиге битов влево число умножается на 2 для каждого перемещения на одну позицию.
^

15.2.5.1. Сдвиг вправо со знаком


Оператор сдвига вправо со знаком можно использовать для деления числа на степень двойки. Он использует символ >> (два знака больше подряд) и имеет общий вид:

operand >> n

где n задает число позиций, на которое сдвигается вправо биты operand. Результат эквивалентен делению operand на 2n. Если есть остаток, он отбрасывается. Рассмотрим, как действует этот оператор:

Все биты сдвигаются вправо на число позиций, заданное n. Биты, выдвигаемые за правый край числа, отбрасываются. Для заполнения пустого места, создаваемого операцией сдвига, с левого края добавляются новые биты. Если operand положительный, добавляются нули. Если operand отрицательный, добавляются единицы (потому что отрицательные числа представляются в дополнительном коде). Вот пример псевдокода:

// Самый правый бит (0) теряется, а слева вводятся биты 0

// Результат = 00000000000000000000000000000100

00000000000000000000000000001000 >> 1

Сдвиг числа вправо на один бит равносилен делению на 21 (т.е. 2). В десятичном виде это записывается так:

8 >> 1 // Результат = 4

Обратите внимание, что остаток отбрасывается:

9 >> 1 // Результат все равно 4

Если числа отрицательные, >> все равно делит на 2 при сдвиге на каждый бит:

-16 >> 2 // Результат -4 (-16 делится на 2 в квадрате)
^

15.2.5.2. Сдвиг вправо без знака


Оператор беззнакового сдвига вправо записывается с помощью трех последовательных знаков "больше" (>>>) и имеет общий вид:

operand >>> n

Он работает так же, как оператор сдвига вправо со знаком, но освобождаемые при сдвиге разряды всегда заполняются нулями (независимо от того, положителен ли operand или отрицателен). Для положительных чисел он не отличается от оператора сдвига вправо со знаком.
^

15.2.5.3. Сдвиг влево


Оператор сдвига влево может использоваться для умножения числа на некоторую степень 2. Он записывается с помощью символа << (состоящего из двух символов "меньше" подряд) и имеет общий вид:

operand1 << n

где n задает число позиций, на которое сдвигаются влево биты operand . Результат эквивалентен умножению operand на 2n. Вот как он действует:

Все биты сдвигаются влево на число позиций, заданное n. Биты, выдвигаемые за левый край числа, отбрасываются. Пустые биты, образующиеся справа при сдвиге, заполняются нулями. Например:

01000000000000000000000000001001 << 4

// Результат = 00000000000000000000000010010000

Сдвиг числа влево на 4 бита эквивалентен его умножению на 24 (т.е. 16). В десятичном виде это записывается так:

9 << 4 // В результате получается 9 * 16, т.е. 144

Заметьте, что в предыдущих примерах значение, связанное с конкретным битом, вычислялось "вручную": 1 для бита 0, 2 для бита 1, 4 для бита 2, 8 для бита 3 и т.д. Оператор сдвига влево очень удобен для вычисления значения битов позиции:

(1 << 0) // Bit 0 equals 1

(1 << 1) // Бит 1 равен 2

(1 << 2) // Бит 2 равен 4

(1 << 3) // Бит 3 равен 8

(1 << 15) // Куда проще, чем помнить, что бит 15 равен 32768!

Оператор сдвига влево также удобен для динамического выбора бита по числовому индексу вместо значения бита. В примере 15-1 подсчитывается количество единиц в числе.
^

Пример 15-1. Использование сдвига влево для подсчета установленных битов


myNumber = 27583; // Число, количество 1 в котором будет подсчитано

count = 0;

for (var i=0; i < 32; i++) {

if (myNumber & (1 << i)) {

count++;

}

}

^ Пример 15-2 является разновидностью примера 15-1, использующей оператор сдвига вправо. Вместо левого сдвига, применяемого для получения значения, ассоциируемого с каждым битом, можно повторять правый сдвиг и проверять самый правый бит (бит 0).
^

Пример 15-2. Подсчет числа заданных бит с помощью сдвига вправо


myNumber = 27583;

count = 0;

temp = myNumber; // Создать копию для временного использования

for (var i = 0; i < 32; i++) {

if (temp & 1) {

count++;

}

temp = temp >> 1;

}

Переменная myNumber копируется во временную переменную temp, потому что иначе она была бы разрушена сдвигом вправо. Переменная temp в конечном итоге становится равной 0.
^

15.2.6. Применение поразрядных операций


Рассмотрение поразрядных операторов мы начали с Flash-сайта, на котором продаются автомобили. Изучив работу поразрядных операторов, можно теперь применить их в расчете стоимости автомобиля, как показано в примере 15-3. Файл .fla для этого примера можно загрузить из сетевого Хранилища кода.
^

Пример 15-3. Практическое применение поразрядных операций


// Сначала устанавливаем опции (обычно путем сложения и вычитания чисел,

// исходя из выбора на заполняемой форме, но здесь мы "пришиваем" их в код)

var hasAirCon = (1<<0) // Бит 0: 0 означает "нет", 1 означает "да"

var hasCDplayer = (0<<1) // Бит 1: 0 означает "нет", 2 означает "да"

var hasSunRoof = (1<<2) // Бит 2: 0 означает "нет", 4 означает "да"

var hasLeather = (1<<3) // Бит 3: 0 означает "нет", 8 означает "да"


// Теперь объединим опции в одно число с помощью поразрядного "ИЛИ"

var carOptions = hasAirCon | hasCDplayer | hasSunRoof | hasLeather;


// Вот функция расчета цены

function totalPrice(carOptions) {

var price = 0;

if (carOptions & 1) { // Если задан первый бит

price += 1000; // прибавить $1000

}

if (carOptions & 2) { // Если задан второй бит

price += 500; // прибавить $500

}

if (carOptions & 4) { // Если задан третий бит

price += 1200; // прибавить $1200

}

if (carOptions & 8) { // Если задан четвертый бит

price += 800; // прибавить $800

}


return price;

}


// Все готово: вызовем функцию и проверим, работает ли она!

trace(totalPrice(carOptions)); // Возвращает 3000. Круто...

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

var airConFLAG = 1 << 0; // Бит 0, значение которого 1

var cdPlayerFLAG = 1 << 1; // Бит 1, значение которого 2

var sunroofFLAG = 1 << 2; // Бит 2, значение которого 4

var leatherFLAG = 1 << 3; // Бит 3, значение которого 8

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

Переработайте пример 15-3, использовав переменные и оператор сдвига влево вместо жестко закодированных значений, представляющих опции (комплектацию автомобиля).
^

15.2.6.1. Зачем нужны поразрядные операции?


Хотя пример 15-3 было бы легче понять как последовательность булевых операций, поразрядные операции компактны и выполняются очень быстро. В каждом случае, когда удается говорить с компьютером на его родном двоичном языке, сберегается память и увеличивается скорость.

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

Для более глубокого изучения вопроса ознакомьтесь с превосходной статьей Джина Майерса (Gene Myers) для C-программистов Becoming Bit Wise, расположенной по адресу http://www.cscene.org /CS9/CS9-02.html.
^

15.3. Более сложные вопросы областей видимости функций


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

В главе 9 "Функции" отмечалось, что цепочка области видимости функций обычно определяется относительно предложения, объявляющего функцию. Однако есть расширение этого правила. Если функция из одной шкалы времени (Timeline) присваивается переменной, находящейся на шкале времени другого мувиклипа, это присваивание оказывает воздействие и на цепочку области видимости функции. Если исходная функция вызывается непосредственно, в ее цепочку области видимости включается исходная шкала времени, но если функция вызывается через переменную, ее цепочка области видимости включает в себя шкалу времени переменной.

Допустим, например, что создана функция transformClip( ), которая поворачивает текущий мувиклип и изменяет его масштаб. Угол поворота и коэффициент масштабирования устанавливаются в переменных rotateAmount и widthAmount:

var rotateAmount = 45;

var widthAmount = 50;


function transformClip ( ) {

_rotation = rotateAmount;

_xscale = widthAmount;

}


// Вызвать функцию

transformClip( );

После этого функция transformClip присваивается переменной tc в мувиклипе с именем rect:

rect.tc = transformClip;

При вызове функции transformClip через rect.tc, как показано ниже, ничего не происходит:

rect.tc( );

Почему? Цепочка области видимости хранящейся в переменной tc функции содержит rect, а не шкалу времени исходной функции, поэтому переменные rotateAmount и widthAmount не будут найдены. Но если добавить в rect переменные rotateAmount и widthAmount, функция сможет найти эти переменные, и код сработает:

rect.widthAmount = 10;

rect.rotateAmount = 15;

rect.tc( ); // Устанавливает для rect ширину 10 % и угол поворота 15 градусов

Напротив, когда в присваивании функции участвуют обычные объекты данных на той же шкале времени, цепочка области видимости присвоенной функции не изменяется и определена постоянно относительно объявления функции. Это демонстрирует пример 15-4.
^

Пример 15-4. Фиксированная область видимости методов объектов


// Установка значений переменных

var rotateAmount = 45;

var widthAmount = 50;


// Создать функцию transformClip(), которая

// выводит значения rotateAmount и widthAmount

function transformClip ( ) {

trace(rotateAmount);

trace(widthAmount);

}


// Создать объект, соответствующий мувиклипу

// rect из предыдущего примера

var rectObj = new Object( );


// Копируем transformClip в свойство rectObj

rectObj.tc = transformClip;


// Задать свойства rotateAmount и widthAmount объекта rectObj

rectObj.rotateAmount = 15;

rectObj.widthAmount = 10;


// Теперь вызываем rectObj.tc

rectObj.tc( ); // Выводит: 45 и 50, а не 15 и 10. Область видимости

// у rectObj.tc та же, что и у transformClip().

Если функция присваивается свойству объекта, то ее областью видимости становится шкала времени , на которой находится объявление функции. Однако при присвоении функции удаленному мувиклипу областью видимости этой функции становится шкала времени удаленного мувиклипа.

Заметьте, что такое поведение фактически является отходом от JavaScript, в котором области видимости функции постоянны и определяются объектами, исходя из объявлений функций. Например, если предположить, что фреймы в HTML примерно аналогичны мувиклипам Flash-ролика, можно установить различие между ними: в JavaScript, функция, присвоенная удаленному фрейму, сохраняет в качестве области видимости фрейм с объявлением функции, а не удаленный фрейм, как в примере 15-5.
^

Пример 15-5. Статическая область видимости функций JavaScript


// КОД ВО ФРЕЙМЕ 0 НАБОРА ФРЕЙМОВ

// Присвоение переменной во фрейме 0

var myVar = "frame 0";


// Создать функцию во фрейме 1 и скопировать

// ее обратно во фрейм 0

parent.frames[1].myMeth = function ( ) { alert(myVar); };

myMeth = parent.frames[1].myMeth;


// Вызвать myMeth() из фрейма 0

myMeth( ); // Выводит: "frame 0"


// КОД В КНОПКЕ ФРЕЙМА 1 ТОГО ЖЕ НАБОРА ФРЕЙМОВ

<FORM>

<INPUT type="button" value="click me" onClick="myMeth( );">

</FORM>


// Щелкнуть по кнопке для вызова myMeth( ) из фрейма 1

// Выводит: "frame 0"

// Область видимости myMeth( ) не фрейм 1, а фрейм 0, где

// находится предложение объявления

^

15.4. Тип данных movieclip


Овладев основами ActionScript, вернемся к еще одной таинственной теме. В главе 13 "Мувиклипы" объяснялось, что мувиклипы ведут себя, по большей части, как объекты. Однако мувиклипы - это не просто еще один класс, это самостоятельный тип данных. Гари Гроссман (Gary Grossman), создатель ActionScript, так разъясняет различия между внутренней реализации таких типов данных, как movieclip и object :

Мувиклипы внутри проигрывателя реализованы отдельно от объектов, хотя и те и другие проявляют себя в ActionScript почти одинаковым способом. Главное различие между ними состоит в способе выделения памяти и ее освобождения. Для обычных объектов существуют счетчики ссылок (reference-counted) и сборщики мусора (garbage-collected), а срок существования мувиклипов определяется шкалой времени (Timeline) или явно функциями duplicateMovieClip( ) и removeMovieClip( ).

Если объявить массив с помощью x = new Array( ) , а затем присвоить x = null, то ActionScript сразу определит, что ссылок на объект Array не осталось (нет переменных, которые на него ссылаются), и уберет его как мусор (т.е. освободит занимаемую им память). Периодическая процедура уборки мусора по принципу "найти и подмести" удаляет объекты, содержащие циклические ссылки (т.е. специальная технология позволяет освобождать память, занимаемую неиспользуемыми объектами, ссылающимися друг на друга).

Мувиклипы ведут себя не так. Их создание и уничтожение зависят от расположения объектов на шкале времени. Если они создаются динамически (например, с помощью функции duplicateMovieClip( ) ), то уничтожаются только посредством функции removeMovieClip( ) .

Ссылки на объекты являются указателями (pointers) (указывают адреса памяти). Отслеживание ссылок и сборка мусора оберегают пользователя от "висячих" указателей и утечки памяти. Ссылки же на мувиклипы являются мягкими: фактически ссылка содержит абсолютный путь к цели. Допустим, что есть мувиклип с именем foo. Если задать x = foo (что сделает x ссылкой на мувиклип foo), затем удалить foo используя функцию removeMovieClip( ), а затем создать другой мувиклип с именем foo, то ссылка x снова окажется действующей (она будет указывать на новый мувиклип foo ).

Обычные объекты ведут себя не так. Прежде всего, существование ссылки на объект не позволяет его удалить. Поэтому, если бы мувиклипы были объектами, то их нельзя было бы удалить из памяти с помощью функции removeMovieClip( ), пока переменная x содержит ссылку на него. Кроме того, если создать второй мувиклип с именем foo, то прежний мувиклип foo и новый foo могут существовать одновременно, хотя старый foo больше не будет выводиться.

Итак, отдельный тип данных movieclip оправдан, поскольку имеет большие отличия от типа object. По сходным причанам оператор typeof возвращает function для функций, не смотря на то, что функции во многих отношениях близки к объектам.
1   2   3   4   5   6   7   8   9   ...   82



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

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

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