Innehållsförteckning:

Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement: 8 steg
Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement: 8 steg

Video: Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement: 8 steg

Video: Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement: 8 steg
Video: Vägledning för livskraftiga landsbygder, kapitel 4: Hur kan vi arbeta i vardagen? 2024, November
Anonim
Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement
Intressant programmeringsvägledning för Designer-Programprocesskontroll-Loop Statement

Programprocesskontroll- loop-uttalande

Från detta kapitel kommer du i kontakt med en viktig och kraftfull kunskapspunkt-loop-uttalande.

Innan du läser detta kapitel, om du vill rita 10 000 cirklar i programmet, kan du bara göra med en hemsk metod. Det vill säga att skriva 10 000 rader med ellips -kod. De lata koddesigners som vill förbättra effektiviteten med alla medel skulle definitivt inte tillåta att detta hände. Så loop loop statement skapas. Med detta uttalande kan du intuitivt känna kraften i datorautomatisering.

Steg 1: För loop

Det finns massor av loop -uttalanden, bland vilka det mest använda är For Loop. Vi vet alla att funktionen draw kontinuerligt fungerar i cirkulation. Börja från den första meningen i början, den kommer att implementeras från topp till botten till den sista meningen. När operationen är klar startar den om från den första meningen. För uttalande är lite likt funktionsteckning. Kod inom för uttalande kan köras upprepade gånger.

Här är dess grammatikstruktur:

För (uttryck 1; uttryck 2; uttryck 3) {

Slinga kroppen

}

Uppenbarligen är meningar inom loop body vad vi förväntade oss att implementeras upprepade gånger. Uttryck 1 används för att initialisera och tilldela loop -variabeln det första värdet. Uttryck 2 är för slingans skick. Uttryck 3 uppdaterar loop -variabelns värde.

Vad är loop -variabel? Det motsvarar faktiskt en lokal variabel. Låt oss ta en titt på en fullständig skrift.

för (int i = 0; i <10; i ++) {

Slinga kroppen

}

För att förverkliga slingfunktionen, för uttalande förlitar sig huvudsakligen på en lokal variabel, som kommer att användas vid slingavslutningen. Den lokala variabeln i exemplet ovan är i. Uttryck 1 har slutfört initialiseringen av den lokala variabeln. Senare, varje gång slingan fungerar för en gångs skull, måste denna variabel uppdateras. Bland exemplen ovan används i ++ i uttryck 3 för att realisera uppdateringsfunktionen. Genom den kommer variabeln att öka 1 varje gång den uppdateras. I slutändan kan koden i loop -kroppen inte loopa på obestämd tid, annars kan de senare uttalandena inte köras. Således behöver vi ett terminalt tillstånd. Express 2 är bara för det. Här kommer programmet att bedöma om i är mindre än 10. Om det är det, kör sedan på. Om det inte är det, hoppa sedan ur slingan.

Därför är operationssekvensen för for statement precis så här.

Uttryck 1 (initialisering av lokal variabel)

Uttryck 2 (Nöjd, fortsätt sedan att fungera)

Loop body (första upplagan)

Uttryck 3 (uppdatering)

Uttryck 2 (Nöjd, fortsätt sedan att fungera)

Loop body (andra cirkultaion)

Uttryck 3 (uppdatering)

Uttryck 2 (Nöjd, fortsätt sedan att fungera)

Loop body (tredje upplagan) …

Uttryck 3 (uppdatering)

Uttryck 2 (Inte nöjd, hoppa sedan ur öglan)

Du kan simulera denna sekvens av körning i ditt huvud flera gånger. Men det är omöjligt att verkligen förstå koden utan att skriva den med handen för en gångs skull. När vi vill ta reda på ett konstigt koncept kan vi skriva ut värdet i konsolen genom println -satsen.

Kodexempel (5-1): void setup () {

för (int i = 0; i <10; i ++) {

println ("kör");

}

}

Du kan räkna antalet körutgångar i konsolen. Här är det exakt 10. Detta berättar hur många gånger koden i loop -kroppen har körts. Vi kan dock fortfarande inte upptäcka vilka förändringar som faktiskt har hänt i slingan. Så vi kan försöka ändra karaktär "kör in i variabel" i "och se vad som kommer att hända.

Kodexempel (5-2): void setup () {

för (int i = 0; i <10; i ++) {

println (i);

}

}

