pascalabcnet/PABCNetHelp/PABCUnits/ABCObjects/ObjectsArray.html

85 lines
4.3 KiB
HTML

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="Objects">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1><span lang="ru">Ì</span>àññèâ <span lang="ru">âñåõ ãðàôè÷åñêèõ îáúåêòîâ
</span>Objects</H1>
<p> ìîäóëå <code>ABCObjects</code> îïðåäåëåí äèíàìè÷åñêèé ìàññèâ <code>Objects</code>,
êîòîðûé
õðàíèò âñå ñîçäàííûå ãðàôè÷åñêèå îáúåêòû. Îí ïðèíàäëåæèò ê òèïó <code>
ObjectsABCArray</code>, îïðåäåëåííîìó â <code>ABCObjects</code>. Äëÿ ìàññèâà
<code>Objects</code> îïðåäåëåíû âñåãî 2 îïåðàöèè:
<code>Objects.Count</code> âîçâðàùàåò êîëè÷åñòâî
ãðàôè÷åñêèõ îáúåêòîâ, à <code>Objects[i]</code>
âîçâðàùàåò <code>i</code>-òûé ãðàôè÷åñêèé îáúåêò (òèïà
<code>ObjectABC</code>, íóìåðàöèÿ îñóùåñòâëÿåòñÿ ñ 0).</p>
<p>Èñïîëüçîâàíèå ìàññèâà <code>Objects</code>
ïîçâîëÿåò åäèíîîáðàçíî îáðàùàòüñÿ êî âñåì ãðàôè÷åñêèì îáúåêòàì, âûçûâàÿ äëÿ íèõ
ëþáûå ìåòîäû è îáðàùàÿñü ê ëþáûì ñâîéñòâàì êëàññà <code>ObjectABC</code>. </p>
<p><b>Ïðèìåð 1.</b> Áðîóíîâñêîå äâèæåíèå îáúåêòîâ.</p>
<blockquote>
<p><code><b>uses</b> ABCObjects;</code></p>
<p><code><b>var</b> i:integer;</code></p>
<p><code><b>begin</b><br>
&nbsp; <b>for</b> i:=1 <b>to</b> 30 <b>do</b><br>
&nbsp;&nbsp;&nbsp; <b>new </b>CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);<br>
&nbsp; <b>while</b> True <b>do</b><br>
&nbsp;&nbsp;&nbsp; <b>for</b> i:=0 <b>to</b> Objects.Count-1 <b>do</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Objects[i].MoveOn(Random(3)-1,Random(3)-1);<br>
<b>end</b>. </code></p>
</blockquote>
<p>Â ýòîì ïðèìåðå ñîçäàåòñÿ 30 îáúåêòîâ <code>CircleABC</code>. Ïîñêîëüêó âñå
îíè ñîõðàíÿþòñÿ â ìàññèâå <code>Objects</code>, ïðè èõ ñîçäàíèè ðåçóëüòàò âûçîâà
êîíñòðóêòîðà íå ïðèñâàèâàåòñÿ íèêàêîé ïåðåìåííîé. Ïîñëå
ñîçäàíèÿ âñå îáúåêòû íà÷èíàþò ïåðåìåùàòüñÿ â áåñêîíå÷íîì öèêëå íà
ñëó÷àéíûé âåêòîð, ñîâåðøàÿ áðîóíîâñêîå äâèæåíèå.</p>
<p><b>Ïðèìåð 2.</b> Èçìåíåíèå ñâîéñòâ îáúåêòîâ çàäàííîãî òèïà.</p>
<blockquote>
<p><code><b>uses</b> ABCObjects;</code></p>
<p><code><b>var</b> i:integer;</code></p>
<p><code><b>begin</b><br>
&nbsp; <b>for</b> i:=1 <b>to</b> 30 <b>do</b><br>
&nbsp;&nbsp;&nbsp; <b>case</b> Random(2) <b>of</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0: <b>new</b> CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1: <b>new </b>RegularPolygonABC(Random(WindowWidth),Random(WindowHeight),20,3,clRandom);<br>
&nbsp;&nbsp;&nbsp; <b>end</b>;<br>
&nbsp; <b>while</b> True <b>do</b><br>
&nbsp;&nbsp;&nbsp; <b>for</b> i:=0 <b>to</b> Objects.Count-1 <b>do</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>if</b> Objects[i] <b>is</b> RegularPolygonABC
<b>then</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegularPolygonABC(Objects[i]).Angle := RegularPolygonABC(Objects[i]).Angle + 1;<br>
<b>end</b>.</code></p>
</blockquote>
<p>Â ýòîì ïðèìåðå ñîçäàåòñÿ 30 îáúåêòîâ <code>CircleABC</code> èëè <code>
RegularPolygonABC</code>. Çàòåì â áåñêîíå÷íîì öèêëå âðàùàþòñÿ òîëüêî îáúåêòû
<code>RegularPolygonABC</code>. Âðàùåíèå äîñòèãàåòñÿ óâåëè÷åíèåì ñâîéñòâà <code>
Angle</code>, êîòîðîå îïðåäåëåíî òîëüêî â êëàññå <code>RegularPolygonABC</code>.
Äëÿ óñòàíîâêè ïðèíàäëåæíîñòè îáúåêòà ê êëàññó <code>RegularPolygonABC</code>
èñïîëüçóåòñÿ îïåðàöèÿ <b><code>is</code></b>, ïîñëå ÷åãî îáúåêò <code>Objects</code><code>[i]</code>
ïðåîáðàçóåòñÿ ê òèïó <code>RegularPolygonABC</code> ïðè ïîìîùè îïåðàöèè
ïðèâåäåíèÿ òèïà.</p>
<p><b>Ïðèìåð 3.</b> Óäàëåíèå âñåõ ãðàôè÷åñêèõ îáúåêòîâ, ïåðåñåêøèõñÿ ñ îáúåêòîì
<code>p</code>:</p>
<blockquote>
<p><code><b>for</b> i:=Objects.Count-1 <b>downto</b>
0 <b>do</b><br>
&nbsp; <b>if </b>(Objects[i]&lt;&gt;p) <b>and</b> (p.Intersects(Objects[i]) <b>then</b><br>
&nbsp;&nbsp;&nbsp; Objects[i].Destroy;</code></p>
</blockquote>
<p> èãðàõ ÷àñòî íóæíî óäàëèòü âñå ãðàôè÷åñêèå îáúåêòû, êîòîðûå &quot;íàñòèã&quot; îáúåêò
<code>p</code>. Äëÿ ýòîãî ñëåäóåò ïåðåáðàòü âñå ãðàôè÷åñêèå îáúåêòû çà
èñêëþ÷åíèåì ñàìîãî <code>p</code> è ïðîâåðèòü èõ íà ïðåäìåò ïåðåñå÷åíèÿ ñ <code>
p</code>. Óäàëåíèå îñóùåñòâëÿåòñÿ âûçîâîì äåñòðóêòîðà ñîîòâåòñòâóþùåãî îáúåêòà.
Îòìåòèì òàêæå, ÷òî â ðåçóëüòàòå óäàëåíèÿ êîëè÷åñòâî îáúåêòîâ óìåíüøàåòñÿ,
ïîýòîìó ñëåäóåò ïåðåáèðàòü îáúåêòû îò êîíöà ê íà÷àëó.</p>
</body>
</html>