<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=Flere_Objekter</id>
	<title>Flere Objekter - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://holstebro-htx.dk/index.php?action=history&amp;feed=atom&amp;title=Flere_Objekter"/>
	<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Flere_Objekter&amp;action=history"/>
	<updated>2026-04-20T01:03:35Z</updated>
	<subtitle>Versionshistorie for denne side i Holstebro HTX Wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=Flere_Objekter&amp;diff=1427&amp;oldid=prev</id>
		<title>Bar med 13. okt. 2022, 20:58</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Flere_Objekter&amp;diff=1427&amp;oldid=prev"/>
		<updated>2022-10-13T20:58:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 13. okt. 2022, 22:58&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Linje 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linje 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eksemplet her tager udgangspunkt i Arrays&amp;lt;ref&amp;gt;[https://processing.org/tutorials/arrays/ Arrays Tutorial] på Processing.org&amp;lt;/ref&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eksemplet her tager udgangspunkt i Arrays&amp;lt;ref&amp;gt;[https://processing.org/tutorials/arrays/ Arrays Tutorial] på Processing.org&amp;lt;/ref&amp;gt;.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der er ikke noget spil-element i eksemplet her, det går i alt sin enkelthed ud på at få en række cirkler til at &amp;quot;falde&amp;quot; ned over skærmen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der er ikke noget spil-element i eksemplet her, det går i alt sin enkelthed ud på at få en række cirkler til at &amp;quot;falde&amp;quot; ned over skærmen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
	<entry>
		<id>https://holstebro-htx.dk/index.php?title=Flere_Objekter&amp;diff=1415&amp;oldid=prev</id>
		<title>Bar: Oprettede siden med &quot;Eksemplet her tager udgangspunkt i Arrays&lt;ref&gt;[https://processing.org/tutorials/arrays/ Arrays Tutorial] på Processing.org&lt;/ref&gt;.  Der er ikke noget spil-element i eksemplet her, det går i alt sin enkelthed ud på at få en række cirkler til at &quot;falde&quot; ned over skærmen.  ==Et fast antal cirkler, løst med flere arrays== Der oprettes en konstant &#039;&#039;&#039;objects&#039;&#039;&#039; med antallet af arrays, så man simpelt kan rette hvor mange cirkler der skal være på skærmen.  For at ho...&quot;</title>
		<link rel="alternate" type="text/html" href="https://holstebro-htx.dk/index.php?title=Flere_Objekter&amp;diff=1415&amp;oldid=prev"/>
		<updated>2022-10-13T20:42:29Z</updated>

		<summary type="html">&lt;p&gt;Oprettede siden med &amp;quot;Eksemplet her tager udgangspunkt i Arrays&amp;lt;ref&amp;gt;[https://processing.org/tutorials/arrays/ Arrays Tutorial] på Processing.org&amp;lt;/ref&amp;gt;.  Der er ikke noget spil-element i eksemplet her, det går i alt sin enkelthed ud på at få en række cirkler til at &amp;quot;falde&amp;quot; ned over skærmen.  ==Et fast antal cirkler, løst med flere arrays== Der oprettes en konstant &amp;#039;&amp;#039;&amp;#039;objects&amp;#039;&amp;#039;&amp;#039; med antallet af arrays, så man simpelt kan rette hvor mange cirkler der skal være på skærmen.  For at ho...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eksemplet her tager udgangspunkt i Arrays&amp;lt;ref&amp;gt;[https://processing.org/tutorials/arrays/ Arrays Tutorial] på Processing.org&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der er ikke noget spil-element i eksemplet her, det går i alt sin enkelthed ud på at få en række cirkler til at &amp;quot;falde&amp;quot; ned over skærmen.&lt;br /&gt;
&lt;br /&gt;
==Et fast antal cirkler, løst med flere arrays==&lt;br /&gt;
Der oprettes en konstant &amp;#039;&amp;#039;&amp;#039;objects&amp;#039;&amp;#039;&amp;#039; med antallet af arrays, så man simpelt kan rette hvor mange cirkler der skal være på skærmen.&lt;br /&gt;
&lt;br /&gt;
For at holde styr på elementerne oprettes to arrays &amp;#039;&amp;#039;&amp;#039;posX&amp;#039;&amp;#039;&amp;#039; og &amp;#039;&amp;#039;&amp;#039;posY&amp;#039;&amp;#039;&amp;#039; hvor hvert index indeholder positionen på skærmen.&lt;br /&gt;
&lt;br /&gt;
Da elementerne skal falde med forskellig hastighed, så oprettes et array &amp;#039;&amp;#039;&amp;#039;hastY&amp;#039;&amp;#039;&amp;#039; der indeholder afstanden der skal rykkes nedad for hver frame.&lt;br /&gt;
&lt;br /&gt;
Elementerne skal også have forskellig størrelse, så der laves et array &amp;#039;&amp;#039;&amp;#039;diam&amp;#039;&amp;#039;&amp;#039; med elementernes diametre.&lt;br /&gt;
&lt;br /&gt;
[[fil:fallingCircles.png|right|thumb|400px|Programmets udseende efter kørsel i et stykke tid]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int objects = 20;&lt;br /&gt;
float [] posX = new float[objects];&lt;br /&gt;
float [] posY = new float[objects];&lt;br /&gt;
float [] hastY = new float[objects];&lt;br /&gt;
float [] diam = new float[objects];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I [[setup()]] angives skærmstørrelsen og hvor hurtigt skærmen skal opdateres.&lt;br /&gt;
&lt;br /&gt;
I et loop sættes alle værdierne for elementerne. Først sættes en tilfældig diameter mellem 15 og 25 pixel. Dernæst placeres objektet tilfældigt ud fra hele bredden af skærmen og i en afstand af diameteren over skærmen. Til sidst sættes en tilfældig afstand den skal rykke for hver frame på mellem 3 og 4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  frameRate(60);&lt;br /&gt;
  for (int n = 0; n &amp;lt; objects; n++) {&lt;br /&gt;
    diam[n] = 15 + random(10);&lt;br /&gt;
    posX[n] = random(width);&lt;br /&gt;
    posY[n] = 0 - diam[n];&lt;br /&gt;
    hastY[n] = 3 + random(1);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I [[draw()]] sættes slettes baggrunden først og der angives en farve egenskab.&lt;br /&gt;
&lt;br /&gt;
I et loop tegnes alle cirklerne ud fra deres position og størrelse. Herefter rykkes alle elementerne den angivne afstand ned ad skærmen, og hvis de er kommet under ud af skærmen, så placeres de lige over skærmen igen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(255);&lt;br /&gt;
  fill(128);&lt;br /&gt;
  for (int n = 0; n &amp;lt; objects; n++) {&lt;br /&gt;
    ellipse(posX[n], posY[n], diam[n], diam[n]);&lt;br /&gt;
    posY[n] += hastY[n];&lt;br /&gt;
    if (posY[n] &amp;gt; height + diam[n]) {&lt;br /&gt;
      posY[n] = 0 - diam[n];&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Et fast array med objekter==&lt;br /&gt;
Programmet her løser fuldstændig den samme problemstilling, bare struktureret på en anden måde.&lt;br /&gt;
&lt;br /&gt;
Der anvendes en Class kaldet &amp;#039;&amp;#039;&amp;#039;Element&amp;#039;&amp;#039;&amp;#039; der er et tilfældigt valgt navn.&lt;br /&gt;
&lt;br /&gt;
Først oprettes et array &amp;#039;&amp;#039;&amp;#039;dots&amp;#039;&amp;#039;&amp;#039; på 20 af typen Element, så der kan være 20 elementer.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int objects = 20;&lt;br /&gt;
Element [] dots = new Element[objects];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I [[setup()]] indledes med det samme som før, hvorefter de 20 instanser af Element oprettes og gemmes i arrayet &amp;#039;&amp;#039;&amp;#039;dots&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  frameRate(60);&lt;br /&gt;
  for (int n = 0; n &amp;lt; objects; n++) {&lt;br /&gt;
    dots[n] = new Element();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I [[draw()]] opdateres elementerne i &amp;#039;&amp;#039;&amp;#039;dots&amp;#039;&amp;#039;&amp;#039;, hvor metoden update() tegner elementet ud fra objektets egenskaber, og move() flytter elementet ved at modificere elementets egenskaber.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(255);&lt;br /&gt;
  fill(128);&lt;br /&gt;
  for (int n = 0; n &amp;lt; objects; n++) {&lt;br /&gt;
    dots[n].update();&lt;br /&gt;
    dots[n].move();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Det er normalt at man i processing opretter en Class-definition i sin egen fil (en Tab i kodevinduet).&lt;br /&gt;
&lt;br /&gt;
For at kunne bruge objekterne, så skal der laves en Class-definition af &amp;#039;&amp;#039;&amp;#039;Element&amp;#039;&amp;#039;&amp;#039; som ser ud som den følgende kode. Koden indeholder 4 forskellige dele, som altsammen skal være inde i class-definitionen. Den første del består af de 4 egenskaber &amp;#039;&amp;#039;&amp;#039;posX&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;posY&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;hastY&amp;#039;&amp;#039;&amp;#039; og &amp;#039;&amp;#039;&amp;#039;diam&amp;#039;&amp;#039;&amp;#039;. disse 4 egenskaber er variabler der kun eksisterer inde i objektet når det bliver oprettet.&lt;br /&gt;
&lt;br /&gt;
Den næste del er Constructoren, der skal have class-navnet (her Element), og det ligner en funktion, bare uden typen (som tit er void). Constructoren kaldes når man opretter et nyt objekt af typen Element, så derfor tildeles egenskaberne værdier på dette tidspunkt (som det skete i setup() før).&lt;br /&gt;
&lt;br /&gt;
De to sidste dele af class-definitionen er de to metoder &amp;#039;&amp;#039;&amp;#039;update()&amp;#039;&amp;#039;&amp;#039; og &amp;#039;&amp;#039;&amp;#039;move()&amp;#039;&amp;#039;&amp;#039;. Det metoderne laver er at update() tegner elementet og move() flytter elementet.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
class Element {&lt;br /&gt;
  float posX;&lt;br /&gt;
  float posY;&lt;br /&gt;
  float hastY;&lt;br /&gt;
  float diam;&lt;br /&gt;
  &lt;br /&gt;
  Element() {  // Constructor - kaldes med new Element&lt;br /&gt;
    diam = 15 + random(10);&lt;br /&gt;
    posX = random(width);&lt;br /&gt;
    posY = 0 - diam;&lt;br /&gt;
    hastY = 3 + random(1);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void update() {&lt;br /&gt;
    ellipse(posX, posY, diam, diam);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void move() {&lt;br /&gt;
    posY += hastY;&lt;br /&gt;
    if (posY &amp;gt; height + diam) {&lt;br /&gt;
      posY = 0 - diam;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hele ideen med at lægge ting over i en class for sig er, at man kan styre at det der sker med objektet det kodes i classen, så forskellige objekter ikke har indflydelse på hinanden.&lt;br /&gt;
&lt;br /&gt;
==En dynamisk ArrayList med variabelt antal objekter==&lt;br /&gt;
I dette eksempel starter programmet med en tom liste af elementer, og opretter så elementerne løbende i programflowet, og for at programmet ikke skal ende med at fylde hele PC&amp;#039;ens hukommelse, så fjernes elementerne igen. Til dette formål anvendes en ArrayList&amp;lt;ref&amp;gt;[https://processing.org/reference/ArrayList.html ArrayList] på processing.org&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sammen med ArrayList&amp;#039;en defineres en variabel, der siger hvor mange frames der er til det næste objekt skal oprettes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
ArrayList&amp;lt;Element&amp;gt; dots = new ArrayList&amp;lt;Element&amp;gt;();&lt;br /&gt;
int toNext = 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i [[setup()]] bliver der ikke oprettet nogen variabler, der sættes lige en textSize(20) for at kunne lave en visning af hvor mange aktive elementer der er i ArrayList&amp;#039;en.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  frameRate(60);&lt;br /&gt;
  textSize(20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Det er i [[draw()]] at der håndteres oprettelsen af elementer til visningen. For hver frame trækkes en fra toNext, og når den rammer 0, så sættes der en ny værdi på toNext som er tilfældig fra 1 til og med 4, og der oprettes så et nyt element. Ud fra en test af programmet, så ligger antallet af elementer på ca. 50 når skærmen er fyldt op. Dette antal afhænger af det tilfældige tal i toNext, men også af hvilken hastighed elementerne har ned over skærmen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void draw() {&lt;br /&gt;
  background(255);&lt;br /&gt;
  fill(128);&lt;br /&gt;
  toNext--;&lt;br /&gt;
  if (toNext == 0) {&lt;br /&gt;
    toNext = 1 + int(random(4));&lt;br /&gt;
    dots.add(new Element());&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Efter administrationen med at oprette nye elementer, så tegnes alle elementer i en for-løkke, som løber alle elementer igennem i dots.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  for (Element dot : dots) {&lt;br /&gt;
    dot.update();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I en anden for-løkke, som skal løbe baglæns igennem arrayet foretages flytningen af elementerne, og hvis flytningen resulterer i at elementet er kommet ud over skærmen, så fjernes det fra ArrayList&amp;#039;en.&lt;br /&gt;
&lt;br /&gt;
Nederst på skærmen vises hvor mange elementer der er i ArrayList&amp;#039;en.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  for (int n = dots.size() - 1; n &amp;gt;= 0; n--) {&lt;br /&gt;
    if (! dots.get(n).move()) {&lt;br /&gt;
      dots.remove(n);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  text(dots.size(), 20, 390);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I class-definitionen anvendes de samme egenskaber og metoder som før, men da move-metoden skal kunne angive om den er kommet neden ud af skærmen, så skal den returnere en indikation på dette. Det gøres ved at lade den returnere en boolean, som er true hvis flytningen bliver inden for skærmen, og bliver false hvis elementet er kommet uden for skærmen.&lt;br /&gt;
&lt;br /&gt;
Det kan virke lidt kryptisk at gøre det på denne måde, det ville umiddelbart virke mere logisk, hvis det skete inde i class-koden. Problemet er bare at classen ikke kan fjerne det objekt den afvikler - så får den ikke ryddet op efter sig selv i den struktur den ligger i, derfor skal det ske ude fra med en metode til at fjerne et element fra ArrayList&amp;#039;en.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
  boolean move() {&lt;br /&gt;
    posY += hastY;&lt;br /&gt;
    if (posY &amp;gt; height + diam) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Referencer==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
{{Spiludvikling}}&lt;br /&gt;
&lt;br /&gt;
[[Kategori:Spil_Data-model]]&lt;/div&gt;</summary>
		<author><name>Bar</name></author>
	</entry>
</feed>