Nu kan vi se att värdet i i loop -kroppen ständigt ökar. Senare kan vi använda detta värde för att förstå loopens nuvarande process.

I kodexempel (5-2) ändras värdet på i från 0 till 9. Jämfört med de faktiska slingtiderna verkar det alltid ha 1 mindre. Om du inte är van vid det kan uttrycket inom parentes för uttalande skrivas till följande:

för (int i = 1; i <= 10; i ++)

Således överensstämmer jag rättvist med slingtider. Betydelsen av "<=" är mindre än och lika med. Så när jag är lika med 10 kommer det fortfarande att uppfylla villkoret. Därför kommer den att fungera en gång till jämfört med att skrivas in i <10. Även om den börjar från 1 är looptiden fortfarande 10. Självklart, om inget särskilt behövs, skulle jag vilja föreslå att du antar skrivmetoden i exempel i början. Senare kommer vi att introducera vektor eller array för dig, som båda erhåller dess element genom sitt abonnemang. Och de standardiserade prenumerationerna börjar alla från 0. Att definiera initialvärdet till 0 är relativt vanligt.

I exemplet ovan, om vi skriver i är bortom 0, kraschar pogrammet. Eftersom variabeln ständigt ökar kommer den aldrig att uppfylla detta villkor. Det här är precis som att det aldrig kan stoppas så att programmet kommer att köra in i oändlig loop.

Lokala variabler i for-satsen kan inte bara deklarera plasttyper, utan också deklarera variabler i floating-point-typer. Det kan till exempel skrivas som (float i = 0; i <10; i + = 0,02).

Steg 2: Använd för loop för att lösa matematiska problem

Minns du fortfarande en historia om matematikern Gauss i sin barndom? Vid den tiden var Guass 10 år gammal. Hans lärare ville tilldela en uppgift i klassen och frågan var

1+2+3+4……+97+98+99+100=?

Om du räknar med dina händer tar det mycket tid. Men Guass verkar redan ha kommit fram till metoden för summering av den aritmetiska sekvensen. Så strax efter att frågan getts uttalade han sig lätt med svaret, vilket hade överraskat hans lärare mycket.

Nu kanske vi inte fortfarande kommer ihåg vad som är summeringen av den aritmetiska sekvensen, men vi kan få svaret på ett primitivt och våldsamt sätt. Och det är för loop. Eftersom det bara är en liten tårta för datorer att räkna, måste vi beskriva frågan till ett språk som kan kännas igen av datorn, då kan vi enkelt få vårt svar.

Kodexempel (5-3):

void setup () {

int svar = 0;

för (int i = 1; i <= 100; i ++) {

svara += i;

}

println (svar);

}

Jag tror att resultatet du får är detsamma som svaret Guass rapporterade: det är 5050!

Tips: Namnet på lokala variabler i for loop kan ändras efter behag under förutsättning att det följer reglerna för variabelnamn. Du kan skriva det för att vara (int k = 1; k <= 100; k ++). Om inga speciella förhållanden inträffade, är det i som standard för variabeln.

Steg 3: För loopritning

Efter en serie till synes tråkiga sängkläder kan vi äntligen komma in i ett mer intressant avsnitt. Det är att använda för loop för att rita bilder. Vi kan lägga undan den tråkiga matematiska beräkningen nu. Vi designers är mer känsliga för grafik.

Använd för slinga för att rita ett cirkelarray

När vi vill använda för loop för att representera en grupp upprepade element, måste vi se till att dessa element är numeriskt relaterade i förväg, sedan kan vi använda för loop för att enkelt realisera det istället för att göra massivt upprepningsarbete. Antag att om vi vill rita en cirkelrad lika fördelad i horisontell riktning. Dess kraftiga koordinat är oförändrad medan dess horisontella koordinat ändras. Och från vänster till höger ökar den horisontella koordinaten ständigt och det ökande avståndet är detsamma. För närvarande kan vi använda i in för loop för att få den horisontella koordinaten för varje cirkel.

Kodexempel (5-4): void setup () {

storlek (700, 700);

bakgrund (83, 51, 194);

noStroke ();

}

void draw () {

för (int i = 0; i <7; i ++) {

ellips (50,0 + i * 100,0, höjd/2,0, 80,0, 80,0);

}

}

