Som besökare på Hamsterpaj samtycker du till användandet av s.k. cookies för att förbättra din upplevelse hos oss. Jag förstår, ta bort denna ruta!
Annons

Xna 4.0 (c#)

Skapad av Maackaan, 2012-10-15 11:12 i Webbutveckling & Programmering

2 721
11 inlägg
0 poäng
Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
0
Tja, tänkte bara kolla om jag kunde få lite hjälp med en random'er i c#!

Det är så att jag håller på att göra ett litet program, eller spel, i C# med hjälp utav XNA Game Studios, och jag vill få en viss sprite att hamna på ett random ställe på skärmen, då ser koden ut såhär:

Ett stycke C#-kod:

Random randomizer = new Random();
int randomwidth = randomizer.Next(graphics.GraphicsDevice.Viewport.Width);
int randomheight = randomizer.Next(graphics.GraphicsDevice.Viewport.Height);


Sedan den variabeln som håller värdena:

Ett stycke C#-kod:

trappos = new Vector2(randomwidth, randomheight);


och slutligen koden som ritar upp sprite'n:
Ett stycke C#-kod:

spriteBatch.Draw(Trap, trappos, Color.White);


Det fungerar nästan precis som jag vill, den ritar upp sprite'n på skärmen, med en random position, MEN den fortsätter randoma positionen hela tiden, så den här lilla bilden bara flyger runt i full fart över hela skärmen, hur får jag koden att randoma EN GÅNG, sedan bestämma sig för det värdet?

Säg till om ni inte fattar så lägger jag in ett screenshot:)

Ingen status

Är reklamen ivägen? Logga in eller registrera dig så försvinner den!

Splux
Visningsbild
P 30 Västerås Hjälte 3 131 inlägg
0

Svar till Maackaan [Gå till post]:
Du har väl antagligen lagt din random-grej i din main-loop?

Svårt att säga utan att se mer av koden.

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0

Svar till Splux [Gå till post]:
Nej, den ligger inne Draw:
protected override void Draw(GameTime gameTime)
testade även att göra såhär:
public Random randomizer = new Random();

Ingen status

Splux
Visningsbild
P 30 Västerås Hjälte 3 131 inlägg
0

Svar till Maackaan [Gå till post]:
Kan du slänga upp din kod på http://www.pastebin.com ?

För jag tror fortfarande att du har lagt in det i din main-loop, och "draw" ska bara rita ut allting - dvs, den bör tillhöra din mainloop.

Lägg in det i konstruktorn för ditt objekt annars, så är du säker på att det bara körs en gång... om du inte skapar ett nytt objekt varje gång också.

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0

Svar till Splux [Gå till post]:
http://pastebin.com/rsjrV4gx så, vet inte riktigt vart "konstruktorn" ligger :P
jag har testat att lägga koden på olika ställen, men då blir den "lokal" och hittas inte utav Draw-Scriptet :/

Ingen status

Splux
Visningsbild
P 30 Västerås Hjälte 3 131 inlägg
0

Svar till Maackaan [Gå till post]:
I din draw-metod så har du:
[code]
Random randomizer = new Random();
int randomwidth = randomizer.Next(graphics.GraphicsDevice.Viewport.Width);
int randomheight = randomizer.Next(graphics.GraphicsDevice.Viewport.Height);
Vector2 trappos;
trappos = new Vector2(randomwidth, randomheight);
spriteBatch.Draw(Trap, trappos, Color.White);[/code]

Eftersom att du har din Random där, så kommer din sprite att få en ny position som den ritas ut på varje gång.

(pseudo-kod, är inte så insatt i XNA)
Lägg till det här i din Initialize istället:
[code]
Random rand = new Random();
Vector2 spritepos = new Vector2(rand.Next(0, window-width), rand.Next(0, window-height));
dinsprite.position = spritepos;
[/code]

Dvs, du randomize'ar en position för din sprite mellan 0 och window-width/height (beroende på) som du sedan tilldelar till din sprite's x och y, om du gör detta i Initialize så kommer det enbart att göras en gång.

I draw så ska du endast rita ut sprite'n, och inte flytta på den (eller ge den en ny position för den delen).

Som sagt, inte riktig kod - har lite roliga linker-errors i ett C++ projekt att ta hand om...

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0

Svar till Splux [Gå till post]:
Ok, tack :)

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0
Hm, får fortfarande ett problem, nu så hittar inte min draw variablen trappos

" The name 'trappos' does not exist in the current context "

Ingenting inne i Initialize hittar utanför

Ingen status

Splux
Visningsbild
P 30 Västerås Hjälte 3 131 inlägg
0

Svar till Maackaan [Gå till post]:
Du får helt enkelt göra trappos till en public member av klassen istället för en lokal variabel.

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0

Svar till Splux [Gå till post]:
Ok, tack så mycket för all hjälp :)

Ingen status

Maackaan
Visningsbild
P 28 Tumba Hjälte 297 inlägg
Trådskapare
0
Hm, lyckas fortfarande inte :P
Om någon har tid så vore det väldigt schysst med ett exempel :)

Ingen status


Forum » Datorer & IT » Webbutveckling & Programmering » Xna 4.0 (c#)

Ansvariga ordningsvakter:

Användare som läser i den här tråden just nu

1 utloggad

Skriv ett nytt inlägg

Hej! Innan du skriver om ett potentiellt problem så vill vi påminna dig om att du faktiskt inte är ensam. Du är inte onormal och världen kommer inte att gå under, vi lovar! Så slappna av och gilla livet i några minuter - känns det fortfarande hemskt? Skriv gärna ner dina tankar och frågor, vi älskar att hjälpa just dig!

Den här tråden är äldre än Rojks drömtjej!

Det senaste inlägget i den här tråden skrevs för över tre månader sedan. Är du säker på att du vill återuppliva diskussionen? Har du något vettigt att tillföra eller passar din fråga i en ny tråd? Onödiga återupplivningar kommer att låsas så tänk efter en extra gång!

Hjälp

Det här är en hjälpruta

Här får du korta tips och förklaringar om forumet. Välj kapitel i rullningslisten här ovanför.

Rutan uppdateras automagiskt

När du använder funktioner i forumet så visas bra tips här.


Annons
Annons
Annons
Annons