[C#/XNA] 'spriteBatch.Draw' tekent soms wazige sprites.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • V1ncam
  • Registratie: November 2009
  • Laatst online: 12-12-2021
Hallo tweakers,

Ik ben een spelletje aan het maken in XNA. Als eerste wil ik even laten zien hoe het eruit ziet in het spel. Links tekent hij hem normaal, en rechts wazig.

Afbeeldingslocatie: http://img845.imageshack.us/img845/9631/vergelijk.png

Het lijkt willekeurig te gebeuren.

Ik weet niet zo goed wat ik moet meegeven om het makkelijker te maken. Eigenlijk hoop ik dat iemand hier denkt: "Hee, dat had ik ook! Moet je gewoon /* Pompiedompiedom */ doen en dat lost het op!" Ik heb het ook al gegoogled, maar volgens mij hebben niet veel mensen hier last van.

Bij bepaalde situaties kies je wordt de animation player aangeroepen:

code:
1
2
3
4
            if (speed.X == 0)
                animPlayer.playAnimation(idleAnimation);
            if (speed.X != 0)
                animPlayer.playAnimation(walkAnimation);


Animation Player:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public void playAnimation(Animation anim)
    {
        if (this.animation == anim)
            return;
        this.animation = anim;
        this.frameIndex = 0;
        this.time = 0.0f;
    }
    
    // De animatie is alle sprites uit de animatie achter elkaar geplakt
    // De animatie klasse heeft alleen wat eigenschappen daarvan ( lengte totaal, aantal frames, 
    // hoe lang een frame moet worden getekent )

    public void Draw(GameTime gameTime, SpriteBatch spriteBatch, Vector2 position)
    {
        spriteBatch.Draw(
                          animation.geheleAnimatie, 
                          position, 
                          animation.berekenWelkDeel(frameIndex), 

                          Color.White, 0.0f, animation.Origin, 
                          1.0f, spriteEffects, 0.0f);
    }



offtopic:
Hoe geef ik aan welke taal de code is?


Groet.

[ Voor 51% gewijzigd door V1ncam op 26-04-2011 00:26 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zonder relevante code en degelijke informatie anders dan "dit *screenshot* doet 'ie" kunnen we hier weinig zinnigs op zeggen anders dan wat er in onze glazen bol verschijnt. Ik vermoed dat je de sprite positioneert op halve pixels ofzo, maar zeker weten doe ik het niet. En, again, zonder relevante code, eigen inzet (Quickstart) en wat informatie die je bijv. met debuggen naar boven haalt (Debuggen: Hoe doe ik dat?) blijft het koffiedik kijken.

En dat blijven we niet herhalen by the way...

[ Voor 9% gewijzigd door RobIII op 25-04-2011 23:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • V1ncam
  • Registratie: November 2009
  • Laatst online: 12-12-2021
Ja, zo'n vermoedde had ik al. Ik zal toch maar wat erin zetten dan, maar ik weet niet waar het fout loopt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CrazyProf schreef op maandag 25 april 2011 @ 23:49:
Ik zal toch maar wat erin zetten dan
Beperk je dan tot relevante(!) delen code a.u.b.
CrazyProf schreef op maandag 25 april 2011 @ 23:49:
maar ik weet niet waar het fout loopt.
Meten = weten. Kwestie van fatsoenlijk debuggen (zie linkje). Voor mijn part dump je elke frame even de x/y coords in een trace en kijk je na een testrun even of er "off-pixel" values bij zitten.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • V1ncam
  • Registratie: November 2009
  • Laatst online: 12-12-2021
RobIII schreef op maandag 25 april 2011 @ 23:52:
Voor mijn part dump je elke frame even de x/y coords in een trace en kijk je na een testrun even of er "off-pixel" values bij zitten.
Het spijt me ontzettend maar, trace? off-pixel? Bedoel je per frame de positie ergens naar toe schrijven en dan kijken of je op niet gehele pixels staat?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CrazyProf schreef op dinsdag 26 april 2011 @ 00:30:
[...]


Het spijt me ontzettend maar, trace?
Het spijt me ontzettend maar: trace ja. Zo moeilijk was dat toch niet?
Er is vast een betere/mooiere term voor maar je haalt toch zeker wel uit de context wat ik bedoel? Halve/driekwart/etc. pixel waardes. Dus geen 1, 3, 189 (integers) maar 1.2334443, 3.5, 189.00001 (floats).
CrazyProf schreef op maandag 25 april 2011 @ 23:38:
offtopic:
Hoe geef ik aan welke taal de code is?
Daar hebben we onze FAQ over code tags voor >>
[code=jetaalhier]
jecodehier
[/code]


Verder vroeg ik je om relevante code; wat moeten wij nu afleiden uit de code die je in je topicstart heb gezet? Verklaar eens hoe dat voor ons relevant is als er geen enkele (positie)berekening of iets dergelijks in staat maar enkel een totaal niet interessante aanroep van wat methodes...

offtopic:
Echt? animation.berekenWelkDeel?
It's up to you, maar why on earth zou je Nederlands gebruiken? Da's toch geen porem?

[ Voor 101% gewijzigd door RobIII op 26-04-2011 00:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Laat eens een gedeelte van je animatie code zien. Misschien is de rectangle die je tekent wel groter dan de sprite van je character, waardoor hij stretched.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Kans is inderdaad groot dat je tekent met float position ipv int position. Math.Round zou hiermee helpen, echter kan dit voor een iets minder vloeiende beweging zorgen (Neem tenminste aan dat het gaat om beweging, je hebt veel te weinig informatie gegeven...) :)

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • V1ncam
  • Registratie: November 2009
  • Laatst online: 12-12-2021
Phyxion schreef op dinsdag 26 april 2011 @ 09:39:
Kans is inderdaad groot dat je tekent met float position ipv int position. Math.Round zou hiermee helpen, echter kan dit voor een iets minder vloeiende beweging zorgen (Neem tenminste aan dat het gaat om beweging, je hebt veel te weinig informatie gegeven...) :)
Ja, dat was het! Dank u zeer!
RobIII schreef op maandag 25 april 2011 @ 23:46:
Ik vermoed dat je de sprite positioneert op halve pixels ofzo, maar zeker weten doe ik het niet.
Ja, had je toch gelijk ;)

Maar ik had daar nooit aan gedacht. Hoe was ik daar door debuggen achter gekomen? Zoiets als een trace ken ik niet en daar kom ik alleen achter door middel van dit soort dingen. ( Ik snap hem nu nog niet, maar ik zal er in ieder geval zo even goed naar kijken )

Thanks anyway

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CrazyProf schreef op dinsdag 26 april 2011 @ 15:35:
Hoe was ik daar door debuggen achter gekomen?
Dan zou ik me eerst eens inlezen wat debuggen precies inhoudt. Kort voorbeeld voor dit geval: je kijkt simpelweg naar de waardes van bepaalde variabelen (x, y pos bijvoorbeeld) tijdens runtime en dat kijken doe je middels a) breakpoints in je debugger, b) watches, c) het "loggen" naar een bestand/printer/email/whocares of een combinatie van a, b en c. Had je een Trace.WriteLine("X: " + MyObject.X + " Y: " + MyObject.Y) gedaan of iets dergelijks dan had je geheid in je Output window / logfile / whatever een output gezien a-la:
X: 1 Y: 29
X: 34 Y: 20
X: 56.333333333 Y: 18
X: 60 Y: 15

Nogmaals het linkje dat ik eerder plaatste: Debuggen: Hoe doe ik dat?
En kijk anders hier of hier of hier bijvoorbeeld eens rond. Visual Studio is een érg krachtige IDE met erg uitgebreide en goede debugging tools. Als je daar geen gebruik van maakt doe je jezelf behoorlijk tekort. Wel programmeren en niet kunnen debuggen is hetzelfde als in de zee springen zonder zwemdiploma A ;)

(En dan heb ik zaken als IntelliTrace, Asserts etc. nog niet eens aangestipt; er is, zeker in VS, een enorme berg mogelijkheden om te debuggen).

[ Voor 20% gewijzigd door RobIII op 26-04-2011 15:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:15

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kan natuurlijk ook gewoon je pixel filter op point sampling instellen ipv bilinear/trilinear/anisotropic.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1