50 står för startpositionen för den första cirkeln i vänster. 100 i i * 100 representerar det ökande avståndet.

Steg 4: Använd för loop för att rita en slumpmässig rund punkt

Ovanstående grafiska position är förutsägbar. Detta kommer att minimera mycket intresse. Vi kan använda funktion slumpmässigt som vi hänvisade till i föregående kapitel och försöka skriva det i ritningsfunktion.

Kodexempel (5-5):

void setup () {

storlek (700, 700);

bakgrund (0);

noStroke ();

}

void draw () {

bakgrund (0);

för (int i = 0; i <10; i ++) {

float randomWidth = random (60.0);

ellips (slumpmässig (bredd), slumpmässig (höjd), randomWidth, randomWidth);

}

}

Här är anledningen till att cirkelns position kontinuerligt blinkar på grund av att varje gång funktionen slumpmässigt fungerar för en gång, är resultatet slumpmässigt. Eftersom funktionsdrag är standard för att köra 60 bildrutor per sekund, så kommer var tionde cirkel som dras i en sekund att ändra sin position 60 gånger. Denna snabba blixt gör att bilden verkar ha mer än bara 10 cirklar. Ändra ett enkelt värde i programmet ger dig en helt annan effekt. Vi kan ändra slingtiden genom att revidera terminaltillståndet. Terminalvillkoret på bilden nedan är i <100

  1. Här är effekten när terminaltillståndet är i <1000:
  2. Slumpmässigt frö
  3. Om jag inte vill att cirkelns position genereras slumpmässigt liksom dess blixt, vad kan jag göra? En metod är att bygga och lagra oberoende variabler för varje cirkel och initiera dessa variabler i installationen. Tilldela dessa variabler ett slumpmässigt värde. Således när vi använder ritningsfunktion inom draw är det vi åberopade värdet lagrat i variabler. Det kommer inte att ändras när som helst. För att rita 10 cirklar kan vi bara använda den här metoden. Men vad händer om vi vill rita 1000 cirklar eller 10 000 cirklar? Det kommer att vara ganska besvärligt om vi använder den här traditionella metoden för att bygga dessa variabler och namnge den. Vi behöver inte lära oss en ny variabel byggmetod. Här är en flexibel metod som kan hjälpa oss att uppnå detta mål. Det är att använda randomSeed. Låt oss nu titta på dess effekt efter att ha använts. Kodexempel (5-6): [cceN_cpp theme = "dawn"] void setup () {size (700, 700); bakgrund (0); noStroke ();}
  4. void draw () {

    bakgrund (0);

    randomSeed (1);

    för (int i = 0; i <10; i ++) {

    float randomWidth = random (20.0, 60.0);

    ellips (slumpmässig (bredd), slumpmässig (höjd), randomWidth, randomWidth);

    }

    } [/cceN_cpp]

    Jämfört med koden tidigare har den inga ändringar förutom att radieområdet för cirkeländringen ändras från 10 till över 30 med en mening av ofSeedRandom. Efter att ha lagt till denna mening verkar grafiken bli statisk.

    Åkalla format:

    randomSeed (a);

    Bland detta format är inställningen av a frö. Du måste fylla ett heltal (skriv flytande punkts värde i P5, det kommer inte att gå fel utan behandla det som ett heltal) i det. Funktionen för randomSeed är att ställa in fröet för slumpmässigt värde. Då kommer det att generera olika slumpmässiga grupper enligt olika frön. Efter det åberopar vi funktion slumpmässigt så att resultatet av avkastningen är bestämt. Här är det bestämda inte för att resultatet är ett bestämt värde utan för den genererade matrisen. Det vill säga resultatet av avkastningen är bestämt i förhållande till påkallningstiderna.

    Kodexempel (5-7): [cceN_cpp theme = "dawn"] void setup () {

    randomSeed (0);

    för (int i = 0; i <5; i ++) {

    println (random (10));

    }

    } [/cceN_cpp]

    Nu fortsätter vi med println för att göra ett experiment. Efter att ha använt randomSeed kommer varje gång du stänger programmet och startar om programmet att återgå till en sträng med samma resultat. Värdet motsvarar sekvensen en efter en. Om du tar bort det, kommer det varje gång att återgå till ett annat värde. Varför har den den här inställningen? Det beror på att det slumpmässiga värdet i sig i programmet är pseudoslumpmässigt. Resultatet verkar slumpmässigt men det genereras faktiskt av en fast och repeterbar beräkningsmetod. Det motsvarar att ange ett primitivt värde för randomSeed, sedan kommer följande resultat att beräknas enligt detta utsäde. Men om vi inte anger fröet kommer programmet som standard att använda systemets nuvarande tid för att generera utsäde. Därför är resultatet av varje operation annorlunda. Exemplet nedan kan hjälpa dig att bättre förstå randomSeed.

    Exempelkod (5-8): [cceN_cpp theme = "dawn"] void setup () {

    storlek (700, 700);

    bakgrund (0);

    noStroke ();

    }

    void draw () {

    randomSeed (1);

    för (int i = 0; i <10; i ++) {

    float randomWidth01 = random (10, 60);

    ellips (slumpmässig (bredd), slumpmässig (höjd), randomWidth01, randomWidth01);

    println (randomWidth01);

    }

    randomSeed (1);

    för (int i = 0; i <10; i ++) {

    float randomWidth02 = random (10, 60);

    ellips (slumpmässig (bredd), slumpmässig (höjd), randomWidth02, randomWidth02);

    println (randomWidth02);

    }

    } [/cceN_cpp]

    Försök att ändra den andra randomSeed (1) till randomSeed (0) och jämföra de slutliga resultaten.

    Tips: I P5 behöver vi bara anropa funktion noLoop i slutet av dragningen så att vi kan få samma effekt. Dess funktion är att avsluta programmet. Det är helt annorlunda än ovanstående arbetsprinciper i naturen.

