[C#]Rita ut rektangel runt en "sprite"?

Permalänk

[C#]Rita ut rektangel runt en "sprite"?

Håller på att lära mig spelprogrammering i C# och har ritat ut två "sprites" som jag ska göra så att de kolliderar med varandra.

Har gjort två rektanglar runt båda objekten, men det ligger lite fel. Är det möjligt att rita ut rektanglarna runt objekten så att det blir lättare att se hur fel de ligger?

EDIT: Kan ju nämna att det är XNA

Tack på förhand

Visa signatur
Permalänk
Medlem

Rekommenderar att du kollar upp XNA. Görbra framework för spelprogrammering i C#. Det funkar till PC. Xbox och Windows phone. Fett nice!

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |

Permalänk
Medlem

Ontopic då, i XNA finns det en färdig rectangle class som du bara kan kolla intersection med. BAM, så har du hittesting.

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |

Permalänk
Skrivet av Dakkie:

Ontopic då, i XNA finns det en färdig rectangle class som du bara kan kolla intersection med. BAM, så har du hittesting.

Mjo, nu ser det ut såhär:

Rectangle human = new Rectangle((int)human_position.X, (int)human_position.Y, 100, 20);

Men den lägger sig helt knäppt. Skulle gärna vilja se var/hur den ligger

Visa signatur
Permalänk
Skrivet av Kebabhyvlarn:

Mjo, nu ser det ut såhär:

Rectangle human = new Rectangle((int)human_position.X, (int)human_position.Y, 100, 20);

Men den lägger sig helt knäppt. Skulle gärna vilja se var/hur den ligger

Spontant känns det som att raden borde se ut ungefär så här:

Rectangle human = new Rectangle((int)human_position.X-50, (int)human_position.Y-10, 100, 20);

Det borde centrera den runt human_position i alla fall...

Angående frågan om hur du kan göra den synlig har jag dock inget svar.

Permalänk
Medlem
Skrivet av FlamingLizard:

Spontant känns det som att raden borde se ut ungefär så här:

Rectangle human = new Rectangle((int)human_position.X-50, (int)human_position.Y-10, 100, 20);

Det borde centrera den runt human_position i alla fall...

Angående frågan om hur du kan göra den synlig har jag dock inget svar.

Som FlamingLizard skrev så är det antagligen att din human_position är centrerad mitt i spriten. När du skapar en rectangle matar du antagligen in position (position av översta vänstra hörnet) och offset (rektangelns storlek). Detta får du helt enkelet skystera genom att dra bort halva spritens bred och höjd som FlamingLizard gjort i sitt inlägg.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Skrivet av FlamingLizard:

Spontant känns det som att raden borde se ut ungefär så här:

Rectangle human = new Rectangle((int)human_position.X-50, (int)human_position.Y-10, 100, 20);

Det borde centrera den runt human_position i alla fall...

Angående frågan om hur du kan göra den synlig har jag dock inget svar.

Skrivet av Dew87:

Som FlamingLizard skrev så är det antagligen att din human_position är centrerad mitt i spriten. När du skapar en rectangle matar du antagligen in position (position av översta vänstra hörnet) och offset (rektangelns storlek). Detta får du helt enkelet skystera genom att dra bort halva spritens bred och höjd som FlamingLizard gjort i sitt inlägg.

Ahh, okej tack för svar! Får testa detta.

Visa signatur
Permalänk
Skrivet av FlamingLizard:

Spontant känns det som att raden borde se ut ungefär så här:

Rectangle human = new Rectangle((int)human_position.X-50, (int)human_position.Y-10, 100, 20);

Det borde centrera den runt human_position i alla fall...

Angående frågan om hur du kan göra den synlig har jag dock inget svar.

Skrivet av Dew87:

Som FlamingLizard skrev så är det antagligen att din human_position är centrerad mitt i spriten. När du skapar en rectangle matar du antagligen in position (position av översta vänstra hörnet) och offset (rektangelns storlek). Detta får du helt enkelet skystera genom att dra bort halva spritens bred och höjd som FlamingLizard gjort i sitt inlägg.

Får det tyvärr inte att fungera. Hat testat både utan och med det ni skrev jag skulle ändra på (dvs -10, -50). Förstår dock inte heller varför man gör så

Ska försöka att visa lite nu hur det ser ut.
Den markerade rutan är där själva rektangeln runt min "sprite" ligger (Har testat mig fram )

Koden :

Rectangle plan= new Rectangle((int)plan_position.X, (int)plan_position.Y, 10, 280); Rectangle human = new Rectangle((int)human_position.X,(int)human_position.Y, 50, 70);

EDIT: Det jag vill är att den gröna figuren (human) ska hoppa upp när den rör vid det blåa planet (plan), men det gör den bara när den kommer i kontakt med det svart-markerade området.

Visa signatur
Permalänk
Medlem
Skrivet av Kebabhyvlarn:

Får det tyvärr inte att fungera. Hat testat både utan och med det ni skrev jag skulle ändra på (dvs -10, -50). Förstår dock inte heller varför man gör så

Ska försöka att visa lite nu hur det ser ut.
Den markerade rutan är där själva rektangeln runt min "sprite" ligger (Har testat mig fram )
http://i42.tinypic.com/28jf2q.jpg

Koden :

Rectangle plan= new Rectangle((int)plan_position.X, (int)plan_position.Y, 10, 280); Rectangle human = new Rectangle((int)human_position.X,(int)human_position.Y, 50, 70);

EDIT: Det jag vill är att den gröna figuren (human) ska hoppa upp när den rör vid det blåa planet (plan), men det gör den bara när den kommer i kontakt med det svart-markerade området.

Hänger tyvärr inte riktigt med på vad du vill göra. Det blå planet du nämner är det också en rektangel? Isåfall så kör du en rektangels Intersects() funktion på den andra för att se om de har kolliderat. Eller kör du det blå planet som en y nivå att när human_position kommer under y_nivå så studsar den upp?

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Skrivet av Dew87:

Hänger tyvärr inte riktigt med på vad du vill göra. Det blå planet du nämner är det också en rektangel? Isåfall så kör du en rektangels Intersects() funktion på den andra för att se om de har kolliderat. Eller kör du det blå planet som en y nivå att när human_position kommer under y_nivå så studsar den upp?

Nej, det blå planet är en annnan sprite och när jag ska göra en rektangel runt den så blir rektangeln bara lika stor och på samma position som de de svart markerade område. Det jag vill är att hela rektangeln ska täcka hela "plan" spriten och inte bara en liten del som den gör nu (det svart markerde området jag lagt till senare i paint) Har testat medmassor av olika positioner men lyckas alldrig få det rätt.

Skrev lite fumligt nu på morgonen, hoppas du förstår

Skickades från m.sweclockers.com

Visa signatur
Permalänk
Medlem

Så du har instanser av en Rectangle-klass från XNA och du vill rita ut dessa.. Galen idé här, men vad sägs om att göra just det?

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
Skrivet av gibbon_:

Så du har instanser av en Rectangle-klass från XNA och du vill rita ut dessa.. Galen idé här, men vad sägs om att göra just det?

Testa det som gibbon_ skrev i sitt inlägg för utritning av rektanglar. För ditt project kanske du skulle titta på dessa tutorials då deras project är rätt snarlikt http://xnagpa.net/xna4beginner.php

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Medlem

För att göra detta VÄLDIGT enkelt för dig.

new rectangle(XPOSITION, YPOSITION, WIDTH, HEIGHT)

Så. You get it?

Visa signatur

Corsair Obsidian 250D | i5 7600K | Gigabyte Z270N WiFi | Samsung 960 EVO 250GB | Fractal Design Integra M 650W | Corsair Hydro H90 |Kingston 8GB 2133M DDR4 CL14 | Asus GeForce GTX 970 4GB STRIX DC2 OC MAX |