05. juni 2005 - 01:11Der er
9 kommentarer og 1 løsning
Kassen står ikke stille
Hej eksperter. Jeg har de sidste mange nætter siddet og arbejdet med mit første c# program. Her har jeg fået lavet nogle små kasser som jeg så kan vælge ved at klikke på dem, hvorefter jeg trykker et andet sted på min form, som den valgte kasse så bevæger sig hen til.
Problemet er bare at det er rent tilfældigt om kassen står helt stille når den når hen til slutpunktet, eller om den står og "danser" - går en smule frem og tilbage... koden for bevægelsen af kassen ser ud som følger:
For mig lugter det lidt af at der er tale om noget med at kassens bevægelse bliver lavet ved at lægger 1 til kassens position, men at wantedX/Y godt kan være et tal med nogle decimaler bagpå... og derved vil this.X/Y aldrig blive det samme som this.wantedX/Y, derfor står den og hopper hele tiden... Jeg har prøvet at løse dette gennem konvertering af variable typer og nogle if-sætninger, men intet virker... Har I nogen forslag til hvordan dette kan løses?
NB! Er der brug for mere kode så poster jeg gerne...
Kan du ikke kaste en label på din form, så du kan se hvilke værdier, der aktuelt findes, for jeg ville også gætte på, at det havde noget med størrelserne på værdierne at gøre !-)
Nej, du har næppe decimaler på din .X og .Y. Du styre jo trods alt selv data-typen, og hvis det er en Point så er det heltalskoordinater (PointF bruger float).
Dit problem består i din første if:
if (this.wantedX!=this.X || this.wantedY!=this.Y)
Denne kommer du ind i hvis blot en af dine koordinater er forskellig fra deres wanted-version. Den anden koordinat kan derimod sagtens være lig med sin wanted-version. Alligevel vil den så efterfølgende blive justeret væk fra wanted-versionen af den tilhørende if-sætning længere nede.
roenving> Njaa, men så får du jo ikke justeret this.Y før at this.X er blevet lig wantedX - dvs. at spriten går vandret et stykke vej, og først derefter lodret. I den oprindelige kode går den skrå.
Jeg kan nu sagtens sætte mig ind i ønsket om en mere simpel kode:
Jamen................. DET VIRKER!! :D Rart at man kan komme herind og blive sat på plads når man har set sig blind på et problem. Jeg kan sagtens se problemet nu hvor du gør mig opmærksom på det.
Jeg har dog lige et lille spørgsmål. Hvorfor har det nogen indflydelse om man skriver if-sætningerne i dette stykke uden { } ?:
if (this.wantedY != this.Y) { if (this.wantedY > this.Y) { if (this.wantedX == this.X) PlayerSpriteState = PlayerSpriteStates.Down;
Når jeg smider { } ind bevæger spriten sig først af X og derefter af Y, istedet for at gøre begge dele på engang (gå skråt). - Og så smid lige et svar nielle, mange tak for hjælpen ;)
Hvis en kodeblok består af en enkelt linje kan man udelade tuborg hvis man vil.
Det kan imidlertid være nødvendigt at have dem, når man begynder at blande en else ind i billeder, idet der så ville kunne opstå tvivl om hvilken if denne tilhøre. Og det er vist netop det som sker for dig:
Din kode – med tuborg:
if (this.wantedY != this.Y) { if (this.wantedY > this.Y) // [if-2] { if (this.wantedX == this.X) PlayerSpriteState = PlayerSpriteStates.Down;
this.Y++;; } else // Hører sammen med [if-2] { if (this.wantedX == this.X) PlayerSpriteState = PlayerSpriteStates.Up;
this.Y--; } }
Din kode – uden tuborg:
if (this.wantedY != this.Y) // [if-1] if (this.wantedY > this.Y) { if (this.wantedX == this.X) PlayerSpriteState = PlayerSpriteStates.Down;
this.Y++;; } else // Hører sammen med [if-1] { if (this.wantedX == this.X) PlayerSpriteState = PlayerSpriteStates.Up; this.Y--; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.