Steg 5: Använd för Loop to Draw Line

När vi har behärskat användningen av randomSeed kan vi försöka ändra ritningsfunktionen. Till exempel, ändra cirkelritning till linjeteckning. Endast om vi utformar några ändrade regler till slutet av raden, kan vi använda många linjer sammanflätade för att skapa ett unikt mönster.

Kodexempel (5-9):

[cceN_cpp theme = "dawn"] ogiltig inställning () {

storlek (700, 700);

bakgrund (0);

}

void draw () {

randomSeed (0);

för (int i = 0; i <2000; i ++) {

flyta x1 = bredd/2,0;

float x2 = slumpmässigt (50,0, 650,0);

stroke (255, 20);

linje (x1, 50, x2, 650);

}

} [/cceN_cpp]

Skapa enkel pensel

Tillbaka till för loop igen. Ovanstående exempel är inte interaktiva. Om vi vill göra resultatet mer intressant kan vi inte glömma att kombinera mouseX och mouseY i vår kod.

Kodexempel (5-10):

[cceN_cpp theme = "dawn"] ogiltig inställning () {

storlek (700, 700);

bakgrund (255);

noStroke ();

}

void draw () {

för (int i = 0; i <1000; i ++) {

fyllning (0, 30);

float x = mouseX + random (-50, 50);

float y = musY + slumpmässig (-50, 50);

ellips (x, y, 2, 2);

}

} [/cceN_cpp]

En "spridningspunkter" -borste skapas. Eftersom varje intensiv minirunda punkt är baserad på musens position kan den flytta begränsade riktningar från de fyra riktningarna till vänster, höger, upp och ner. Så penselns slutliga formspridning liknar en kvadrat.

Kodexempel (5-11):

[cceN_cpp theme = "dawn"] ogiltig inställning () {

storlek (700, 700);

bakgrund (255);

noStroke ();

}

void draw () {

för (int i = 0; i <1000; i ++) {

flytförhållande = mouseX/(float) bredd;

float x = mouseX + random (-50, 50);

float y = musY + slumpmässig (-50, 50);

fyllning (0, förhållande * 255, 255 * (1 - förhållande), 30);

ellips (x, y, 2, 2);

}

}

[/cceN_cpp]

Om vi använder musens värde för att påverka fyllningsfärgen får vi en mycket mer magisk färggradient.

Steg 6: För Loop Nested

För loop kan häckas. Du kan skriva en for loop igen i for loop. När du behöver rita en tvådimensionell prickmatris kan du välja denna metod.

Kodexempel (5-12):

[cceN_cpp theme = "dawn"] ogiltig inställning () {

storlek (700, 700, P2D);

bakgrund (202, 240, 107);

}

