Permalänk
Medlem

C# Cloning av picturebox?

Jag håller på att koda ett snakespel(nokia style) och behöver lite hjälp. Har skapat ett huvud som i nuvarande form rör sig med hjälp av en timer och kan äta frukter och få poäng. Huvuded är i princip en picturebox som med hjälp av en timer byter sin position i ett koordinatsystem. Nu till problemet. Eftersom tanken är att det ska vara ett snakeliknande spel vill jag att när huvudet äter frukten så ska en ny del växa upp på ormen. Jag vet inte riktigt hur jag ska åstadkomma detta. Så som jag tänker nu är att jag typ klonar huvudet om det nu går och får den att ärva de gamla koordinaterna som huvudet var senast på.

Är det möjligt att på detta sätt klona en och samma picturebox så att nya skapas? Är relativt ny med programmeringen och all hjälp uppskattas.

Tackar

Permalänk
Medlem
Skrivet av Xclusiv8:

Jag håller på att koda ett snakespel(nokia style) och behöver lite hjälp. Har skapat ett huvud som i nuvarande form rör sig med hjälp av en timer och kan äta frukter och få poäng. Huvuded är i princip en picturebox som med hjälp av en timer byter sin position i ett koordinatsystem. Nu till problemet. Eftersom tanken är att det ska vara ett snakeliknande spel vill jag att när huvudet äter frukten så ska en ny del växa upp på ormen. Jag vet inte riktigt hur jag ska åstadkomma detta. Så som jag tänker nu är att jag typ klonar huvudet om det nu går och får den att ärva de gamla koordinaterna som huvudet var senast på.

Är det möjligt att på detta sätt klona en och samma picturebox så att nya skapas? Är relativt ny med programmeringen och all hjälp uppskattas.

Tackar

Ja, det är möjligt. Det finns två generella typer av kopiering/kloning av objekt. Shallow Copy och Deep Copy.
I just ditt fall hade jag nog rekommenderat en egen kopieringsmetod. Detta är att rekommendera när det är få variabler som ska kopieras och/eller man vill ha full kontroll över vad som kopieras. Var noga med att man fortfarande kan råka göra en Shallow Copy när man egentligen vill göra en Deep Copy i detta stadie.

public Picturebox cloneBox(PictureBox original) { var newObject = new PictureBox(); newObject.Height = original.Height; newObject.Width = original.Width; //etc... return newObject; }

Shallow Copy och Deep Copy
http://msdn.microsoft.com/en-us/library/system.object.memberw...

Det är viktigt att förstå skillnaderna mellan dessa två typer. Det står ganska bra förklarat i exemplet som Microsoft beskriver.
Microsoft har som sagt lagt in en inbyggd Shallow Copy-metod som heter "MemberwiseClone".

Jag lämnar informationen på det stadiet så får du fråga mer om det är något du undrar över.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

När du har en 100 enheter lång orm, ska du springa runt och kopiera positioner ett snäpp framåt frame efter frame? Ha ormens delar i en lista av något slag, plocka av svansen och peta in ett nytt huvud. Inget behov av jobbiga kopieringar. Underlättar vid utvidgandet av ormen när den äter en frukt dessutom. (vilken jävla orm-art äter frukt?)

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem

Tack för era svar.

Tack Leedow. Skall testa senare idag

Det är en gay orm =P
Hur kan man ha ormens delar i en lista? Visste inte man kunde lagra information av den typen i en lista.

Permalänk
Medlem
Skrivet av Xclusiv8:

Tack för era svar.

Tack Leedow. Skall testa senare idag

Det är en gay orm =P
Hur kan man ha ormens delar i en lista? Visste inte man kunde lagra information av den typen i en lista.

Man kan lagra vad som helst i vilken lista (collection är ett bättre namn) som helst.
Jag rekommenderar: List<PictureBox>
Exempelvis:

var boxes = new List<PictureBox>(); var firstBox = new PictureBox(); var secondBox = myOwnShallowCopyMethod(firstBox); //Kopierar PictureBox med hjälp av en egen kopierings-metod boxes.Add(firstBox); boxes.Add(secondBox); //Vilket betyder att: //boxes[0] = firstBox //boxes[1] = secondBox (kopian av firstBox)

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Man kan lagra vad som helst i vilken lista (collection är ett bättre namn) som helst.
Jag rekommenderar: List<PictureBox>

I detta fall så tror jag mer på gibbon förslag:

Skrivet av gibbon_:

När du har en 100 enheter lång orm, ska du springa runt och kopiera positioner ett snäpp framåt frame efter frame? Ha ormens delar i en lista av något slag, plocka av svansen och peta in ett nytt huvud. Inget behov av jobbiga kopieringar. Underlättar vid utvidgandet av ormen när den äter en frukt dessutom. (vilken jävla orm-art äter frukt?)

Och sen utnyttja sig av LinkedList(T)

Visa signatur

CPU: i7 6700k + Fractal Design S24 GPU: ASUS GeForce GTX 1070 8GB DUAL OC RAM: Kingston 16GB 2133MHz CL13 MB: MSI GAMING M7 PSU: EVGA Supernova G2 850W, 80+ Gold SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 Chassi: Fractal Design S Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (4x WD RED 6 TB) Console: Xbox One