void draw () {

fyllning (0);

för (int i = 0; i <5; i ++) {

för (int j = 0; j <5; j ++) {

flyta x = 150 + i * 100;

flyta y = 150 + j * 100;

ellips (x, y, 60, 60);

println (i + ":" + j);

}

}

}

[/cceN_cpp]

För att använda den kapslade slingan för första gången måste du ta reda på dess logiska relationer. Kodimplementeringen i programmet är alltid uppifrån och ner. Därför är den första implementerade definitivt den yttersta slingan. Varje gång den yttre öglan fungerar för en gångs skull kommer den inre slingan att fungera kontinuerligt tills den inte längre kan uppfylla villkoret. Därefter startar den andra yttre slingoperationen. Efter att den andra operationen startat, kommer den interna slingan att fortsätta att fungera tills den inte kan uppfylla villkoret. En sådan upprepning gör den tills alla villkor inte kan uppfyllas och den hoppar ur öglan.

I ovanstående kod har slingkroppen i den yttre öglan arbetat totalt 5 gånger, medan slingkroppen i den inre slingan har fungerat 25 gånger. Inom 25 gånger, enligt skillnaden i i, j -värde, kan vi försäkra cirkelns horisontella och vertikala koordinat separat. Jag har bäddat in en del av utskriften, du kan observera datautmatningen och tänka på dess förändring. Endast med två kapslade slingor kan vi uppleva alla kombinationer av i, j -data.

Tips

För loop i det andra lagret kondenseras vanligtvis med Tab i början. Detta kan göra kodstrukturen tydligare. Du måste namnge lokala variabler i de två lagren av för loop med olika namn. Bland dem är "i", "j", "k" den vanligaste.

Flexibel användning "i", "j"

De två variabelnamnen "i", "j" representerar lokala variabler för de två lagren för for loop. Exemplet nedan kommer att fördjupa din förståelse för "i" "j". Enligt det olika värdet av "i", "j" kan vi mata in parametrar för att gruppera elementen.

Kodexempel (5-13): [cceN_cpp theme = "dawn"] ogiltig inställning () {

storlek (700, 700);

bakgrund (0);

noStroke ();

}

void draw () {

bakgrund (0);

fyllning (250, 233, 77);

för (int i = 0; i <7; i ++) {

för (int j = 0; j <7; j ++) {

pushMatrix ();

translate (50 + i * 100, 50 + j * 100);

// Inställning 1

// flottörvinkel = sin (millis ()/1000.0) * PI/2;

// Inställning 2

// flytförhållande = i/7,0;

// flottörvinkel = sin (millis ()/1000,0 + förhållande * (PI/2)) * PI/2;

// Inställning 3

flytförhållande = (i * 7 + j) /49,0;

flottörvinkel = sin (millis ()/1000,0 + förhållande * (PI/2)) * PI/2;

rotera (vinkel);

rectMode (CENTER);

// Rita bild 1

rekt (0, 0, 80, 80);

// Rita bild 2

// rect (0, 0, 100, 20);

// Rita bild 3

// rekt (0, 0, förhållande * 50);

popMatrix ();

}

}

} [/cceN_cpp]

Kod Förklaring

rectMode (CENTER) kan ändra ritmetoden för kvadrat. De oringinala tidigare två parametrarna för rect används för att definiera koordinaten för det övre vänstra hörnet av kvadrat. När vi har startat det här kommandot kommer dessa två parametrar att användas för att ställa in koordinaten för den fyrkantiga mittpunkten. För här använder vi paterrn -rotationen genom rotering, så vi måste använda denna metod för att dra mittpunkten till koordinatens ursprungliga punkt.

millis () hämtar tiden från programstart till nutid. Enheten är ms. Detta värde påverkar den ändrade hastigheten för sin utgångsvärde. Om vi skriver millis direkt är den föränderliga skalan för stor. Således måste vi dela det med 1000,0.

I denna koddel använder vi kommentarsymbolen "//" för att dölja flera inställningar. Du kan flytta effekter genom att starta eller stänga. Till exempel, om vi startar meningar bakom "Inställning 3", måste vi använda kommentarsymbol för att stänga kodblock bakom "Inställning 1" och "Inställning 2". När det gäller exempel på denna liknande programstruktur med olika lokala variabler kan vi skriva i detta format. Därför behöver vi inte lagra flera tekniska dokument separat. Vi kan använda denna färdighet ofta under träning och skapande och bevara några tillfredsställande parameterinställningar.

Bland annat representeras inflytandet av i, j -värdet för programmet huvudsakligen genom att ändra "inställning 1 (inställning 2) (inställning 3)". Du kan jämföra utgångsresultaten nedan.

Rita bild 1: Inställning 1

Rita bild 1: Inställning 2

Rita bild 1: Inställning 3

Rita bild 2: Inställning 1

Rita bild 2: Inställning 2

Rita bild 2: Inställning 3

I inställning 1 har vi inte använt i och j för att påverka rotationsvinkeln för varje element. Således kan vi se att varje element är lika. I inställning 2 har vi använt i -värde och både i och j i inställning 3. Slutligen har de påverkat parameterinmatning av funktionssyn genom förhållandet. Detta har förändrat den periodiska vinkeländringen. På grund av den faktiska effekten av inställning 2 och inställning 3 inte är så uppenbar i den animerade grafiken, kan vi observera det från följande skärmdump.

Rita bild 2 (vänster: inställning 2; höger: inställning 3)

Rita bild 3 (vänster: inställning 2; höger: inställning 3)

I den första bilden används förhållandet för att påverka fyrkantig rotationsvinkel. Medan den andra bilden är avsedd att styra cirkelns radie direkt. Vi kan se att den har använt i -värdet mening:

flytförhållande = i/7,0;

Dess vertikelelementbyte är konsekvent. Eftersom den horisontella koordinaten för att styra bilden bara beror på värdet på i, så kommer pattermer med samma horisontella koordinat att vara desamma. Och värdet på förhållandet, rotera vinkeln och cirkelradien är också densamma.

Samtidigt använder vi i, j mening:

flytförhållande = (i * 7 + j) /49,0;

Det kan beskriva "gradient". Här, med metoden att multiplicera en faktor, har den kombinerat påverkan av rader och kolumner. Så varje element är olika.

Steg 7: While Loop

Det finns en bror för för loop. Det är medan loop. Vad för loop kan göra, medan loop kan göra det också. Men användningsfrekvensen för while loop i creativeCoding är inte hög som för loop.

Kodexempel (5-14): [cceN_cpp theme = "dawn"] void setup () {

int a = 0;

medan (a <10) {

println (a);

a ++;

}

} [/cceN_cpp]

Grammatikstrukturen för while är lättare att förstå än för. Vi kan skapa variabler innan påståendet. Fyll sedan i ett uttryck inom hakparentes. När den är nöjd, använd sedan meningarna i loop -kroppen. Slutligen sätter vi ett uttryck i loop -kroppen för att uppdatera variablerna, sedan medan loop är klar. När det gäller de säkrade slingtiderna använder vi ofta för loop. När det gäller oändligt variabelt värde rekommenderar vi att du använder while loop.

Tror:

Försök att använda alla typer av grundläggande element för att ersätta ritelement i loop för att skapa olika penslar.

Kombinera med trigonometrisk funktion som hänvisades till i det senaste kapitlet, försök att ändra "spridningspunkter" -borsten till en rund formborste.

Försök att göra en tvådimensionell prickmatris med en endast för slinga.

Förhandsvisning av nästa kapitel Som med denna kurs hittar du alla nya kunskaper du lär dig, möjligheten att spela kommer omedelbart att öka mycket. Programmet är en pandoraskruta. Allt du kan tänka dig, det kan göra det för dig. Så det finns ingen anledning för oss att inte lära oss detta språk som kan kommunicera med datorer. I vårt nästa kapitel kommer vi att introducera ytterligare ett processkontrolluttalande om det är till dig. Det kan styra processflödet och generera mer komplicerade och förändrade resultat. Med if-uttalande kan du enkelt skapa dina egna text-äventyrsspel! Denna artikel kommer från designer Wenzy. Relativa läsningar: Intressant programmeringsvägledning för designer-Bearbetning av inledande beröring Intressant programmeringsvägledning för designer-Skapa ditt första bearbetningsprogram Intressant programmeringsvägledning för designer –Få din bild att köra (del ett) Intressant programmeringsvägledning för designer – Få din bild att köra (del två)

Steg 8: Källa

Denna artikel är från:

Om du har några frågor kan du kontakta : [email protected].

Rekommenderad: